sqlmap

学习学习

Posted by lll-yz on April 11, 2021

sqlmap简介

sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。

支持的数据库:MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MAXDB。

cI85JH.png

sqlmap支持五种不同的注入模式:

UNION query SQL injection(可联合查询注入) Error-based SQL injection(报错型注入) Boolean-based blind SQL injection(布尔型注入) Time-based blind SQL injection(基于时间延迟注入) Stacked queries SQL injection(可多语句查询注入)

sqlmap使用

检测注入

基本格式:sqlmap -u "http://xxx.xxx.xxx.xxx/?id=1"

默认使用level1检测全部数据库类型。

sqlmap -u "http://xxx.xxx.xxx.xxx/?id=1" -dbms mysql -level 3

指定数据库类型为mysql,级别为3。(共5级,级别越高,检测越全面)

跟随302跳转

当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302,当注入错误的时候,先报错再跳转的时候,不需要跟随302。

目的就是:要追踪到错误的信息。

cookie注入

当程序有防get注入的时候,可以使用cookie注入。

sqlmap -u "http://xxx.xxx.xx.xx/index.php" --cookie "id=1" -level 2 (只有level达到2时才可以检测到cookie)

从post数据包中注入

可以使用burp等工具来抓包结合sqlmap进行注入:

  • 抓包请求文件:

1.浏览器打开目标地址。

2.用burp抓包。

3.将burp抓到的post请求复制到一个txt文件(随便命名,下方用到,如:1.txt)。

4.sqlmap指令:

sqlmap -r 1.txt -f
  • burp log 文件:

通过加载burp的日志文件进行扫描注入:

sqlmap -l xxx.txt -f -dbs...

cIt0n1.md.png

基本注入命令

  • 查询数据库:
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -dbs
  • 查询指定数据库中的表:
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -D 要查的数据库名 -tables
  • 查询指定表中的字段:
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -D 要查的数据库名 -T 表名 -columns
  • 查询具体的字段(如:username,password字段):
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -D 要查的数据库名 -T 表名 -C "username,password" -dump

常用命令参数

  • -is-dba 当前用户权限(是否为root权限)
  • -dbs 所有数据库
  • -current-db 网站当前数据库
  • -users 所有数据库用户
  • -current-user 当前数据库用户
  • -random-agent 构造随机的user-agent
  • -password 数据库密码
  • -proxy http://local:8080 -threads 10(可以自定义线程加速)代理
  • -time-sec=TIMESEC DBMS 响应的延迟时间(默认为5秒)

常用选项

Target(目标)

以下至少需要设置其中一个:

  • -d DIRECT 直接连接到数据库
  • -u url 目标的url
  • -c configfile 从INI配置文件中加载选项
  • -l LIST 从burp或webscarab代理的日志中解析目标
  • -r REQUESTFILE 从一个文件中载入HTTP请求
  • -g GOOGLEDORK 处理Google dork的结果作为目标的URL
Request(请求)

这些选项可以用来指定如何连接到目标URL:

  • -data=DATA 通过post发送的数据字符串
  • -cookie=COOKIE HTTP cookie头
  • -cookie-urlencode URL编码生成的cookie注入
  • -auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)
  • -auth-cred=ACRED HTTP身份验证凭据(用户名:密码)
  • -auth-cert=ACERT HTTP认证证书(key_file, cert_file)
  • -proxy=PROXY 使用HTTP代理连接到目标URL
  • -proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码)
Enumeration(枚举)

可以用来列举数据库管理系统的信息、表中的结构和数据。

  • -b -bannner 检索数据库管理系统的标识

  • -current-user 检索数据库管理系统当前用户

  • -current-db 检索数据库管理系统当前数据库

  • -is-dba 检测DBMS当前用户是否DBA

  • -users 枚举数据库管理系统用户

  • -passwords 枚举数据库管理系统用户密码哈希

  • -privileges 枚举数据库管理系统用户的权限

  • -roles 枚举数据库管理系统用户的角色

  • -dbs 枚举数据库管理系统数据

  • -D DBname 要进行枚举的指定数据库名

  • -T TBLname 要进行枚举的指定数据库表

  • -tables 枚举的DBMS数据库中的表

  • -columns 枚举DBMS数据库表列

  • -dump 转储数据库管理系统的数据库中的表项

  • -dump-all 转储所有的DBMS数据库表中的条目

  • -search 搜索列(S)、表(S)和数据库名称(S)

  • -C col 要进行枚举的数据库列

  • -U user 用来进行枚举的数据库用户

  • -exclude-sysdbs 枚举时排除系统数据库

  • -level=LEVEL 执行测试的等级(1-5,默认为1,等级最低是,级别越高检测越全面)

Brute force(蛮力)

这些选项用于蛮力检查。

  • -common-tables 检查存在共同表
  • -common-columns 检查存在共同列
File system access(访问文件系统)

这些选项可以用来访问后端数据库管理系统的底层文件系统:

  • -file-read=RFILE 从后端数据库的管理系统文件系统读取文件
  • -file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
  • -file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
Operating system access(操作系统访问)

这些选项用于访问后端数据库管理系统的底层操作系统:

  • -os-cmd=OSCMD 执行操作系统命令
  • -os-shell 交互式的操作系统的shell
  • -os-pwn 获取一个OOB SHELL, meterpreter或VNC
  • -os-smbrelay 一键获取一个OOB shell,meterpreter或VNC
  • -os-bof 存储过程缓冲区溢出利用
  • -priv-esc 数据库进程用户权限提升
Windows注册表访问

这些选项用来访问后端数据库管理系统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注册表项值类型
Miscellaneous(杂项)
  • -batch 从不询问用户输入,使用所有默认配置

  • -beep 发现SQL注入时提醒