sqlmap使用手册


关于sqlmap

sqlmap支持包括mysql、Oracle、SQL Server、MariaDB、DB2、Sql Lite、Access等诸多主流的DBMS,可用于五种不同类型的SQL注入,分别是:1.布尔型盲注(boolean-based blind)、2.时间型盲注(time-based blind)、3.报错型注入(error-based)、4.联合查询注入(UNION query)、5.堆叠查询注入。前面写过一篇sqli-labs1-38关手注的文章,提到过这几种注入类型。

用法

探测指定的url是否存在注入点

sqlmap -u "http://sqlilabs.com/Less-1/?id=1"

如图是sqli-labs第一关的测试结果,可以看到参数id存在注入漏洞,id为GET型,一共存在4种类型的注入,有boolean-based blind,error-based,time-based blind,UNION query,并且把payload也显示了出来。另外识别出我们的DBMS为MySQL且版本大于5.0,操作系统为Windows,web容器为Apache2.4.23 ,PHP版本为5.2.17。

在获得注入点后,可以进一步获取有关数据库的敏感信息

获取数据库相关的敏感信息

常用:
当前数据库:--current-db
查看所有数据库:--dbs
数据库当前用户:--current-user
查看数据库所有用户:--users
查看数据库所有角色:--roles
查看当前用户是否是管理员:--is-dba
指定数据库爆出所有表:-D --tables
指定数据库的表爆出所有的列:-D -T

--columns
指定数据库的表的列爆出该列所有数据:-D -T
-C --dump
获取全部数据:--all(通常不建议,会产生大量请求获取有用和无用的数据)
获取DBMS详细版本:--banner
获取服务器主机名:--hostname
列出和破解DBMS用户密码哈希:--passwords
列出DBMS所有用户权限:--privileges

其他开关和选项

指定输出详细程度:-v (0~6,3为最佳选择,可以知道payload)
直连数据库:-d
指定url:-u
从文件中载入http请求:-r(POST型通常抓包保存到txt中)
匿名注入:--tor

指定脚本进行绕过:--tamper=<脚本名>--tamper="脚本1,脚本2,..."
设置检测级别:--level(1~5等级越高,检测注入点的范围越大;大于2会测试http cookie头部,大于3会测试http UserAgent/Refer头部)
设置风险等级:--risk(1~3,默认1对大多数注入点测试没有风险,级别2会添加大量基于时间盲注测试语句,级别3会添加or类型的布尔型盲注测试)
指定sql注入技术:--technique (b、e、u、s、t、q分别代表:布尔盲注、报错注入、联合查询注入、堆叠注入、时间型盲注、内联查询注入)
设置时间盲注延迟相应秒数:--time-sec (默认为5)
指纹识别:--fingerprint-f(获取更精准的识别结果使用-b即--banner)

读取服务器文件系统的文件:--file-read <服务器文件路径>
想服务器上传文件:--file-write--file-dest<本地文件路径>(可以是文本文件或二进制文件,例如上传一个一句话木马或nc.exe)
接管操作系统:--os-cmd--os-shell(可以在服务器上运行命令)
尝试识别后端waf/ips(如果有):--identify-waf
使用http参数污染:--hpp(一种绕过waf/ips防护的方法)
跳过检测waf/ips:--skip-waf
伪装成移动设备:--mobile
启动交互式的sqlmap shell:--shell
使用短助记符:-z 后跟以双引号包围的以逗号分隔的每个选项和开关的短助记符的形式,从而可以避免写一长串的选项和开关

主要参考了sqlmap的用户手册中文版,用户手册真的好,写的很清晰很详细,学到了很多选项的用法,感谢作者、感谢译者!