现在有很多网站通过在表单中添加值为随机生成的token的隐藏字段来防止CSRF攻击,Sqlmap会自动识别出这种保护方式并绕过。但自动识别有可能失效,此时就要用到这两个参数。
“–csrf-token”用于指定包含token的隐藏字段名,若这个字段名不是常见的防止CSRF攻击的字段名Sqlmap可能不能自动识别出,需要手动指定。如Django中该字段名为“csrfmiddlewaretoken”,明显与CSRF攻击有关。
“–csrf-url”用于从任意的URL中回收token值。若最初有漏洞的目标URL中没有包含token值而又要求在其他地址提取token值时该参数就很有用。
22.强制使用SSL
参数:–force-ssl
23.在每次请求前执行特定Python代码
参数:–eval
直接看例子:
python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
每次返送请求前,Sqlmap都会依据id值重新计算hash值并更新GET请求中的hash值。
六、优化
这些参数可以优化Sqlmap的性能。
1.一键优化
参数:-o
添加此参数相当于同时添加下列三个优化参数:
–keep-alive
–null-connection
–threads=3 (如果没有设置一个更好的值)
这些参数具体含义见后文。
2.HTTP长连接
参数:–keep-alive
该参数让Sqlmap使用HTTP长连接。该参数与“–proxy”矛盾。
3.HTTP空连接
参数:–null-connection
有一种特殊的HTTP请求类型可以直接获得HTTP响应的大小而不用获得HTTP响应体。显然这在布尔型盲注中可以节约很大的带宽。当然这一技术是需要服务器端支持的。该参数与“–text-only”矛盾。
4.HTTP并发
参数:–threads
使用该参数指定Sqlmap可以达到的最大并发数。从性能和网站承受能力两方面考虑最大并发数不要超过10。
七、注入
这些参数被用于指定要测试的参数、定制攻击荷载和选择篡改脚本。
1.要测试的注入点
参数:-p和–skip
默认情况下Sqlmap会测试所有GET参数和POST参数,当level大于等于2时会测试cookie参数,当level大于等于3时会测试User-Agent和Referer。实际上还可以手动指定一个以逗号分隔的、要测试的参数列表,该列表中的参数不受level限制。这就是“-p”的作用。
举个例子,若想只测试GET参数“id”和User-Agent,则可以这么写:
-p "id,user-agent"
如果不想测试某一参数则可以使用“–skip”。如设置了level为5但不想测试User-Agent和Referer,则可以这么写:
--level=5 --skip="user-agent,referer"
有时会遇到伪静态网页。动态网页会明目张胆地列出参数,如:
/user.php?id=1
显然参数是id,值为1。但若是伪静态网页则可能这样写:
/user/1/
将参数隐藏在URL中。通常情况下Sqlmap不会对这样的伪静态网页的参数做测试,因为Sqlmap无法判断哪个是参数。若想要对这样的伪静态进行测试,只需要加上“*”,告诉Sqlmap哪个是伪静态参数就行,剩下事的和GET参数没有什么区别。如:
python sqlmap.py -u "http(s)://target.cc/user/1*/"
2.指定数据库管理系统
参数:–dbms
dbms是“Database Management System”的缩写。默认情况下Sqlmap会自动检测网站使用的数据库管理系统,Sqlmap支持以下这些数据库管理系统:
MySQL
Oracle
PostgreSQL
Microsoft SQL Server
Microsoft Access
Firebird
SQLite
Sybase
SAP MaxDB
DB2
如果Sqlmap自动检测失败或是不想让Sqlmap进行数据库指纹检测,可以使用参数“–dbms”手动指定数据库管理系统,如:“–dbms postgresql”。
对于Mysql和Microsoft SQL Server和要这样指定:
--dbms MySQL <version>
--dbms Microsoft SQL Server <version>
对于MySQL来说,是类似这样的:5.0。对于Microsoft SQL Server来说,是类似这样的:2005。
如果在添加“–dbms”参数的同时还添加了“–fingerprint”,Sqlmap只会在指定的数据库管理系统内进行指纹识别。
只有在很确定时使用“–dbms”,否则还是让Sqlmap自动检测更好些。
3.指定运行数据库管理系统的操作系统
参数:–os
默认情况下Sqlmap会自动检测运行数据库管理系统的操作系统,目前完全支持的操作系统有:
Linux
Windows
如果很确定可以使用参数“–os”指定运行数据库管理系统的操作系统。当然在只用很确定时才应该使用此参数,否则还是让Sqlmap自动检测更好些。
4.生成无效参数值时强制使用大数
参数:–invalid-bignum