0x00前言:
作者:HackBraid,乌云核心白帽子。真名李斌,现汽车之家高级安全工程师。就职于奇虎360多年,熟悉代码审计、渗透测试等Web安全领域。白帽子分享之代码审计的艺术系列(二、三、四季)是对绕过全局防护的场景进行的总结。没看前几季的同学,可以关注下。 代码审计的艺术系列—第一篇 代码审计的艺术系列—第二篇 代码审计的艺术系列—第三篇 代码审计的艺术系列—第四篇 代码审计的艺术系列—第五篇接下来两篇介绍全局防护存在的盲点,之前有上篇(第五季)的介绍,现在是下篇: 盲点如下:①FILES注入,全局只转义掉GET、POST等传来的参数,遗漏了FILES;②变量覆盖,危险函数:extract()、parse_str()、$$。
0x01准备:
知识储备:php基础、MySql入门工具:notepad++服务器环境:wamp
测试代码和sql: 文档里
0x02全局防护盲点总结下篇的脑图:
0x03FILES注入:
FILES注入一般情况是是因为上传时把上传的名字带到insert入库产生的,这里看下tipask问答系统,首先看看它的全局防护是怎么处理的:可以看到对get和post传来的数据进行了addslashes特殊转义处理,对$_FILES没有任何处理操作,我们全局搜索$_FILES,发现/control/attach.php有上传处理,我们跟进:
可以看到这句$_ENV[‘attach’]->add($clientFile[“name”]…),将$clientFile[name] = $_FILES[“upfile”][name]带入了如下add入库的操作,从而造成注入。
上传一个文件,然后修改文件名称为以下代码即可获取管理员账户密码:
数据库里成功将管理员账户密码插入到attach表中:
0x04变量覆盖:
出现比较多的是 extract函数,例如extract($_POST)会直接从POST数组中取出变量,覆盖掉之前的一些变量。浏览器里post直接传a=1发现成功覆盖了变量a的值
之前出现过案例是覆盖表前缀上,例如sql执行语句如下:
select title,content from {$pre}news where id=1
然后攻击者直接浏览器提交pre=“获取敏感信息的语句”来覆盖表前缀从而实现注入攻击。
$$变量覆盖
原理其实跟上面一样,有个很经典的$$变量覆盖的代码:
测试发现成功覆盖了变量a
本篇的内容,我们就介绍到这里,下一篇欢迎持续关注。
原创文章,转载请注明: 转载自安兔|anntoo.com 互联网安全新媒体平台
本文链接地址: 代码审计的艺术系列—第六篇