网络安全-sqlmap学习笔记

目录

介绍

命令参数

指定目标

直连数据库

服务型数据库(前提知道数据库用户名和密码)

文件型数据库(前提知道数据库绝对路径)

URL探测

文件读取目标

Google dork注入

Http参数

设置请求方法

POST提交参数

设置参数分隔符

设置Cookie

设置User-Agent

Host

Referer

额外的HTTP头部

协议认证

设置代理

Tor匿名网络

设置延迟

 设置超时

设置重试次数

设置随机化参数

设置日志过滤目标

设置忽略

设置HTTP私钥

设置安全模式

设置忽略URL编码

绕过反CSRF保护

强制使用SSL / HTTPS

性能优化

设置持久HTTP连接

设置不接收HTTP的body

设置多线程

设置预测输出

注入

指定注入参数

设置URL注入位置

设置任意注入位置

指定DBMS

指定DBMS运行所在OS

关闭负载转换机制

关闭字符转换机制

强制使用大数字来使值无效

强制使用逻辑运算来使值无效

强制使用随机字符串来使值无效

自定义注入负载设置

设置Tamper脚本

设置DBMS认证

探测

设置探测等级

设置风险参数

设置页面比较参数

注入技术

进行探测时的注入技术

设置时间盲注的延迟时间

设置联合查询列数

设置联合查询字符

设置联合查询表

DNS渗透攻击

设置二阶注入

指纹

枚举

枚举全部

枚举DBMS的Banner信息

枚举DBMS当前用户

枚举DBMS当前数据库

枚举服务器主机名

检测当前用户是否是数据库管理员

枚举数据库管理系统用户

枚举并破解数据库管理系统用户的密码哈希值

枚举数据库管理系统用户权限

枚举数据库管理系统用户角色

枚举数据库管理系统的数据库

枚举数据库表

枚举数据库表列

枚举数据值

枚举schema信息

检索数据表的条目数量

获取数据信息

设置条件获取信息

运行自定义sql语句

暴力破解

暴力破解表名

暴力破解列名

文件系统访问

读取文件

上传文件

操作系统信息

Out-of-Band状态连接:Meterpreter和friends

Windows注册表访问

读取Windows注册表项值

   编写Windows注册表项值

   删除Windows注册表项

   辅助注册表选项

通用参数

从存储的(.sqlite)文件加载会话

将HTTP流量记录到文本文件

以非交互模式运行

设置问题答案

自定义(盲)SQL注入字符集

爬取网站

 CSV输出中使用的定界字符

转储数据的格式

强制设置DBMS字符编码

检测网络连接

解析和测试表单的输入字段

设置预计完成时间

刷新会话文件

忽略存储在会话文件中的查询结果

使用DBMS十六进制函数进行数据检索

自定义输出目录路径

从响应页面解析DBMS错误消息

将选项保存在配置INI文件中

更新sqlmap

存储HTTP流量至HAR文件

筛选Payload

过滤Payload

杂项

使用短助记符

对成功的SQL注入检测发出警报

找到SQL注入时发出提示音

从sqlmap特定的UDF和表中清除DBMS

检查依赖项

禁用控制台输出高亮

测试WAF等保护

模仿智能手机

在离线模式下工作(仅使用会话数据)

从数据目录中安全删除所有内容

跳过启发式检测WAF/IPS保护

交互式sqlmap shell

寻找脆弱目标

指定站点根目录

面向初学者的简单向导界面


介绍

检测和利用SQL注入的工具。

官网:sqlmap官网

用户手册:sqlmapWiki

本文参考用户手册,有删减,算是低创,但并非完全翻译,有包含自己的抓包及部分使用sqlmap注入的内容,sqlmap实战在文末链接。

命令参数

红色为基本,黄色为提高,其余做了解,后序选项举例并不全,省略了部分用到概率很低的选项。

参数解释
选项 含义 描述
-h,--help 帮助 显示基本帮助消息并退出
-hh 高级帮助 显示高级帮助消息并退出
--version 版本 显示程序的版本号并退出
-v VERBOSE VERBOSE详细级别:0-6(默认1)
目标    
-u,-url=URL URL 目标URL(例如“ http://www.site.com/vuln.php?id=1”)
-d DIRECT 连接字符串,用于数据库直接连接
-l LOGFILE 从Burp或WebScarab代理日志文件中解析目标
-m BULKFILE 扫描文本文件中给定的多个目标
 -r       REQUESTFILE 从文件加载HTTP请求
 -g GOOGLEDORK 将Google dork结果处理为目标URL
-c CONFIGFILE 从配置INI文件中加载选项
请求    
-A AGENT HTTP User-Agent标头值
-H HEADER 额外的头部(例如“ X-Forwarded-For:127.0.0.1”)
--method=METHOD METHOD 强制使用给定的HTTP方法(例如,PUT)
--data=DATA DATA 要通过POST发送的数据字符串(例如“ id = 1”)
--param-del=PARAM PARAM 用于分割参数值的字符(例如,&,;)
--cookie=COOKIE COOKIE HTTP Cookie标头值(例如“ PHPSESSID = a8d127e ..”)
--cookie-del=COO... 分割符 用于分割Cookie值的字符(例如;)
 --load-cookies=L.. cookie文件 包含Netscape / wget格式的cookie的文件
--drop-set-cookie 忽略Set-Cookie标头 从响应中忽略Set-Cookie标头
--mobile 模仿手机 通过HTTP User-Agent标头模仿智能手机
--random-agent User-Agent 使用随机选择的HTTP User-Agent标头值
--host = HOST host值 HTTP主机header值
--referer = REFERER REFERER值 HTTP引用header值
-H HEADER, --header 额外的头部 额外的头部(例如“ X-Forwarded-For:127.0.0.1”)
--headers=HEADERS \n分隔的多个头部 额外的头部(例如“ Accept-Language:fr \ nETag:123”)
--auth-type=AUTH --auth-type=AUTH HTTP身份验证类型(Basic, Digest, NTLM 或者 PKI)
--auth-cred=AUTH --auth-cred=AUTH HTTP身份验证凭据(用户名:密码)
--auth-file=AUTH --auth-file=AUTH HTTP认证PEM证书/私钥文件
--ignore-code=IG ignore-code 忽略(有问题的)HTTP错误代码(例如401)
--ignore-proxy ignore-proxy 忽略系统默认代理设置
--ignore-redirects ignore-redirects 忽略重定向尝试
 --ignore-timeouts ignore-timeouts 忽略连接超时
--proxy=PROXY PROXY 使用代理连接到目标URL
--proxy-cred = PRO proxy-cred 代理身份验证凭据(用户名:密码)
--proxy-file = PRO proxy-file 从文件加载代理列表
--tor Tor 使用Tor匿名网络
--tor-port tor-port TORPORT设置默认值以外的Tor代理端口
--tor-type tor-type TORTYPE设置Tor代理类型(HTTP,SOCKS4或SOCKS5(默认))
--check-tor Check Tor 检查Tor是否正确使用
--delay=DELAY DELAY 每个HTTP请求之间的延迟秒数
--timeout=TIMEOUT TIMEOUT 超时连接之前等待的秒数(默认为30)
--randomize=RPARAM RPARAM 随机更改给定参数的值
--timeout=TIMEOUT TIMEOUT 超时连接之前等待的秒数(默认为30)
--retries=RETRIES RETRIES 连接超时时重试(默认3)
--randomize = RPARAM RANDOM 随机更改给定参数的值
--safe-url = SAFEURL SAFEURL 测试期间要经常访问的URL地址
--safe-req=SAFER.. POST SAFEURL POST数据发送到安全URL
--safe-freq = SAFE SAFE 测试两次访问给定安全URL之间的请求
--skip-urlencode skip-urlencode 跳过有效载荷数据的URL编码
--csrf-token = CSR csrf-token 用于保存反CSRF令牌的参数
--csrf-url = CSRFURL csrf-url 用来提取反CSRF令牌的URL地址
--force-ssl force-ssl 强制使用SSL / HTTPS
--hpp hpp 使用HTTP参数污染方法
--eval = EVALCODE EVALCODE 在请求之前评估提供的Python代码(例如 "import hashlib;id2=hashlib.md5(id).hexdigest()")
优化    
-o Optimization 开启所有性能优化参数
--predict-output predict-output 预测常见查询输出
 --keep-alive  keep-alive 使用持久HTTP连接
--null-connection null-connection 检索没有实际HTTP响应主体的页面长度
--threads = THREADS THREADS 最大并发HTTP请求数(默认为1)
注入    
-p TESTPARAMETER 可测试的参数
--skip=SKIP SKIP 跳过给定参数的测试
--skip-static skip-static 跳过似乎不是动态的测试参数
--param-exclude param-exclude 正则表达式可从测试中排除参数(例如“ ses”)
--dbms=DBMS DBMS 强制将后端DBMS设置为提供的值
--dbms-cred=DBMS.. dbms-cred DBMS身份验证凭据(用户:密码)
--os = OS OS 强制后端DBMS操作系统提供值
 --invalid-bignum invalid-bignum 使用大数字来使值无效
 --invalid-logical invalid-logical 使用逻辑运算来使值无效
--invalid-string invalid-string 使用随机字符串使值无效
 --no-cast no-cast 关闭有效载荷投射机制
--no-escape  no-escape  关闭字符串转义机制
--prefix=PREFIX PREFIX 注入有效负载前缀字符串
 --suffix=SUFFIX SUFFIX 注入有效载荷后缀字符串
--tamper=TAMPER TAMPER 使用给定的脚本篡改注入数据
探测    
--level=LEVEL LEVEL 要执行的测试级别(1-5,默认为1)
--risk=RISK RISK 执行测试的风险(1-3,默认值为1)
 --string=STRING STRING 当查询评估为True时匹配的字符串
 --not-string=NOT.. NOT STRING 查询评估为False时匹配的字符串
--regexp=REGEXP REGEXP 正则表达式,当查询评估为True时匹配
--code=CODE CODE 查询评估为True时要匹配的HTTP代码
  --text-only   text-only   仅基于文本内容比较页面
  --titles  titles  仅根据页面标题比较页面
技术    
--technique=TECH TECHNIQUE 要使用的SQL注入技术(默认为“BEUSTQ”)
 --time-sec=TIMESEC TIMESEC 延迟DBMS响应的秒数(默认值为5)
 --union-cols=UCOLS UCOLS 要测试UNION查询SQL注入的列范围
--union-char=UCHAR UCHAR 用于暴力破解列数的字符
 --union-from=UFROM UFROM 在UNION查询SQL注入的FROM部分中使用的表
--dns-domain=DNS.. DNS 用于DNS渗透攻击的域名
--second-url=SEC.. SECOND URL 搜索到的页面URL为二阶响应
 --second-req=SEC.. SECOND REQ 从文件加载二阶HTTP请求
指纹    
   -f, --fingerprint  fingerprint 执行广泛的DBMS版本指纹
枚举    
-a, --all     ALL 检索所有内容
-b, --banner        BANNER 检索DBMS标语
--current-user current-user 检索DBMS当前数据库
--current-db current-db 检索DBMS当前数据库
--hostname hostname 检索DBMS服务器主机名
--is-dba is-dba 检测DBMS当前用户是否为DBA
--users  users  枚举DBMS用户
--passwords passwords 枚举DBMS用户密码哈希值
--privileges privileges 枚举DBMS用户权限
--roles   roles   枚举DBMS用户角色
--dbs database 枚举DBMS数据库
--tables tables 枚举DBMS数据库表
--columns columns 枚举DBMS数据库表列
 --schema schema 枚举DBMS模式
--count count 检索表的条目数
--dump dump 转储DBMS数据库表条目
 --dump-all  dumpall 转储所有DBMS数据库表条目
-D DB DATABASE DBMS数据库枚举
 -T TBL TABLE 要枚举的DBMS数据库表
 -C COL COLUMN 要枚举的DBMS数据库表列
-U USER DBMS用户枚举
--exclude-sysdbs exclude-sysdbs 枚举表时排除DBMS系统数据库
 --pivot-column=P..  pivot-column=P.. 枢轴列名称
--where=DUMPWHERE DUMPWHERE 在表转储时使用WHERE条件
--start=LIMITSTART LIMITSTART 要检索的第一个转储表项
 --stop=LIMITSTOP  LIMITSTOP 要检索的最后一个转储表项
--first=FIRSTCHAR FIRSTCHAR 第一个查询输出要检索的字符
--last=LASTCHAR LASTCHAR 最后一个查询输出要检索的字符
--sql-query=QUERY QUERY 要执行的SQL语句
--sql-shell sql-shell 提示输入交互式SQL Shell
--sql-file=SQLFILE SQLFILE 从给定文件执行SQL语句
暴力    
--common-tables   检查公用表是否存在
 --common-columns   检查是否存在公共列
用户定义的函数注入    
 --udf-inject   注入用户自定义函数
--shared-lib=SHLIB   共享库的本地路径
文件系统访问    
  --file-read=FILE..   从后端DBMS文件系统读取文件
   --file-write=FIL..   在后端DBMS文件系统上写入本地文件
 --file-dest=FILE..   要写入的后端DBMS绝对文件路径
操作系统访问    
 --os-cmd=OSCMD   执行操作系统命令
--os-shell   提示输入交互式操作系统
 --os-pwn   提示输入OOB shell,Meterpreter或VNC
--os-smbrelay   一键提示输入OOB shell,Meterpreter或VNC
--os-bof   存储过程缓冲区溢出利用
 --priv-esc   数据库进程用户权限升级
--msf-path=MSFPATH   安装Metasploit Framework的本地路径
--tmp-path=TMPPATH   临时文件目录的远程绝对路径
Windows注册表访问    
--reg-read   读取Windows注册表项值
--reg-add   写入Windows注册表项值数据
--reg-del   删除Windows注册表项值
--reg-key=REGKEY   Windows注册表项
--reg-value=REGVAL   Windows注册表项值
--reg-data=REGDATA   Windows注册表项值数据
 --reg-type=REGTYPE   Windows注册表项值类型

通用

   
-s   从存储的(.sqlite)文件加载会话
-t   将所有HTTP通信记录到文本文件中
--answers   设置预定义的答案(例如“ quit = N,follow = N”)
--base64   包含Base64编码数据的参数
--batch batch 从不要求用户输入,使用默认行为
 --binary-fields   结果字段具有二进制值(例如“摘要”)
--check-internet   在评估目标之前检查Internet连接
--crawl=CRAWLDEPTH   从目标URL开始爬行网站
--crawl-exclude   正则表达式可将网页从抓取中排除(例如“注销”)
--csv-del=CSVDEL   输出中使用的定界字符(默认为“,”)
 --charset=CHARSET   盲SQL注入字符集(例如“ 0123456789abcdef”)
--dump-format   转储数据的格式(CSV(默认),HTML或SQLITE)
--encoding   用于数据检索的字符编码(例如,GBK)
  --eta         为每个输出显示估计的完成时间
--flush-session SESSION 刷新当前目标的会话文件
 --forms   在目标URL上解析和测试表单
 --fresh-queries   忽略存储在会话文件中的查询结果
 --har=HARFILE   将所有HTTP通信记录到HAR文件中
--hex   在数据检索期间使用十六进制转换
--output-dir=OUT..    自定义输出目录路径
--parse-errors   解析并显示响应中的DBMS错误消息
 --preprocess=PRE.   使用给定脚本进行响应数据的预处理
  --repair    具有未知字符标记(?)的Redump条目
 --save=SAVECONFIG    将选项保存到配置INI文件中
--scope=SCOPE   从提供的代理日志中过滤目标
--test-filter   通过有效载荷和/或标题(例如ROW)选择测试
--test-skip   按有效载荷和/或标题跳过测试(例如,BENCHMARK)
--update   更新sqlmap
--sqlmap-shell   提示输入交互式sqlmap shell
杂项    
-z MNEMONICS 使用短助记符(例如“ flu,bat,ban,tec = EU”)
--alert=ALERT   找到SQL注入后运行主机OS命令
--beep   出现问题/发现SQL注入时发出嘟嘟的声音
--cleanup   从sqlmap特定的UDF和表中清理DBMS
--dependencies   检查缺少的(可选)sqlmap依赖项
 --disable-coloring   禁用控制台输出颜色
--gpage=GOOGLEPAGE   使用指定页码的Google dork结果
--identify-waf   对WAF / IPS防护进行彻底的测试
--list-tampers   显示可用的篡改脚本列表
 --mobile   通过HTTP User-Agent标头模仿智能手机
 --offline   以脱机模式工作(仅使用会话数据)
--purge   安全删除sqlmap数据目录中的所有内容
--skip-waf   跳过启发式检测WAF / IPS保护
--smart   仅在启发式为正的情况下进行全面测试
 --sqlmap-shell    提示输入交互式sqlmap shell
 --tmp-dir=TMPDIR   用于存储临时文件的本地目录
  --web-root=WEBROOT   Web服务器文档的根目录(例如“ / var / www”)
--wizard wizard 面向初学者的简单向导界面

指定目标

直连数据库

选项:-d

服务型数据库(前提知道数据库用户名和密码)

格式:
DBMS://USER:PASSWORDODBMS_IP:DBMS_PORT/DATABASE NAME(MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc.)
例如:

python sqlmap.py -d "mysql://root:84418733w@localhost:3306/test2" -f --banner
直连结果

可能出现的问题:

缺少包

提示是缺少包的问题,通过提示,使用以下命令可安装所需包(根据自身python版本及平台修改命令)

  git clone https://github.com/petehunt/PyMySQL/
  cd PyMySQL/
  python ./setup.py install
  pip3 install sqlalchemy
安装PyMySQL成功
安装sqlalchemy成功

文件型数据库(前提知道数据库绝对路径)

格式:

DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird等等)

URL探测

选项:-u或者--url

http协议及https协议都可以,指定端口时使用ip:port在url中添加即可。

  python sqlmap.py -u "http://192.168.31.174:8080/login.php?id=0"

文件读取目标

  1. -l     从Burpsuite proxy或WebScarab proxy中读取Http请求日志文件。
  2. -x    从sitemap.xml站点地图文件中读取目标探测。
  3. -m   从多行文本格式文件读取多个目标,对多个目标进行探测。
  4. -r     从文本文件中读取Http请求作为Sql注入探测的目标。
  5. -c    从配置文件sqlmap.conf中读取目标探测。

-l 博主仅安装了Burpsuite,展示下Burpsuite如何操作。

Burpsuite日志文件设置
部分日志

示例

python sqlmap.py -l E:\Workspace\Burp_suite_workspace\test.log
根据日志批量检测

按y进行探测并继续。

-x 这个很多站点都没有了,有的也基本没有GET、POST,就不做展示了。

-m 多个目标就是指多个url,你可以把自己想要探测的多个url写到txt文本中

python sqlmap.py -m urls.txt

-r 把抓到的http包复制到txt文件中,进行探测

示例

httpbin抓包
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\httpbinGet.txt
get

这里提示没有参数,你可以尝试其他的,或者靶场中的。

网络安全-sqlmap实战之sqlilabs-Less12中有使用。

-c 配置文件探测

sqlmap.conf

从配置文件中我们可以看到一些参数,填写参数即可。

Google dork注入

选项:-g

就是一些google高级搜索作为url, 常见的高级搜索有infile,inurl,intitle,filetype等。

  python sqlmap.py -g "inurl:\".php?id=1\""
翻墙到goole

不怎么样,翻了墙也半天没反应,了解下好了。

Http参数

有关Http协议的内容,可以参考网络-http协议学习笔记(消息结构、请求方法、状态码等)

设置请求方法

sqlmap一般会调用合适的请求方法,但是,PUT等请求方法sqlmap不会自动调用,需要手动配置。

选项:--method=PUT

POST提交参数

sqlmap默认的是使用GET方法,可以使用--data参数来进行数据提交,key=value形式,使用&连接。

选项:--data=DATA

python sqlmap.py -u "http://www.target.com" --data="key1:value&key2:value"

建议学习--forms参数

设置参数分隔符

默认的分割符为&,可以进行设置,个人认为就用默认的就好了

选项:--param-del=PARAM

python sqlmap.py -u "http://www.target.com" --data="key1:value;key2:value" --parameter-del=";"

设置Cookie

以下两种情况可能会使用:

  • 测试页面需要登录,登录状态用cookie识别
  • 想要检测是否存在Cookie注入

--cookie=COOKIE。同时,--leverl=2或者2以上

设置User-Agent

选项:–user-agent,-A,–random-agent

Sqlmap发送的HTTP请求中的User-Agent默认值为:

  sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx"
sqlmap

很明显,sqlmap默认的User-Agent中含有sqlmap,而一般的网页浏览是浏览器,比如下图使用火狐浏览器进行访问,因此,探测目标可能根据User-Agent对sqlmap进行拦截等处理,有必要进行User-Agent的伪造。

火狐

 使用-A参数进行修改,如下所示。

-A

再次抓包后发现User-Agent已修改。

当然,没必要每次用浏览器抓包,你可以保存下来,或者使用–random-agent参数,用sqlmap中自带的一些。

user-agents

当“–level”参数设置为3或更高时,Sqlmap会检测User-Agent是否存在注入漏洞。

Host

选项:–host

使用该参数可以手动指定HTTP头中的Host值。

当“–level”参数设置为5或更高时,Sqlmap会检测Host是否存在注入漏洞。

Referer

选项:–referer

使用该参数可以指定HTTP头中的Referer值。

当“–level”设置为3或更高时,Sqlmap会检测Referer是否存在注入漏洞

额外的HTTP头部

选项:-H,--header,--headers

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "blog:lady_killer9" --banner
添加blog头部

当然,对于已有的头部字段,也可以修改。

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "User-Agent:lady_killer9" --banner
修改User-Agent头部

协议认证

选项:–auth-type和–auth-cred

“–auth-type”用于指定认证方式,支持四种身份认证方式:Basic、Digest、NTLM、PKI

一般就是Basic,输入登录的用户名和密码,类似于Postman中的Basic Auth。

设置代理

选项:–proxy、–proxy-cred、–proxy-file和–ignore-proxy

使用参数“–proxy”来设置一个HTTP(S)代理,格式是“http(s)://ip:port”。

如果代理需要认证,使用参数“–proxy-cred”来提供认证凭证,格式是“username:password”。

使用参数“–proxy-file”来指定一个存储着多条代理的文件。

使用参数“–ignore-proxy”忽略本地代理设置。

一些代理
代理使用失败

 事实证明,不花钱就想得到免费ip代理,,,是在想peach。。。

Tor匿名网络

选项:–tor、–tor-type、–tor-port和–check-tor

我的Tor还没有设置好,可能因为国内的原因吧,网桥配置了,但一直连接不上。所谓的深网也好,暗网也罢,其实也有蛛丝马迹的,遵守法律,做一位合格的好公民!

设置延迟

前端时间看见一位b站up主,吐槽自己的亲戚好友,让他使用刷*等软件刷视频赚钱,然后他写了一个脚本,跳过广告,自动滚屏,然后一天弄了几十块,还没提现,就被后台封号了。

为什么提到这个呢,因为一些后台会看你的访问频率,检测DDOS攻击或其他危险行为,所以这里我们设置延迟,让两个数据包之间有延迟,模拟人工浏览器访问。

–-delay

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" --delay=0.5 --banner

 设置超时

选项:-–timeout

超时时间默认是30秒,可以用参数“–timeout”指定超时时间。

设置重试次数

选项:-–retries

超时后Sqlmap会进行重试,重试次数默认为3,可以用参数“–retries”指定最大重试次数。

设置随机化参数

选项:-–randomize

使用该参数,Sqlmap会随机生成每次HTTP请求中参数的值,可以进行简单的fuzz,类似于Peach,内部原理是变异还是什么目前还不清楚。

前面是xxx,后面是123

前面是a=xxx,sqlmap有随机的赋值a其他的值,a=123时,也会随机更改为4184等值。

设置日志过滤目标

选项:-–scope,配合-l参数

指定一个Python正则表达式对代理日志进行过滤,只测试符合正则表达式的目标,如:

python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

设置忽略

选项:--ignore-code

如果测试的站点偶尔返回导致常规sqlmap运行出现问题的HTTP错误代码(例如,401(未授权)),想忽略该站点并继续进行测试,可以使用 --ignore-code

设置HTTP私钥

选项:--auth-file

文件格式为包含证书和私钥的PEM格式

设置安全模式

选项:--safe-url--safe-post--safe-req--safe-freq

避免过多的请求失败后会话被破坏,对表明safe的不进行任何类型的注入

  • --safe-url:测试期间经常访问的URL地址。
  • --safe-post:HTTP POST数据发送到给定的安全URL地址。
  • --safe-req:从文件加载并使用安全的HTTP请求。
  • --safe-freq:测试两次访问给定安全位置之间的请求。

设置忽略URL编码

选项:–skip-urlencode

使用该参数可以关闭URL编码,服务器端不支持RFC标准时使用。

绕过反CSRF保护

选项:--csrf-token--csrf-url

许多站点都以令牌,每个页面响应期间随机设置的隐藏字段值的形式结合了反CSRF保护。SqlMap的会自动尝试识别并绕过这种保护,但也有选项--csrf-token,并--csrf-url可以用来进一步微调它。选项--csrf-token可用于设置包含随机标记的隐藏值的名称。在网站为此类字段使用非标准名称的情况下,这很有用。选项--csrf-url可用于从任意URL地址检索令牌值。如果易受攻击的目标URL最初不包含必要的令牌值,但需要从其他位置提取该令牌值,则此功能很有用。

强制使用SSL / HTTPS

选项: --force-ssl

如果用户想要向目标强制使用SSL / HTTPS请求,则可以使用此选项。在使用选项--crawl收集URL或为-l选项提供Burp日志的情况下,这个选项很有用。

性能优化

选项:-o

该参数将开启所有性能优化

  • --keep-alive
  • --null-connection
  • --threads=3 如果未设置为更高的值。

设置持久HTTP连接

选项:-–keep-alive

该参数让Sqlmap使用HTTP长连接,头部的Connection字段会变为keep-alive。该选项与“–proxy”不兼容。

设置不接收HTTP的body

选项:-–null-connection

有特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文。这种知识可以在盲目注射技术被用来区分TrueFalse响应。提供此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:RangeHEAD。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度

设置多线程

选项:-–threads

使用该选项指定Sqlmap可以达到的最大并发数。默认为3个,可修改,最大为10。

设置预测输出

选项: --predict-output

此选项在推理算法中用于对要检索的值的字符进行顺序统计预测。此开关与--threads选项不兼容。

注入

指定注入参数

选项:-p

sqlmap默认指定所有参数进行注入,当有多个参数时,通过-p参数可以指定对某个参数,包括http报头,例如user-agent进行注入。

选项:--skip

既然可以指定也可以排除,使用--skip选项就可以对某些参数不进行注入。

选项:--param-exclude

忽略包含具体内容的参数。要跳过对包含字符串tokensession的参数的测试,可以使用--param-exclude="token|session"

设置URL注入位置

在特殊情况下,注入点位于URL本身内,除非手动指出,否则sqlmap不会对URL路径执行任何自动测试。必须在命令行中通过在在参数值后附加一个星号(*)(注意:%INJECT HERE%还支持Havij样式)来指定这些注入点。

例如,当使用Apache Web服务器的mod_rewrite模块或其他类似技术时,此功能特别有用。

示例:

python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"

设置任意注入位置

与URL注入点类似,星号(*)也可以用于指向GET,POST或HTTP标头中的任意注入点。注入点可以通过提供选项-u的GET参数值(一个或多个),提供选项--data的POST参数值(一个或多个),HTTP标头中提供的选项值(S) ,-H--headers ,--user-agent,--referer,--cookie,在通用处内部HTTP请求从文件中加载带有选项-r,来指定。

示例:

python sqlmap.py -u "http://targeturl" --cookie="param1=value1*;param2=value2"

指定DBMS

选项:-dbms

sqlmap支持以下数据库(有些我还没听说过╮( ̄▽  ̄)╭):

MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、Informix、MariaDB、Percona、MemSQL、TiDB、CockroachDB、HSQLDB、H2、MonetDB、Apache Derby、Amazon Redshift、Vertica、Mckoi、Presto、Altibase、MimerSQL、CrateDB、Greenplum、Drizzle、Apache Ignite、Cubrid、InterSystems Cache、IRIS、eXtremeDB、FrontBase

示例:

--dbms mysql 5.0

版本号可以省略,DBMS版本号不一样,并不都是5.0这种,SQL Server数据库版本号是年号,例如08(代表SQL Server2008)

指定DBMS运行所在OS

选项: --os

指定操作系统,支持Windows和Linux

关闭负载转换机制

选项:--no-cast

NULL值转换为空格

关闭字符转换机制

选项:--no-escape

强制使用大数字来使值无效

选项: --invalid-bignum

在sqlmap需要使原始参数值(例如id=13)无效的情况下,它将使用经典取反(例如id=-13)。使用此选项,可以强制使用大整数值来实现相同的目标(例如id=99999999)。

强制使用逻辑运算来使值无效

开关: --invalid-logical

在sqlmap需要使原始参数值(例如id=13)无效的情况下,它将使用经典取反(例如id=-13)。通过此选项,可以强制使用布尔运算来实现相同的目标(例如id=13 AND 18=19)。

强制使用随机字符串来使值无效

选项: --invalid-string

在sqlmap需要使原始参数值(例如id=13)无效的情况下,它将使用经典取反(例如id=-13)。通过此选项,可以强制使用随机字符串来实现相同的目标(例如id=akewmc)。

自定义注入负载设置

选项:--prefix--suffix

在某些情况下,仅当用户提供要添加到注入有效负载的特定后缀时,漏洞参数才可利用。当用户已经知道查询语法并想通过直接提供注入有效载荷前缀和后缀来检测和利用SQL注入时,这些选项很方便出现的另一种情况就会出现。

易受攻击的源代码示例(

query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";

为了检测和利用此SQL注入,您可以让sqlmap 在检测阶段为您检测边界(如SQL有效负载前缀和后缀的组合),也可以自行提供。

例如:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "')" --suffix " AND ('abc'='abc"

payload前缀为'),后缀为 AND('abc'='abc'(注意空格)

这将导致所有sqlmap请求最终以如下查询结束:

query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";

网络安全-sqlmap实战之sqlilabs-Less3文章中有使用。

设置Tamper脚本

选项:--tamper

在后端数据与数据库管理系统之间的输入验证机制较弱的情况下,此选项可能非常有用且功能强大。通过tamper脚本绕过昂贵的企业级IPS设备或Web应用程序防火墙(WAF)。

要利用此选项,需要为sqlmap提供一个以逗号分隔的篡改脚本列表,它将处理有效负载并将其转换为有效负载。可以定义自己的篡改脚本,在tamper/文件夹中使用sqlmap脚本,也可以对其进行编辑,只要将它们以逗号分隔作为选项的值即可连接。

示例:

--tamper="between.py,randomcase.py"
tamper脚本

使用脚本或自己编写脚本后再来补充。

设置DBMS认证

选项:--dbms-cred=username:password

很少使用,了解即可

探测

设置探测等级

选项: --level

此选项需要一个参数,该参数指定要执行的测试级别。有五个级别。默认值是1,其中执行有限数量的测试(请求)。反之亦然,级别5将详细测试大量有效负载和边界(如SQL有效负载前缀和后缀)。

sqlmap使用的有效负载在文本文件中指定xml/payloads.xml。按照文件顶部的说明进行操作,如果sqlmap错过了注入,则您也应该可以添加自己的有效负载进行测试!

此选项不仅会影响尝试使用哪些有效负载sqlmap,还会影响检查中采用的注入点:始终测试GET和POST参数,HTTP cookie头值从2级开始探测。HTTP User-Agent / Referer头的值从3级开始探测。

总而言之,检测SQL注入越难,则--level必须设置的越高。

xml文档
union_query

 在<test>标签中存在<level>标签,level设置为3、1时,分别执行两个测试。

设置风险参数

选项: --risk

此选项需要一个参数,该参数指定执行探测的风险。存在三个风险值。默认值为1,对于大多数SQL注入点而言,该值是无害的。风险值2将增加基于查询时间的SQL注入的测试添加到默认级别,值3也添加基于OR的SQL注入测试。

设置页面比较参数

默认情况下,通过将注入的请求页面内容与原始未注入的页面内容进行比较,可以将True查询与False查询(基于布尔的盲SQL注入漏洞的粗略概念)区分开。这个概念并非总是可行,因为有时页面内容在每次刷新时都会更改,甚至不注入任何内容,例如,当页面具有计数器,动态广告横幅或动态呈现的HTML的任何其他部分时,可能是随时间变化的并不是用户的输入。为了绕过此限制,sqlmap会努力识别响应正文的这些片段并进行相应处理。

选项:-–string

指定包含字符串,查询为True

选项:-–not-string

指定包含字符串,查询为False

选项:-–regexp

指定通过正则表达式匹配字符串,结果为True

选项:–-code

指定匹配HTTP响应码,查询为True

示例:

--code=200

选项:--text-only

设置页面内容中包含文本

示例:

--text-only="这是页面需要包含的文本"

选项:--titles

前提是你知道如何根据返回的字符串内容区分查询真假,例如,登录页面title为Login时为真,Forbidden时为假。

示例:

--titles="Login"

注入技术

进行探测时的注入技术

选项:--technique

sqlmap支持以下注入技术

  • B:Boolean-based blind(基于布尔的盲注)
  • E:Error-based(报错注入)
  • U:Union query-based(联合查询注入)
  • S:Stacked queries(堆叠查询注入)
  • T:Time-based blind(基于时间的盲注)
  • Q:Inline queries(内联查询注入)

使用多个技术时连着写即可

示例

--technique=BU

设置时间盲注的延迟时间

选项:--time-sec

默认为5秒,空格后跟一个整数值来设置。

设置联合查询列数

选项:--union-cols

默认范围是1到10。当level值较高时列数检测范围的会扩大到50列。

可以用此参数指定列数检测范围,例如,-–union-cols 12-16意味着使用12到16列来测试UNION查询SQL注入。

设置联合查询字符

选项: --union-char

默认情况下,sqlmap使用NULL字符测试UNION查询SQL注入技术。但是,通过提供更高的--level值,sqlmap也将使用随机数执行测试,因为在某些特殊情况下,UNION查询测试NULL失败,而使用随机整数则成功。

例如,使用--union-char abc来手动告诉sqlmap使用特定字符测试这种类型的SQL注入。

设置联合查询表

选项: --union-from

在某些UNION查询SQL注入情况下,需要在FROM子句中强制使用有效且可访问的表名。例如,Microsoft Access要求使用此表。如果不提供一个UNION查询,SQL注入将无法正确执行(例如--union-from=users

DNS渗透攻击

选项: --dns-domain

DNS渗透SQL注入攻击在论文《Data Retrieval over DNS in SQL Injection Attacks》中可以查看,而在sqlmap内部实现的介绍可以在DNS exfiltration using sqlmap幻灯片中找到。

针对目标网络很有可能对外部流量进行限制,或者设置WAF。
通过设置DNS流量来突破限制--dns-domain“dns服务器”,需要用户自身具有一个开放53端口的DNS服务器,通过DNS流量来获得Web应用程序中数据内容。

设置二阶注入

选项:--second-url

注入结果如果需要显示在其他页面,需要用此选项指明显示注入结果的页面,该选项后跟一个url。

选项:--second-req

用于发送到显示结果的服务器的请求文件。

指纹

默认情况下,sqlmap会自动进行DBMS指纹识别。

选项:-f或–-fingerprint

执行广泛的数据库管理系统指纹识别可以添加此选项。

选项:-b或-–banner

得到更准确的指纹识别结果可以添加此选项,就是DBMS的具体版本等信息。

枚举

枚举全部

选项:-all

不建议这样做,因为它会生成大量检索有用和无用数据的请求。

枚举DBMS的Banner信息

选项:-b或-–banner

得到更准确的指纹识别结果可以添加此选项,就是DBMS的具体版本等信息。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" -b --batch
banner

枚举DBMS当前用户

选项: --current-user

通过此选项,可以枚举DBMS的用户,该用户正在有效地从Web应用程序对后端DBMS执行查询。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --current-user --batch
user

枚举DBMS当前数据库

选项: --current-db

使用此选项,可以枚举Web应用程序连接到的数据库管理系统的数据库名称。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --current-db --batch
db

枚举服务器主机名

选项: --hostname

通过此选项,可以枚举数据库管理系统的主机名。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --hostname --batch
hostname

检测当前用户是否是数据库管理员

选项: --is-dba

可以检测当前的数据库管理系统会话用户是否是数据库管理员,也称为DBA。则sqlmap将返回True,反之返回False

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --is-dba --batch
dba

枚举数据库管理系统用户

选项: --users

当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举用户列表。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --users --batch
users

枚举并破解数据库管理系统用户的密码哈希值

选项:--passwords

当会话用户具有对有关DBMS用户密码信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的密码哈希。sqlmap将首先枚举用户,然后为每个用户枚举不同的密码哈希。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --password --batch
pwd

枚举数据库管理系统用户权限

选项: --privileges

当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的特权。通过特权,sqlmap还将向您显示哪些是数据库管理员。

可以提供选项-U以指定要枚举特权的用户。

如果提供"CU"用户名,它将被视为当前用户的别名,并枚举该用户的特权。

在Microsoft SQL Server上,此功能将显示每个用户是否是数据库管理员,而不是所有用户的特权列表。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --privileges --batch
privilege

枚举数据库管理系统用户角色

选项: --roles

当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的角色。

可以提供选项-U以指定要枚举特权的用户。

如果提供"CU"用户名,它将被视为当前用户的别名,并枚举该用户的特权。

仅当DBMS是Oracle时,此功能才可用。官网是这么写的,但是,我测试mysql也是可以的。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --roles --batch
roles

枚举数据库管理系统的数据库

选项: --dbs

当会话用户具有对包含有关可用数据库信息的系统表的读取访问权限时,可以枚举数据库列表。

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举数据库表

选项:--tables--exclude-sysdbs-D

当会话用户具有对包含有关数据库表信息的系统表的读取访问权限时,可以枚举特定数据库管理系统数据库的表列表。

如果没有使用option提供特定的数据库-D,则sqlmap将枚举所有DBMS数据库的表。

还可以提供此选项--exclude-sysdbs以排除所有系统数据库。

请注意,在Oracle上,必须提供TABLESPACE_NAME而不是数据库名称。

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举数据库表列

选项:--columns-C-T-D

当会话用户具有对包含有关数据库表信息的系统表的读取访问权限时,可以枚举特定数据库表的列列表。sqlmap还枚举每列的数据类型。

此功能取决于-T用于指定表名称的,也可以取决于-D指定数据库名称。如果未指定数据库名称,则使用当前数据库名称。可以提供-C选项来指定表列名称(逗号隔开)。

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举数据值

选项:--dump

配合前面的-C等使用,枚举出某些列的数据值

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举schema信息

选项:--schema--exclude-sysdbs

可以使用此开关检索DBMS模式。模式清单将包含所有数据库,表和列,以及它们的类型。与--exclude-sysdbs仅包含非系统数据库的部分架构结合使用,即可检索和显示。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --schema --exclude-sysdbs --batch
结果

检索数据表的条目数量

选项--count

如果用户在显示所需条目之前只想知道表中的条目数,则可以使用次选项。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -count -D security --batch
结果

获取数据信息

选项:--start,--stop,--first,--last

--start和--stop表示表的条目范围

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -D security -T users --start 1 --stop 6 --dump --batch
结果

--first 和 --last更是没什么用,没必要去记住

设置条件获取信息

选项:--where

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -D security -T users -C id,username --where="id>3"  --dump --batch
结果

运行自定义sql语句

选项:–sql-query和–sql-shell

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -sql-query="select * from users where id=5"  --dump --batch
结果

打开sql-shell,类似于mysql 的命令行那种,然后自己敲sql语句即可,exit;退出。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -sql-shell  --dump --batch
结果

暴力破解

暴力破解表名

选项: --common-tables

在某些情况下,--tables不能用来检索数据库的表名。这些情况通常属于以下类别之一:

  • 数据库管理系统是MySQL <5.0information_schema不可用。
  • 数据库管理系统是Microsoft Access,并且系统表MSysObjects不可读-默认设置。
  • 会话用户对存储数据库方案的系统表没有读取特权。

使用字典去爆破,比较慢,就不展示了,可以打开看一下字典

表名字典

 作为程序员也可以在起表名时遍历一下,不要使用常用表名。

暴力破解列名

开关: --common-columns

对于每个表,在某些情况下--columns不能使用switch 来检索数据库表的列名。这些情况通常属于以下类别之一:

  • 数据库管理系统是MySQL <5.0information_schema不可用。
  • 数据库管理系统是Microsoft Access,这种信息在系统表内部不可用。
  • 会话用户对存储数据库方案的系统表没有读取特权。
列名字典

一般是下划线命名法,然后单词或单词缩写。我平时也这样命名,看来还需要加强安全意识,既可读又安全。

文件系统访问

读取文件

选项: --file-read

当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且会话用户具有滥用数据库特定功能和体系结构弱点所需的特权时,可以从基础文件系统中检索文件的内容。指定的文件可以是文本文件或二进制文件。sqlmap将正确处理它。

这些技术在《 Advanced SQL injection to operating system full control》白皮书中有详细介绍。

路径是绝对路径

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --file-read="C:\\readme.txt" --batch

上传文件

选项:--file-write--file-dest

当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且会话用户具有滥用数据库特定功能和体系结构弱点所需的特权时,可以将本地文件上载到数据库服务器的文件系统。指定的文件可以是文本文件或二进制文件。sqlmap将正确处理它。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --file-write="E:\\readme.txt" --file-dest="C:\\readme.txt"
没有权限

对于没有权限的会给出提示,否则查看服务器中对应位置应该有文件。

操作系统信息

选项:--os-cmd--os-shell

后端数据库管理系统是MySQL、PostgreSQL、Microsoft SQL Server时,可以在数据库服务器的底层操作系统上运行任意命令,会话用户具有滥用数据库特定的功能和架构所需的权限。

在MySQL和PostgreSQL中,SqlMap的上传含有两个用户定义函数的共享库(二进制文件),sys_exec()sys_eval(),然后在数据库上创建这两个函数并调用它们中的一个来执行指定的命令,用户选择是否显示标准输出。在Microsoft SQL Server上,sqlmap滥用xp_cmdshell存储过程:如果禁用了该存储过程(默认情况下,在Microsoft SQL Server> = 2005上),则sqlmap会重新启用它。如果它不存在,则sqlmap从头开始创建它。

当用户请求标准输出时,sqlmap使用枚举SQL注入技术(blind, inband 或error-based)中的一种来检索它。反之亦然,如果不需要标准输出,则使用堆栈查询SQL注入技术来执行命令。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --os-shell
选择
绝对路径

 sqlmap会上传一个php文件到服务器中,通过cmd参数进行命令的运行。

Out-of-Band状态连接:Meterpreter和friends

选项:--os-pwn--os-smbrelay--os-bof--priv-esc--msf-path--tmp-path

当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,会话用户具有滥用数据库特定功能和体系结构弱点的特权,可以在攻击者机器与数据库服务器基础操作系统之间建立Out-of-Band状态TCP连接。根据用户的选择,此通道可以是交互式命令提示符,Meterpreter会话或图形用户界面(VNC)会话。

和上面的命令差不多,也是基于上传文件的,由于博主没有给Web服务器对C盘文件上传的权限,就不做演示了。

Windows注册表访问

当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server且Web应用程序支持堆叠查询时,可以访问Windows注册表。此外,会话用户还必须具有访问它所需的特权。

win+R regedit

由于博主没有给Web服务器对C盘文件上传的权限,就不做演示了,而且注册表弄坏了很麻烦,另外,web服务器一般都是Linux系统。

读取Windows注册表项值

开关: --reg-read

使用此开关,您可以读取注册表项值。

   编写Windows注册表项值

选项:--reg-add

使用此开关,您可以编写注册表项值。

   删除Windows注册表项

选项:--reg-del

使用此开关,您可以删除注册表项。

   辅助注册表选项

选项:--reg-key--reg-value--reg-data--reg-type

这些选项可用于提供正确运行开关所需的数据--reg-read--reg-add和 --reg-del。因此,您可以在命令提示符下将它们用作程序参数,而不是在询问时提供注册表项信息。

通过--reg-key选项,您可以指定使用的Windows注册表项路径,--reg-value在提供的键中使用值项目名称,并使用--reg-data值数据,而通过--reg-type选项,您可以指定值项目的类型。

官网示例:

python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --r\
eg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-ty\
pe=REG_SZ --reg-data=1

通用参数

从存储的(.sqlite)文件加载会话

选项: -s

sqlmap自动在专用输出目录内为每个目标创建一个持久会话SQLite文件,该文件中存储了会话恢复所需的所有数据。如果用户想要显式设置会话文件位置(例如,用于在一个地方存储多个目标的会话数据),则可以使用此选项。

就是显示上次探测的结果,-u url -s session.sqlite

将HTTP流量记录到文本文件

选项: -t

此选项需要一个参数,该参数指定文本文件以写入由sqlmap生成的所有HTTP通信-HTTP(S)请求和HTTP(S)响应。

这主要用于调试目的,向开发人员提供潜在的错误报告时,也请发送此文件。

示例:

python sqlmap.py -u "http://192.168.31.12/sqli-labs_1/Less-1/?id=1" -t F:\target.txt --batch
保存的http信息

 以一排#分割,包括发送的请求和收到的响应及html代码。

以非交互模式运行

选项:--batch

之前有使用过,对于一些需要输入Y/N的,直接选择默认选项,跳过与用户的交互。

it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests?
如果没有发现至少其他(潜在)技术,建议仅执行基本UNION测试。 您是否要减少请求数量?

慢的时候下面这个选择N比较好  

for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values?
对于其余的测试,您是否要包括所有针对“ MySQL”的扩展了级别(1)和风险(1)值的测试?
POST parameter 'uname' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N

设置问题答案

选项: --answers

如果用户想要自动设置问题的答案(即使--batch使用了答案),则使用此选项可以通过在等号后提供问题的任何部分以及答案来实现。另外,可以用定界符'',''来分隔不同问题的答案。

 示例,

--answers="extending=N,follow=N"

自定义(盲)SQL注入字符集

选项: --charset

在基于布尔的盲目和基于时间的盲目SQL注入情况下,用户可以强制使用自定义字符集来加快数据检索过程。例如,在转储消息摘要值(例如SHA1)的情况下,通过使用(例如)--charset="0123456789abcdef",预期的请求数比常规运行少30%左右。

取网站

选项: --crawl

sqlmap可以通过从目标位置开始收集(爬网)潜在的脆弱链接。使用此选项,用户可以设置深度(距起始位置的距离),在此深度以下sqlmap不会进入收集阶段,因为只要有新的链接要访问,该过程就会以递归方式进行。

 抓取深度为3

python sqlmap.py -u "http://192.168.31.12/sqli-labs_1/Less-1/?id=1" --crawl=3 --batch

选项:--crawl-exclude

使用此选项,您可以通过提供正则表达式来阻止页面进行爬网。例如,如果您要跳过logout路径中所有带有关键字的页面,则可以使用--crawl-exclude=logout

 CSV输出中使用的定界字符

选项: --csv-del

当将转储的数据存储为CSV格式(--dump-format=CSV)时,条目必须用“分隔值”分隔(默认值为,)。如果用户要覆盖其默认值,则可以使用此选项(例如--csv-del=";"

转储数据的格式

选项: --dump-format

SqlMap支持三种不同类型的存储,转储时表数据转换成相应格式化的文件到输出目录内:CSVHTMLSQLITE。默认值是CSV,其中每个表都逐行存储到文本文件中,并且每个条目都用逗号分隔,(或使用option提供--csv-del)。在HTML的情况下,输出存储到HTML文件中,其中每一行均以格式化一行表示在表格内(使用<tr><td>等标签)。在SQLITE的情况下,输出将存储到SQLITE数据库中,原始表内容将被复制到具有相同名称的对应表中。

强制设置DBMS字符编码

选项: --encoding

为了正确解码字符数据,sqlmap使用Web服务器提供的信息(例如HTTP标头Content-Type)或来自第三方库chardet的启发式结果。

但是,在某些情况下,必须重写此值,尤其是在检索包含国际非ASCII字母(例如--encoding=GBK)的数据时。必须注意的是,由于存储的数据库内容与目标端使用的数据库连接器之间的隐式不兼容,字符信息可能会不可逆转地丢失。

检测网络连接

选项:--check-internet

解析和测试表单的输入字段

选项: --forms

假设您要针对庞大的搜索表单对SQL注入进行测试,或者要测试登录绕过(通常只有两个输入字段,例如usernamepassword),则可以将请求传递到sqlmap的请求文件中-r,设置为相应地发布数据(--data)或让sqlmap为您完成!

上述两个实例以及许多其他实例在HTML响应正文中均显示为 <form> <input>标记,这就是该选项起作用的地方。

提供sqlmap --forms以及可在其中找到该表单的页面作为目标URL(-u),并且sqlmap将为您请求目标URL,解析其拥有的表单并指导您测试这些表单输入字段上的SQL注入(参数),而不是提供的目标网址。

设置预计完成时间

选项: --eta

可以实时计算和显示估计的到达时间,以检索每个查询输出。当用于检索输出的技术是任何SQL盲注类型时,将显示此信息。

就是显示个进度条,没有太大意义。

刷新会话文件

选项: --flush-session

刷新会话文件,可以避免在sqlmap中默认实现的缓存机制,其他可能的方法是手动删除会话文件。

忽略存储在会话文件中的查询结果

选项: --fresh-queries

忽略存储在会话文件中的查询结果,可以保持会话文件不变,并在选定的运行中避免恢复/还原查询输出。

使用DBMS十六进制函数进行数据检索

选项: --hex

在数据丢失情况下,非ASCII数据的检索需要特殊的需求。解决该问题的一种方法是使用DBMS的hex函数。通过此选项打开,数据将在检索之前编码为十六进制格式,未编码的为原始格式。

自定义输出目录路径

选项: --output-dir

默认情况下,sqlmap将会话和结果文件存储在子目录中output。如果您想使用其他位置,则可以使用此选项(例如--output-dir=/tmp)。

从响应页面解析DBMS错误消息

选项: --parse-errors

如果将Web应用程序配置为调试模式,以便在HTTP响应中显示后端数据库管理系统错误消息,则sqlmap可以解析并为您显示它们。

这对于调试目的很有用,例如了解为什么某些枚举或接管开关不起作用-这可能与会话用户的权限有关,在这种情况下,您会看到一行类似的DBMS错误消息Access denied for user <SESSION USER>

将选项保存在配置INI文件中

选项: --save

可以将命令行选项保存到配置INI文件中。然后可以使用上述-c选项编辑生成的文件并将其传递到sqlmap 。

更新sqlmap

选项: --update

使用此选项,可以直接从Git存储库将工具更新到最新的开发版本。显然需要Internet访问。

如果由于某种原因该操作失败,请在sqlmap安装目录中运行git pull。它将执行与选项完全相同的操作如果在Windows上运行sqlmap,则可以使用SmartGit客户端。

存储HTTP流量至HAR文件

选项:--har

HAR(HTTP Archive),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON。

--har="test.har"

json格式适合后序的编程

筛选Payload

选项:--test-filter

--test-filter="AND"

 配合-v3使用

过滤Payload

选项:--test-skip

--test-skip="BENCHMARK"

BENCHMARK(count,expr)   

BENCHMARK()函数重复count次执行表达式expr,用于计时MySQL处理表达式有多快,结果值总是0。用于报告查询的执行时间。   

mysql> select BENCHMARK(1000000,encode("hello","goodbye"));   

1 row in set (4.44 sec)  

 配合-v3使用

杂项

使用短助记符

选项: -z

键入所有所需的选项,尤其是对于最常用的选项(例如--batch --random-agent --ignore-proxy --technique=BEU),可能会很乏味。解决这个问题有一种更简单的方法。在sqlmap中,它称为“助记符”。

每个选项都可以使用较短的助记符形式编写,并用逗号(,)分隔,其中助记符仅代表原始名称的第一个任意选择的部分。没有对选项和切换到它们各自缩短的对应项的严格映射。唯一需要的条件是没有其他选项具有与所需选项相同的前缀。

例:

$ python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -u "www.target.com/vuln.php?id=1"

可以用较短的助记符形式(多种方式之一)编写,例如:

$ python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=1"

对成功的SQL注入检测发出警报

选项: --alert

找到SQL注入时发出提示音

选项: --beep

如果用户使用选项--beep,当发现SQL注入时,将立即通过嘟嘟声警告。当存在大量-m要测试的目标URL 列表(选项)时,此功能特别有用。

从sqlmap特定的UDF和表中清除DBMS

选项: --cleanup

当您完成了基础操作系统或文件系统的接管工作,并创建用户定义的函数后,建议从sqlmap临时表中清理后端数据库管理系统(例如sqlmapoutput)。选项 --cleanup将尝试尽可能清理DBMS和文件系统。

检查依赖项

选项: --dependencies

在某些特殊情况下,sqlmap需要独立安装额外的第三方库(例如,选项 -d--os-pwnicmpsh隧道情况下进行切换,--auth-typeNTLMHTTP身份验证类型情况下进行选择等),并且仅在此类特殊情况下才会警告用户。但是,如果您要独立检查所有这些额外的第三方库依赖关系,则可以使用选项--dependencies

禁用控制台输出高亮

选项: --disable-coloring

缺省情况下,sqlmap在写入控制台时使用着色。如果出现不良效果(例如,控制台外观出现未解释的ANSI着色代码,例如\x01\x1b[0;32m\x02[INFO]),则可以使用此开关禁用控制台输出颜色。

测试WAF等保护

选项:--identify-waf

判断当前注入点是否存在WAF/IPS/IDS保护

模仿智能手机

选项: --mobile

有时,Web服务器与台式机相比,面向移动电话的界面不同。在这种情况下,您可以强制使用预定的智能手机HTTP User-Agent标头值之一。通过使用此开关,sqlmap将要求您选择在当前运行中将模仿的流行智能手机之一。

$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" --mobile
[...]
which smartphone do you want sqlmap to imitate through HTTP User-Agent header?
[1] Apple iPhone 4s (default)
[2] BlackBerry 9900
[3] Google Nexus 7
[4] HP iPAQ 6365
[5] HTC Sensation
[6] Nokia N97
[7] Samsung Galaxy S

在离线模式下工作(仅使用会话数据)

选项: --offline

通过使用开关,--offlinesqlmap将仅在数据枚举中使用以前的会话数据。这基本上意味着在此运行期间将进行零次连接尝试。

从数据目录中安全删除所有内容

选项:--purge

如果用户决定安全地从sqlmap的数据目录(例如$HOME/.local/share/sqlmap)中删除所有内容,其中包含先前sqlmap运行中的所有目标详细信息,则可以使用switch --purge。清除时,数据文件夹中(子)目录中的所有文件将被随机数据覆盖,被截断,重命名为随机名称,(子)目录也将重命名为随机名称,最后整个目录树将被删除。

跳过启发式检测WAF/IPS保护

选项: --skip-waf

默认情况下,sqlmap自动在启动请求之一内发送一个虚拟参数值,该参数值包含有意的“可疑” SQL注入有效负载(例如...&foobar=AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1)。如果目标的响应与原始请求的响应不同,则很有可能受到某种保护。如有任何问题,用户可以通过提供switch禁用此机制--skip-waf

交互式sqlmap shell

选项: --sqlmap-shell

通过使用选项--sqlmap-shell,将为用户提供交互式sqlmap shell,该shell具有以前所有使用过的选项和/或开关运行的历史记录

寻找脆弱目标

选项: --smart

在某些情况下,用户拥有大量潜在的目标URL(例如,带有选项 -m),而想尽快找到易受攻击的目标。如果使用选项--smart,则只会在扫描中进一步使用可引起DBMS错误的参数。否则,它们将被跳过。

指定站点根目录

选项:--web-root

面向初学者的简单向导界面

选项: --wizard

对于初学者,有一个向导界面,该界面使用简单的工作流程,且问题尽可能少。如果用户仅输入目标URL并使用默认答案(例如,通过按Enter),则在工作流结束之前,也会得到正确答案。

sqlmap实战内容在下方链接中,使用sqlilabs,有合适的简单示例我会补充在本文中。

更多内容查看:网络安全-自学笔记

数据结构专栏:数据结构(严蔚敏版)与算法的实现(含全部代码)

STL专栏:C++ STL容器用法示例大全

OpenGL专栏:现代OpenGL入门教程

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力

猜你喜欢

转载自blog.csdn.net/lady_killer9/article/details/106598738
今日推荐