sql注入代码审计:
介绍:
数字型SQL注入审计
当程序的变量没有做处理而直接拼接在SQL注入语句中,没有单引号的保护,就容易造成SQL注入。
字符型SQL注入审计
当程序的变量没有做处理而直接拼接在SQL注入语句中,虽然有单引号的保护,但我们如果能闭合SQL,也就产生了SQL注入漏洞。
其实两者的区别就是有没有单引号的保护‘
我们用pikachu靶场来进行实验练习讲解
一、数字型注入:
代码审计:
在第一条标记的地方是,通过post方法传参进入的
第二条查询语句id是没有任何符号包裹的,所以是一个数字型注入
抓个包进行构造payload
and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata
发现成功利用
二、字符型注入(单引号保护)
代码审计
咱们可以发现第一行是通过get传参进入的
第二处是单引号包裹
白盒测试就是那么轻松
payload构造拿下库
http://127.0.0.1:8086/pikachu/vul/sqli/sqli_str.php?name=lili ‘ and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata–+&submit=%E6%9F%A5%E8%AF%A2
三、盲注
代码审计
布尔盲注
咱们看到源码之后,会发现,是单引号闭合,通过get型进行传参,不再进行验证
mysqli_query()这个函数将错误信息抑制了
时间盲注
这个源码和上一个差不多
mysqli_num_rows 返回结果集中行的数量
mysqli_fetch_assoc 从结果集中取得一行作为关联数组
四、http头部注入代码审计
代码审计
第一份源码
第一行咱们可以看到是通过一个函数escape进行转义,防注入,也是通过post形式传入的参数
第二行的查询语句中,咱们可以看到password是通过md5加密的
只能通过username入手,这是常规思路
第二份源码
但是从它文件包含的源码来看
很明显了
第一行是通过http$_SERVER方法传入的,在我所学过的,只有UA头能注入,又是单引号闭合,所以要从UA头部下手,
首先在登录页面进行抓包
发现第一个思路确实不可行
换UA头部试试
需要先登录成功
之后再抓包
验证,就不再进行构造payload
五、宽字节注入
代码审计
单引号闭合
最关键的一点是
$set = “set character_set_client=gbk”; ##这一点是使用了gbk编码
绕过方法
先用gbk编码,在进行使用%df绕过
%df
%99等
验证,由于他是post传参进入的,所以我们要进行抓包再方便我们后续操作
payload:
name=kobe%99′ union select version(),database()#&submit=%E6%9F%A5%E8%AF%A2
第二种
payload:
name=kobe%df’ union select version(),database()#&submit=%E6%9F%A5%E8%AF%A2
来源:freebuf.com 2021-03-09 19:26:06 by: 抽华子的灰鹿
请登录后发表评论
注册