宽字节注入 —%df
1.涉及函数
1 | addslashes() /函数返回在预定义字符之前添加反斜杠的字符串 |
2.原理
先了解一下什么是窄、宽字节已经常见宽字节编码:
- 当某字符的大小为一个字节时,称其字符为窄字节.
- 当某字符的大小为两个字节时,称其字符为宽字节.
- 所有英文默认占一个字节,汉字占两个字节
- 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等
3.逃逸过程:
and被php转义后就是%df
(1)举例命令
1 | ?id=1%df' and 1=1--+ |
%df’=>%df'(单引号会被加上转义字符\)
%df'=>%df%5c’(\的十六进制为%5c)
%df%5c’=>縗’(GBK编码时会认为这时一个宽字节)
‘成功逃逸,sql语法正确
3.例题
sql-labs-32关
(1)先找闭合点,输入?id=1’,页面显示1的后面多了 \ z在输入id=1” id=’1’ ,发现单引号后面都有 \ 猜测 \ 把单引号转义了,考虑用宽字节注入%df
(2)输入id=1%df’后报错,单引号是闭合点。具体代码如下
1 | http://192.168.2.2/sqli/Less-32/?id=1%df' and (updatexml(1,concat(0x7e,(select database()),0x7e),1))-- - |
结果:
4.锟斤拷:锟斤拷通常指的是在网络或计算机系统中出现的一串特殊乱码字符,这种现象多出现在字符编码转换过程中。具体来说,锟斤拷出现的原因是因为在将某些字符从GBK编码转换为Unicode编码时,存在一些字符是Unicode无法表示的。为了在Unicode中有一个地方表示这些字符,Unicode官方定义了一个特殊的占位符,即U+FFFD REPLACEMENT CHARACTER。
在UTF-8编码中,这个占位符被编码为EFBFBD。当这些编码被错误地识别为GBK编码时,由于GBK是一个双字节编码,它会把EFBFBD这样的字节序列错误地解释为一个汉字,于是产生了像“锟斤拷”这样的乱码。其中,“锟”对应于EFBF,“斤”对应于BDEF,“拷”对应于BFBD。
堆叠注入
1.堆叠注入的含义
从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
注意不是每个数据库环境都可以支持堆叠注入。
2.MySQL多语句执行
1 | select *from user;select * from emails |
3.例题
sql-labs-38关
源代码中有mysqli_multi_query 可以用堆叠注入
?id=-1’;insert into users(id,username,password) values (‘17’,’Jay’,666’)– +
输入id=17的结果:
绕过
参数污染
1.同一个参数发出两个值,不同的浏览器会接收不同的参数,参数可能是第一个或者第三个,不可能是中间的
1 | ?p=usa&p=china |
2.例如,在CSDN找一个下载sql server的外链接:https://link.csdn.net/?target=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2Fsql-server%2Fsql-server-downloads
将其复制到Yakit软件用URL解码,解码为https://link.csdn.net/?target=https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads
- 在https://link.csdn.net/?target=https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 后加一个参数target=,即https://link.csdn.net/?target=https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads?target=https://tb.alicdn.com/snapshot/index.html ,为了方便理解,我们把两个target的内容换一下位置,即:https://tb.alicdn.com/snapshot/index.html?target=https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads因为CSDN是用java写的,当点击这个网址时,根据 jsp/tomcat 1 会跳到第一个参数。如下图,从CSDN跳到了淘宝。
常见绕过
详细SQL注入绕过技术见链接:https://cloud.tencent.com/developer/article/1849607
Sqlmap的Tamper脚本
Tamper脚本的介绍:
它允许用户在执行SQL注入攻击时对 payload(攻击载荷)进行修改,以绕过目标服务器的防护机制,如WAF(Web Application Firewall)或IDS(Intrusion Detection System)。这些防护系统通常会检测和过滤掉某些特定的关键字或模式,以防止恶意攻击。Tamper脚本对payload进行转换或编码,使其能够逃避这些检测。
Sqlmap常用命令(面试考)
Sqlmap跑sqli-labs 26a关
在vscode中新建1.py 并在它中编写26a关的Tamper脚本,将其复制到kali机的/usr/share/sqlmap/tamper/ 的目录下。在kali的命令窗口运行以下命令;
1 | sqlmap -u "http://192.168.2.2/sqli/Less-26a/?id=1" -p id --dbms=MySQL --tamper="1.py" --dbs --batch |
成功爆出数据库