sql括号转义_SQL手动注入:sqlilabs(less3140)

2c0e7078c9d48bf299e1c510864b48cb.png点击蓝字关注我们吧!

在你没有取得成功之前,一切的才华宛若狗屎。

匠心
d22c9e981f48c1baf38a6f0bf0ef4890.gif

前言

2a22de299a5ca8241e1ded815f8b0b2e.gif

突然想到都没简要介绍一下该靶机的关卡布局,上图吧。

8255d2ef3b5890491c74364d2d1ed431.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 31

2a22de299a5ca8241e1ded815f8b0b2e.gif

和 Less 29 相似,就是参数使用双引号+括号引用了,注入的时候注意闭合即可

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 32

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

check_addslashes()转义的字符有: 

反斜杠 

单引号 

双引号 

设置gbk编码方式(关键) 

参数被过滤之后单引号引用 

有数据回显

f663b6715ef454232febde44912f7301.png

漏洞利用

由于是数据库使用了 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 --+

8a08ade38cb562b17e66976e5d7e3317.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 33

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。 

预定义字符是: 

单引号(’) 

双引号(") 

反斜杠(\) 

NULL

参数被过滤,单引号引用

数据回显

b205f6dfcf6bf07e797d08e11a5d7175.png

漏洞利用

单引号闭合 

宽字节注入

union 注入

?id=0%df' union select 1,2,3 --+

ad12230c6ee4ce91a9c747e6d492a6ec.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 34

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

参数 post 方式提交 

addslashes() 函数过滤参数 

设置数据库 gbk 编码 

单引号引用参数 

数据回显

6bf17cd2445e38c75b85c6bc2ca77aec.png

漏洞利用

宽字节注入 

在 POST 参数构造 payload

union 注入

post 参数不被编码,所以直接提交�uname=�' union select 1,2 #&passwd=1111

7e01427e578cc409c72b0c4183d66ef4.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 35(why care for addslashes())

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

参数直接拼接,没有单引号/双引号/括号引用

d9d710f0ddda49f58a2de69c75ff8028.png

漏洞利用

直接构造 SQL 语句注入即可,不用在意 addslashes() 函数,因为都不需要使用到 单双引号闭合绕过了。

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 36

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

mysql_real_escape_string() 预定义的字符 

\x00 

\n 

\r

\

’ 

"

\x1a

源码只是单纯地用 mysql_real_escape_string() 函数对参数进行过滤,因为又有mysql_query("SET NAMES gbk");的设置,所以仍然存在宽字节注入。

5bfcbb212ed0549061be8b875677cd7b.png

漏洞利用

?id=0%df' union select 1,2,3 --+

ad98d151f6127903e221b0559308dd3e.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 37

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

POST 请求 

mysql_real_escape_string() 进行参数过滤 

单引号引用参数 

数据回显 

设置数据库gbk的字符集编码形式

fa59bf793eda5219117b2c31e6dea949.png

漏洞利用

在 POST 提交的参数进行宽字节注入即可uname=0�' union select 1,2 #&passwd=123

564bc1338e00954edf890b30f012514e.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 38

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

mysqli_multi_query()  函数执行一个或多个针对数据库的查询。

多个查询用分号进行分隔。 

mysqli_store_result()转移上一次查询返回的结果集 

参数单引号引用 

这是一个典型的堆叠注入漏洞

90e39307950114cc4c1eb588b91f5361.png

漏洞利用

?id=1';create table test38 like users;--+

b3b3f1975c611eadd8e4e77f33fb2ff9.png

当然,常规的注入也是可以的。

?id=0' union select 1,2,3 --+

f0eef36a943ebd9a7c55aed3f0a33b30.png

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 39

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

相比较 Less 38 ,Less 39 在构造 sql 查询语句的时候对参数是直接拼接

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

漏洞利用

思路和 Less 38 一样。

d22c9e981f48c1baf38a6f0bf0ef4890.gif

less 40

2a22de299a5ca8241e1ded815f8b0b2e.gif

源码分析

参数由单引号+括号引用

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

漏洞利用

思路和 Less 38 一样。

d22c9e981f48c1baf38a6f0bf0ef4890.gif

尾声

2a22de299a5ca8241e1ded815f8b0b2e.gif

我是匠心,一个在清流旁默默磨剑的匠人,期待那一天能利刃出鞘,仗剑走江湖。

baa9f21a5dc38cbe8042f8e30c68bdc1.png

看完能有收获就行啦!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值