sqlmap基础知识(二)

一、sqlmap的基本使用

读取文件/上传文件

支持的数据库类型

仅对MySQL、MSSQL、PostgreSQL有效,可以进行文件操作

前提条件

必须是高权限用户

mysql禁用secure_file_priv=' '

php禁用GPC

有目录读写文件权限

sqlmap -u url --is-dba
# 查看是否为dba权限,必须为root权限

1.读取文件案例:
sqlmap -u "http://www.php001.com/index.php?id=1" --file-read "D:/n1.txt"

2.写入文件案例:
sqlmap -u "http://www.php001.com/index.php?id=1" --file-write=D:/shell.php --file-dest=C:/www/shell.php
# 上传文件(本地木马路径:目标网站目录)

获取shell

注入攻击的最终目的就是为了获取目标主机的控制器,也就是为了后去目标主机的shell

sqlmap 能够在数据库所在的服务器的操作系统上运行任意命令

格式:

        sqlmap -u  "URL" --os-shell                获取系统交互

        sqlmap -u "URL" --os-cmd=命令        直接执行系统命令

注意:

  • 仅对MySQL、MSSQL、PostgreSQL有效

前提条件:

  • 数据库用户有读写权限
  • 有目录读写文件权限

执行命令的原理

  • 原理就是在执行--os-shell 或 os-cmd=xxx的时候,会上传一个upload木马后,再上传一个cmd shell
  • 当 --os-shell退出后,会调用后门脚本删除上传文件后,进行自删除
  • 在MySQL和PostgreSQL中,sqlmap可以上传一个包含两个用户自定义函数,分别为sys_exec()和sys_eval()的共享库(二进制文件),然后在数据库中创建两个对应函数,并调用对应函数执行特定的命令,并允许用户选择是否打印出相关命令执行的结果
  • 在Microsoft SQL Server 中,sqlmap会利用xp_cmdshell存储过程:如果该存储过程被关闭了(Microsoft SQL Server 的2005及以上版本默认关闭),当用户请求标准输出,sqlmap将使用任何可用的SQL注入技术(盲注、带内注入、报错型注入)去获取对应结果。相反,如果无需标准输出对应结果,sqlmap则会使用堆叠查询注入(Stacked queries)技术执行相关的命令。
  • 如果堆叠查询没有被web应用识别出来,并且DBMS为MySQL,假如后端DBMS和Web服务器在同一台服务器上,则仍可以利用SELECT语句中的INTO OUTFILE,在根目录可写目录中写shell。

UDF提权

可以通过编译MySQL或PostgreSQL共享库(在Windows上为DLL,在Linux、Unix上为共享对象(shared object)) 来注入自己的用户自定义函数(UDFs),然后将本地存储共享库的目录路径提供给 sqlmap。sqlmap 会根据你的选择决定下一步是向数据库服务器文件系统上传共享库,还是创建用户自定义函数。当你完成注入 UDFs 的使用后,sqlmap 还可以将它们从数据库中删除

使用选项 --udf-inject 并按照说明进行操作即可;如果需要,也可以使用--shared-lib 选项通过命令行指定共享库的本地文件系统路径,否则 sqlmap 会在运行时向你询问路径

此功能仅对 MySQL 或 PostgreSQL有用
有状态带外连接:Meterpreter & friends
开关和选项:--os-pwn,--os-smbrelay,--os-bof,--priv-esc,--msf-path 和 --tmp-path
当后端 DBMS 为 MySQL,PostgreSQL 或 Microsoft SQL Server 时,并且当前会话用户拥有对数据
库特定功能和架构缺陷的利用权限时,sqlmap 能够在攻击者机器与数据库服务器之间建立起有状态带
外 TCP 连接。根据用户的选择,该连接可以是交互式命令行、Meterpreter 会话、或者图形用户界面
(VNC)会话
sqlmap 依赖 Metasploit 创建 shellcode,并实现了四种不同的技术在数据库服务器上执行它。这些
技术分别是:
通过 sqlmap 的用户自定义函数 sys_bineval() 在数据库内存中执行 Metasploit shellcode。MySQL
和 PostgreSQL 支持该技术,通过开关 --os-pwn 启用
通过 sqlmap 的用户自定义函数 sys_exec() 向 MySQL 和 PostgreSQL 上传一个 Metasploit 独立
payload 传输器并执行,对于 Microsoft SQL Server 则是使用 xp_cmdshell() 函数,通过开关 --os
pwn 启用
通过进行从数据库服务器到攻击者机器(由 Metasploit smb_relay 服务监听)之间的 UNC 路径请求
的 SMB 反射攻击(MS08-068)来执行 Metasploit shellcode。当 sqlmap 运行于具有高权限
(uid=0)的 Linux/Unix 上,且目标 DBMS 以 Windows 管理员身份运行时支持该技术,通过开关 --
os-smbrelay 启用
通过利用 Microsoft SQL Server 2000 和 2005 的 sp_replwritetovarbin 存储过程堆缓冲区溢出
(MS09-004)在数据库内存中执行 Metasploit shellcode。sqlmap 使用自己的 exploit,自动绕过
DEP 内存保护来触发漏洞,但它依赖 Metasploit 生成 shellcode,以便在成功利用时执行,通过开关
--os-bof 启用

访问 Windows 注册表

条件:

DBMS (Database Management System,数据库管理系统) 是MySQL,PostgreSQL 或 Microsoft SQL Server
web 应用程序支持堆叠查询
会话用户必须具备相应的访问权限

--reg-read        读取Windows注册表键值

--reg-add         写入Windows注册表键值

--reg-del          删除Windows注册表项

--reg-key,  --reg-value, --reg-data和--reg-type        #注册表辅助选项

常规选项

  • -s   从已存储(.sqlite)文件读取会话
    • #qlmap 会在专用的输出目录中自动为每一个目标分别建立持久会话 SQLite 文件,该文件会存
      储用于恢复会话的所有数据。如果用户需要指定会话文件的具体存储位置(例如:将所有目标的
      会话数据存储在同一个位置),则可以使用这个选项
  • -t   记录HTTP(s)访问信息到文本文件,这个选项需要一个指定文本文件地址的参数,用于吸入sqlmap产生的所有HTTP(s)流量信息,包括HTTP(s)请求和HTTP(s)响应
  • --batch   以非交互式模式运行,当sqlmap需要用户输入信息时,都将会以默认参数运行
  • --update   更新sqlmap
  • --flush-session    清空会话文件
输出信息的详细程度
-v 数字
# 共7个级别(0~6),默认为1
# 可以用-vv 代替 -v2,推荐使用
0: 只输出 Python 出错回溯信息,错误和关键信息
1: 增加输出普通信息和警告信息
2: 增加输出调试信息
3: 增加输出已注入的payload
4: 增加输出HTTP请求
5: 增加输出HTTP响应头
6: 增加输出HTTP响应内容

对目标进行检测的时候相关参数

  1. -u   URL
  2. -r    # 从文件中读取HTTP请求
  3. -d   直连数据库,格式"mysql://root:root@192.168.0.8:3306/testdb"
  4. -l    # 从Burp代理日志文件中解析目标地址
  5. -m  # 从文本文件中批量获取目标
  6. -g   # 使用Google dork 结果作为目标地址 python sqlmap.py -g "inurl:" .php?id=1""
  7. -c   # 从INI配置文件中读取选项
  8. --purge   # 清除历史缓存
  9. --flush-session   #清除上次扫描的缓存

指定连接目标地址的方式

  1. --method=METHOD        #强制使用提供的HTTP方法(例如:PUT)
  2. --data=DATA                    #使用POST发送数据串;--data="id=1&user=admin"
  3. --param-del=";"                #使用参数分隔符,--data="id=1;user=admin"
  4. --cookie=COOKIE           #指定HTTP Cookie,--cookie "id=11" --level 2
  5. --drop-set-cookie             #忽略HTTP响应中的Set-Cookie参数
  6. --user-agent=AGENT      #指定 HTTP User-Agent
  7. --random-agent               #使用随机的HTTP User-Agent,随机从./txt/user-agents.txt 选一个,不是每次请求换一个
  8. --host                               #手动设置HTTP Host请求头值,默认情况下,HTTP Host请求头从提供的目标URL中解析
  9. --referer=REFERER        #指定HTTP Referer,默认情况下不会在HTTP请求中发送HTTP Referer请求头
  10. -H HEADER                    #设置额外带的HTTP头参数(例如:"X-Forwarded-For:127.0.0.1")
  11. --headers=HEADERS     #设置额外的HTTP头参数,必须以换行符分割(例如:"Accept-Language:fr\nETag:123")
  12. --auth-type,--auth-cred #选项用于指定后端web服务器实现的HTTP协议认证和所有向目标程序发起HTTP请求的有效凭据,支持的三种HTTP协议认证机制是:Basic、Digest、NTLM,认证凭据的语法是username:password。一个符合语法的例子:$ python sqlmap.py -u "http://192.168.124.121/sqlmap/mysql/basic/get_int.php?id\=1" --auth-type Basic --auth-cred "testuser:testpass"
  13. --auth-file                          #HTTP协议私钥认证
  14. --ignore-code                    #忽略(有问题)HTTP错误码
  15. --proxy,--proxy-cred,--proxy-file 和 --ignore-proxy #HTTP(s)代理,--proxy 并提供HTTP(S)代理地址使HTTP(S)请求经过该代理到达目标URL。设置HTTP(S) 代理的语法是http://url:post。如果HTTP(S)代理需要身份验证,则可以对选项 --proxy-cred 使用username:password 格式添加对应的凭证可以使用选项 --proxy-file 并指定包含批量代理的文件,想要使用sqlmap 对本地局域网目标进行测试时应该使用开关--ignore-proxy来绕过系统级的HTTP(S)代理服务
  16. --delay=10                         #设置每个HTTP请求的延迟秒数
  17. --safe-freq=SAFE              #每访问两次给定的合法URL才发送一次测试请求
  18. --csrf-token 和--csrf-url      #绕过反CSRF防护
  19. -force-ssl                           #支持https的SQL注入只需加入参数-force-ssl告诉sqlmap这是http服务即可
  20. --identify-waf                     #检测是否有WAF/IPS/IDS,这个功能以失效
  21. --eval                                 #在每个请求期间运行自定义的Python代码

指定注入参数

提供自定义注入payloads 和篡改参数的脚本

  1. -p TESTPARAMETER   #指定需要测试的参数
  2. --skip=SKIP                    #指定要跳过的参数
  3. --dbms=DBMS                #指定DBMS类型(例如:MySQL)
  4. --os=OS                          #指定DBMS服务器的操作系统类型
  5. --prefix=PREFIX             #注入payload 的前缀字符串
  6. --suffix=SUFFIX              #注入payload 的后缀字符串
  7. --tamper=TAMPER         #用给定脚本修改注入数据
  8. --batch                            #自动跳过选择项,按默认选项注入

指定检测级别

sqlmap 使用的 payloads 直接从文本文件 xml/pauloads.xml 中载入

根据该文件顶部的相关指导说明进行设置,如果sqlmap漏多了特定的注入

你可以选择自己修改指定的payload 用于检测

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王依硕

你的鼓励将是我创作的最大动力你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值