为了更好的学习sqlmap,尝试看官方文档并翻译官方文档。由于对网络方面的单词不熟悉而且英文水平有限,所以翻译并不准确。
1 | Usage: python sqlmap.py [options] |
Output verbosity
1 | -v |
通过这个参数来设置输出文本的可见度。共有7个可见度等级,默认等级为1,在这个等级下,information,warning,error,critical messages and python tracebacks会被显示出来。
1 | 0、只显示python错误以及严重的信息。 |
想理解sqlmap在后台做了些什么,等级2比较合适;
想看到payload构造,等级3是最好的选择,如果你需要向开发者反馈潜在漏洞,同样推荐等级3,配合-t
来保存日志文件;
想要进一步查找潜在的bug或意想不到的行为,推荐等级4或更高等级;
使用-v
可以代替-v 2
,-vv
代替-v 3
,-vvv
代替-v 4
,以此类推。
Target
直接连接数据库
1 | -d |
使用sqlmap连接一个数据库,需要下面2种格式的连接字符串。
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME
(MySQL, Oracle, Microsoft SQL Server, PostgreSQL, etc.)DBMS://DATABASE_FILEPATH
(SQLite, Microsoft Access, Firebird, etc.)
For example:
1 | $ python sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs --users |
指定目标URL
1 | -u |
使用sqlmap测试目标URL,需要下面格式的URL
http(s)://targeturl[:port]/[...]
For example:
1 | $ python sqlmap.py -u http://www.target.com/vuln.php?id=1" -f --banner --dbs --users |
从Burp或WebScarab的代理日志中获取目标
1 | -l |
从Burp proxy和Web Scarab proxy的代理日志文件中解析出可能的攻击目标,参数后跟日志文件路径
从站点地图文件中获取目标
1 | -x |
为便于搜索引擎收录,许多网站专门为搜索引擎生成了xml格式的站点地图。Sqlmap可以直接解析xml格式的站点地图,从中提取攻击目标,对一个网站全方位无死角地进行注入检测。
For example:
1 | $ python sqlmap.py -x http://www.target.com/sitemap.xml |
从文本文件中获取目标
1 | -m |
将多个目标URL写在一个文本文件中,sqlmap会按顺序扫描每个URL。
For example:
将待测URL写在urls.txt中,格式如下
1 | www.target1.com/vuln1.php?q=foobar |
运行sqlmap
1 | $ python sqlmap.py -m urls.txt |
从文本文件中加载HTTP请求
1 | -r |
从文本文件中加载原始HTTP请求,这种方式可以让你跳过输入一些参数,如设置cookie,post数据等。
可以使用BurpSuite抓包并保存HTTP请求文件
HTTP请求文件格式
1 | POST /vuln.php HTTP/1.1 |
sqlmap支持HTTPS,可以在命令后加上--force-ssl
强制使用SSL连接到443/tcp端口。也可以在Host
头后加上:443
来使用HTTPS。
将Google搜索结果作为目标
1 | -g |
sqlmap获取google搜索的前100个结果,对其中有GET参数的URL进行测试并询问是否测试每一个URL。
For example:
1 | $ python sqlmap.py -g "inurl:\".php?id=1\"" |
从配置文件中载入目标
1 | -c |
将攻击目标及各种参数写在配置文件中,sqlmap可以通过加载配置文件对目标进行测试。
在sqlmap的安装根目录下有sqlmap.conf
文件,这是配置文件的模板,可以根据需求写入参数。
Request
HTTP 请求方式
1 | --method |
sqlmap会自动检测正确的HTTP请求方式。然而,在一些情况下,需要使用不会自动识别的特殊HTTP请求方式,例如PUT
,这时就需要指定请求方式。
For example:
1 | --method=PUT |
HTTP POST数据
1 | --data |
默认情况下,sqlmap使用GET,但你可以通过提供POST数据将请求方式改为POST。这些数据会被当做SQL注入测试的参数。
For example:
1 | $ python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users |
指定参数分割符
1 | --param-del |
有些情况下,默认参数分割符(e.g. GET和POST中的&
)需要被指定为新的分割符来保证sqlmap可以正常差分并处理每个参数。
For example:
1 | $ python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=\ |
HTTPCookie
1 | --cookie |
使用这些参数的2中情况:
- 测试页面需要基于cookie的登录认证,并且你有这些数据
- 想要测试cookie注入(当
--level
设置为2或更高时,sqlmap会检测cookie注入)
两种情况均需要使用sqlmap发送cookie,可以使用下方步骤发送cookie
- 登录网页
- 从浏览器中获取cookie
- 将第二步获得cookie作为
--cookie
的值
注意,HTTP cookie
中的值通常由;
来分割,而不是&
。sqlmap可以从GET和POST参数中,分辨出cookie并将其作为独立参数。为了防止分割符不是;
可以通过–-cookie-del
来设置分割符。
在后续的连接中,若HTTP响应头仍有Set-Cookie
,sqlmap会自动使用之前设置的cookie,并测试这些值。可以通过--drop-set-cookie
参数使sqlmap忽略Set-Cookie
。
反之,如果你提供了一个HTTPCookie
头,并且使用了--cookie
,而且目标URL每次都发送HTTP Set-Cookie
,这时,sqlmap会询问你要为HTTP请求使用哪组cookie。
可以使用--load-cookies
载入文件中包含的Netscape/wget格式的cookie。
参考
[1] sqlmap_Usage
[2] Sqlmap中文手册