0x01
前言
作者:HackBraid,乌云核心白帽子。
白帽子分享之代码审计的艺术系列(2、3、四季)是对绕过全局防护的场景进行的总结。没看前几季的朋友,能够关注下。
代码审计的艺术系列—第1篇
白帽子分享之代码的艺术系列—第二篇
白帽子分享之代码审计的艺术系列第三季
白帽子分享之代码审计的艺术系列第四季
接下来两篇介绍全局防护存在的盲点,首要是上篇: 盲点如下:
①注入点类似id=1这种整型的参数就会完全没视GPC的过滤;
②注入点包括键值对的,那样这儿只检测了value,对key的过滤就无防护;
③有时候全局的过滤只过滤掉GET、POST和COOKIE,然则没过滤SERVER等变量。 附平常的SERVER变量(详细含义自动百度):QUERY_STRING,X_FORWARDED_FOR,CLIENT_IP,HTTP_HOST,ACCEPT_LANGUAGE
0x01
准备
知识贮存:php基本、MySql入门
工具:notepad++
服务器环境:wamp 测试代码和sql的链接:
http://pan.baidu.com/s/1cq公斤7G暗码: nesy
0x02
全局防护盲点总结上篇的脑图
0x03
数字型注入
完全没视GPC的数字型的注入,其实仔细总结下发掘还是非常多能够学习的地区。
1.传入的参数未做intval转换、构造的sql语句无单引号守护
缺陷代码:
这种数字型的注入是全局防护的盲点,构造注入语句完全不必须单引号的支持,因此亦就不存在转义了。例如咱们直接构造获取管理员账户暗码的POC:
http://localhost/sqltest/mangdian/int1.php?id=-1 union select 1,2,concat(name,0x23,pass) from admin%23
2.php
弱类型语言,判断规律错误诱发注入
缺陷代码:当然前提是数字型的注入,这儿特殊之处在于增多了个if($id<1)的规律判断,但PHP弱类型语言在规律判断上0<1和0 union select 1<1是等价的,都返回True。因此构造获取管理员账户暗码的POC:http://localhost/sqltest/mangdian/int2.php?id=0 union select 1,2,concat(name,0x23,pass) from admin%23 3.
过程中不全是数字型,忘记加单引号
这种状况是在第1条sql语句里是有单引号守护的,紧接着第二条sql语句无单引号守护诱发的注入,缺陷的代码如下:
第一条sql语句有单引号守护,第二条sql语句无了单引号守护从而能够进一步注入。构造获取管理员账户暗码的POC:http://localhost/sqltest/mangdian/int3.php?id=0 union select 1,2,concat(name,0x23,pass) from admin%23
0x04
数组类型,全局防护只过滤了value/key,未过滤代入查找
全局防护的代码只对数组中的vaule进行了过滤,key未过滤诱发注入,全局防护缺陷代码如下:
能够看到,对GET、POST和COOKIE传递的数组参数只过滤了value,忽略了key,漏洞代码如下:
虽然查找语句中WHERE id=’”.$key.”‘有单引号守护,然则全局防护代码就没过滤key就存在注入了,首要POST请求下:http://localhost/sqltest/mangdian/array.php title[1]=news title发掘能够获取正常内容:
查找语句为:SELECT * FROM news WHERE id=’1’ and title=’news title’ 构造获取管理员账户暗码的POST请求:http://localhost/sqltest/mangdian/array title[-1’ union select 1,2,concat(name,0x23,pass
|