SQLMAP(1.3.1.29)是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,最新版sqlmap支持的数据库有MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, HSQLDB and H2。采用五种独特的SQL注入技术,分别是基于布尔类型的盲注,基于报错注入,UNION查询SQL注入,堆查询和基于时间的SQL盲注入。其功能和选项包括数据库指纹识别,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意指令。
随着SQL注入等安全事件频繁发生,Web应用防护系统(网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)应运而生。WAF是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
SQL注入时,当我们遇到WAF,很多时候还是得首先静下来分析过滤系统到底过滤了哪些参数,该如何绕过。SQLMAP中的tamper自带了很多防过滤的绕过脚本,SQLMAP可以通过脚本拓展的方式调用Tamper模块对注入的参数修改用来达到绕过WEF的效果。
当然使用脚本之前需要确定的就是系统过滤了哪些关键字,比如空格、单引号、union、admin等等。
可以在URL中手工带入关键字,判断是否会被过滤掉。
如下图则关键字被过滤,需要想法绕过。
Sqlmap.py xxxxx --tamper“模块名”可调用–tamper中的模块进行绕过。
下面举例其中一条脚本:
“”"
Replaces apostrophe character (’) with its UTF-8 full width counterpart (e.g. ’ -> %EF%BC%87)
References:
* http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128
* http://lukasz.pilorz.net/testy/unicode_conversion/
* http://sla.ckers.org/forum/read.php?13,11562,11850
* http://lukasz.pilorz.net/testy/full_width_utf/index.phps
>>> tamper("1 AND '1'='1")
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'
"""
"1 AND ‘1’='1"替换为utf8字符,用于过滤单引号。
最新版SQLMAP共计57个绕过脚本。其中大部分脚本主要用正则模块替换攻击载荷字符编码的方式绕WEF的检测规则。
下面给出全部脚本并进行分类:
序号 脚本名称 注释
1 0x2char 将每个编码后的字符转换为等价表达
2 a