SQL宽字节注入

一、使用条件

1、数据库使用GBK编码

2、使用了addslashes()函数

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

预定义字符是:

  • 单引号(’)
  • 双引号(”)
  • 反斜杠(\)
  • NULL

二、注入过程

1、确认是否为宽字节注入

假如有回显,我们可以直接使用单引号探测,观察回显结果中单引号前是否有反斜杠。或者当我们有部分源码时,可以直接观察是否使用addslashes()函数。

2、使单引号逃逸

例如:

http://localhost:8899/sqli-lab/Less-33/index.php?id=-1%df' union select 1,database(),user()--+

我们知道,\'的URL编码为%5c%27,我们在前面再添加一个%df,由于GBK编码的特性会将两个字节当做一个字符,所以%df%5c会被当成一个汉字,即“運”。然后单引号%27就被独立出来了,可以正常使用。

3、表名的单引号转义

当我们要使用表名时,我们在表名外面加上单引号,例如'tzy',但是这个时候就不能再用宽字节了,不然构造出来的汉字就会破坏数据库名字。这个时候我们有两种解决方法:

(1)使用database()

直接使用database()代替数据库名,是等价的

(2)使用十六进制编码数据库名

编码为十六进制后可以直接使用

那么爆列名等时候要使用表名也是同样的操作了。

4、使用sqlmap实现宽字节注入

宽字节注入也可以直接使用sqlmap,我们只需要在单引号前加上%df,然后指定数据库名称即可,例如:

python sqlmap.py -u http://localhost:8899/sqli-lab/Less-33/index.php?id=1%df%27 -D "security" --tables
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇