Sql注入测试一定要使用工具。原因一:工作效率;原因二:人工很难构造出覆盖面广的盲注入的sql语句。例如当一个查询的where字句包含了多个参数,or and的关系比较多时,简单的 or 1=1, and 1=2是很难发现注入点的。
Sql注入的工具很多(Top 15 free SQL Injection Scanners),我最近使用的有Sqlmap,SqliX,JbroFuzz,Sql Power Injector, 网站啄木鸟.现将他们的使用方法和比较结果贴于此:
Sqlmap是python开发的SQL注入漏洞测试工具。没有UI界面的命令行工具。虽说是命令行工具,可他的使用比网站啄木鸟,Sql Power injector 容易多了,并且有很详细的帮助文档。从下面2个地址获得相关程序包:
Python下载,推荐下载2.7版本,兼容性好:http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
SqlMap下载:http://sqlmap.sourceforge.net/
SqlMap根目录下Sqlmap.py是主程序,sqlmap.conf是配置文件。Sqlmap的使用有2种方式:
1 在cmd中直接输入命令行。
2 在sqlmap.conf中配置命令行参数,然后在cmd中用sqlmap.py -c sqlmap.conf 发起攻击。
我比较喜欢第二种方式。这里仅列出sqlmap.conf种几个命令。更详细的命令描述参考doc目录下的readme.pdf,
# Target URL.
# Example: http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat=2
url =
指定攻击的url地址。
# Data string to be sent through POST.
data =
如果是POST命令的话,请在data字段填上POST的数据。
# HTTP Cookie header.
cookie =
如果网站需要登录的话,请在cookie字段填上cookie数据。cookie数据可以用wireshark抓包得到。
# Alert with audio beep when sql injection found.
beep = True
建议把beep设为True,当发现注入点时Sqlmap会嘀的一声,很提神的声音。
相关命令设置好以后,在命令行中输入sqlmap.py -c sqlmap.conf,就可以开始Sql注入测试啦。发现注入点(嘀的一声响)后,就可以通过设置其他命令来尝试获取更多的后台数据库信息。
Sqlmap功能非常多,获取数据用户名/密码/角色,数据库表,查询数据库表内容,上传/下载文件文件,修改注册表deng。当然有些功能是在当前数据库用户用一定权限的前提下才能完成。
SqliX 是由OWASP用Perl开发的SQL注入漏洞测试工具。跟Sqlmap一样是命令行驱动,也和sqlmap一样的好用。没有详细的帮助文档,项目主页上有简单的安装和使用介绍。
Perl下载地址:http://www.activestate.com/activeperl/downloads
SqliX下载地址:https://www.owasp.org/index.php/Category:OWASP_SQLiX_Project
SqliX依赖2个包:首先使用下面的命令安装依赖包: perl -MCPAN -e 'install WWW::CheckSite'
perl -MCPAN -e 'install Tie::CharArray'
如果CheckSite安装失败,出现如下错误信息:
make test had returned bad status, won't install without force
使用下面的命令强制安装: perl -MCPAN -e "CPAN::Shell->force(qw(install WWW::CheckSite));"
RESULTS:
The variable [id] from [http://extension.missouri.edu/extensioninfonet/article.asp?id=3602] is vulnerable to SQL Injection [Integer without quote - ].
“is vulnerable” 表明这个url是有注入漏洞的。
SqliX发现漏洞的能力确实不错,不比Sqlmap差。而漏洞利用的能力远不如Sqlmap,他只能执行一些函数和sql语句。事实上在不知道后台数据库表名的情况下很难执行sql语句。SqliX这样设计是可以理解的,他的目的只是为了进行Sql注入漏洞测试发现漏洞,才不希望被用来干坏事呢。
JbroFuzz,是OWASP开发Web应用程序模糊(Fuzz)测试工具. 有UI界面,但真的不好用,很多常用操作都没有快捷键的支持。他提供Sql注入相关的有效载荷(Payload,这个词真没有合适的中文翻译)。直接看看Sql注入的payload吧: ' or 1=1--
and 12=21
or '7659'='7659
union all select @@version--
union all select 1,2,3
1 and user_name() = 'dbo'
等等payload有很多。JBroFuzz用这些预定义的payload去替换http请求中的参数值(可以是请求的任意字段),保存http返回数据,并对返回数据做统计分析,形成统计图表,通过人工分析统计图表来判断是否有注入漏洞。很费劲,建议不要用JbroFuzz进行Sql注入漏洞测试。他的价值在于很多的payload,基本上每个payload对应一种注入方法,可以作为Sql注入学习和手工测试的参考。
除了Sql注入,JRoFuzz还可以进行其他多种Web应用程序相关的测试例如:XSS,LDAP注入,XML注入等。