代码审计–sql注入篇 – 作者:抽华子的灰鹿

sql注入代码审计:

介绍:

数字型SQL注入审计

当程序的变量没有做处理而直接拼接在SQL注入语句中,没有单引号的保护,就容易造成SQL注入。

字符型SQL注入审计

当程序的变量没有做处理而直接拼接在SQL注入语句中,虽然有单引号的保护,但我们如果能闭合SQL,也就产生了SQL注入漏洞。

其实两者的区别就是有没有单引号的保护‘

我们用pikachu靶场来进行实验练习讲解

一、数字型注入:

代码审计:

1615288836_60475a049e2581417a9f8.png!small?1615288837808

在第一条标记的地方是,通过post方法传参进入的

第二条查询语句id是没有任何符号包裹的,所以是一个数字型注入

抓个包进行构造payload

and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata

1615288870_60475a267b2797190423d.png!small?1615288871569

发现成功利用

二、字符型注入(单引号保护)

代码审计

1615288893_60475a3d058a37e69ed24.png!small?1615288893758

咱们可以发现第一行是通过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

1615288911_60475a4f545de6afb3035.png!small?1615288913008

三、盲注

代码审计

布尔盲注

1615288925_60475a5ddf57c5585fef0.png!small?1615288927215

咱们看到源码之后,会发现,是单引号闭合,通过get型进行传参,不再进行验证

mysqli_query()这个函数将错误信息抑制了

时间盲注

1615288941_60475a6d452c3808c4d05.png!small?1615288942139

这个源码和上一个差不多

mysqli_num_rows 返回结果集中行的数量

mysqli_fetch_assoc 从结果集中取得一行作为关联数组

四、http头部注入代码审计

1615288951_60475a7706a22583d45f2.png!small?1615288952735

代码审计

1615288961_60475a815b25169077368.png!small?1615288962053

第一份源码

第一行咱们可以看到是通过一个函数escape进行转义,防注入,也是通过post形式传入的参数

第二行的查询语句中,咱们可以看到password是通过md5加密的

只能通过username入手,这是常规思路

1615288969_60475a89a4ae78a7e3177.png!small?1615288970546

1615288975_60475a8fbc8da922bb7ab.png!small?1615288976908

第二份源码

但是从它文件包含的源码来看

很明显了

第一行是通过http$_SERVER方法传入的,在我所学过的,只有UA头能注入,又是单引号闭合,所以要从UA头部下手,

首先在登录页面进行抓包

1615288988_60475a9c86ebad43721c5.png!small?1615288989408

发现第一个思路确实不可行

换UA头部试试

需要先登录成功

1615288999_60475aa7e512270247a17.png!small?1615289000992

之后再抓包

验证,就不再进行构造payload

1615289009_60475ab1b94a65b2cc882.png!small?1615289010493

五、宽字节注入

代码审计

1615289023_60475abf7a7e4d40d5c3a.png!small?1615289024409

单引号闭合

最关键的一点是

$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

1615289055_60475adf29dd651ef4053.png!small?1615289056131

第二种

payload:

name=kobe%df’ union select version(),database()#&submit=%E6%9F%A5%E8%AF%A2

1615289065_60475ae9e1d95b63de857.png!small?1615289067038

来源:freebuf.com 2021-03-09 19:26:06 by: 抽华子的灰鹿

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论