![2c0e7078c9d48bf299e1c510864b48cb.png](https://i-blog.csdnimg.cn/blog_migrate/a8b444fb1baae3066a04090f0c7ff365.png)
在你没有取得成功之前,一切的才华宛若狗屎。
匠心
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
前言
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
突然想到都没简要介绍一下该靶机的关卡布局,上图吧。
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 31
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
和 Less 29 相似,就是参数使用双引号+括号引用了,注入的时候注意闭合即可
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 32
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
check_addslashes()转义的字符有:
反斜杠
单引号
双引号
设置gbk编码方式(关键)
参数被过滤之后单引号引用
有数据回显
漏洞利用
由于是数据库使用了 GBK 编码造成的宽字节漏洞。先简单介绍一下宽字节吧。
宽字节 GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。
宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。
宽字节注入利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围)
例如:
单引号被转义之后会在前面添加一个反斜杠,即 \' ,经过 URL 编码之后就是 %5C%27 如下:
‘ --> \’ --> %5C%27
这是如果在单引号前面加 %df 那么经过转义之后就是 %df%5C%27,而在 MySQL 使用 gbk 编码的时候就会将 %df%5C 认为是一个字符 � ,于是 %27 即单引号就逃逸出来了,就可以起到闭合作用了。
%df ‘ --> %df ’ --> %df%5C%27 --> �%27
union 注入
?id=0%df' union select 1,2,3 --+
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 33
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
单引号(’)
双引号(")
反斜杠(\)
NULL
参数被过滤,单引号引用
数据回显
漏洞利用
单引号闭合
宽字节注入
union 注入
?id=0%df' union select 1,2,3 --+
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 34
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
参数 post 方式提交
addslashes() 函数过滤参数
设置数据库 gbk 编码
单引号引用参数
数据回显
漏洞利用
宽字节注入
在 POST 参数构造 payload
union 注入
post 参数不被编码,所以直接提交�uname=�' union select 1,2 #&passwd=1111
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 35(why care for addslashes())
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
参数直接拼接,没有单引号/双引号/括号引用
漏洞利用
直接构造 SQL 语句注入即可,不用在意 addslashes() 函数,因为都不需要使用到 单双引号闭合绕过了。
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 36
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
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 --+
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 37
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
POST 请求
mysql_real_escape_string() 进行参数过滤
单引号引用参数
数据回显
设置数据库gbk的字符集编码形式
漏洞利用
在 POST 提交的参数进行宽字节注入即可uname=0�' union select 1,2 #&passwd=123
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 38
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
mysqli_multi_query() 函数执行一个或多个针对数据库的查询。
多个查询用分号进行分隔。
mysqli_store_result()转移上一次查询返回的结果集
参数单引号引用
这是一个典型的堆叠注入漏洞
漏洞利用
?id=1';create table test38 like users;--+
当然,常规的注入也是可以的。
?id=0' union select 1,2,3 --+
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 39
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
相比较 Less 38 ,Less 39 在构造 sql 查询语句的时候对参数是直接拼接
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
漏洞利用
思路和 Less 38 一样。
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
less 40
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
源码分析
参数由单引号+括号引用
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
漏洞利用
思路和 Less 38 一样。
![d22c9e981f48c1baf38a6f0bf0ef4890.gif](https://i-blog.csdnimg.cn/blog_migrate/d651da52450e61bf571eee126a603b53.gif)
尾声
![2a22de299a5ca8241e1ded815f8b0b2e.gif](https://i-blog.csdnimg.cn/blog_migrate/3af485ea59c1491f4c7f28cc9a8f65fc.gif)
我是匠心,一个在清流旁默默磨剑的匠人,期待那一天能利刃出鞘,仗剑走江湖。