【工具】sqlmap 中文手册 使用教程
0x01、 基本信息
官网
sqlmap: automatic SQL injection and database takeover tool
注入类型
基于布尔的盲注:即可以根据返回页面判断条件真假的注入;
基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
联合查询注入:可以使用union的情况下的注入;
堆查询注入:可以同时执行多条语句的执行时的注入。
支持的数据库
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
0x02、使用方法
基本流程
爆所有数据库
sqlmap -r 1.txt --dbs
爆表名
sqlmap -r 1.txt -D dvwa --tables
爆字段名
sqlmap -r 1.txt -D dvwa -T users --columns
爆字段内容
sqlmap -r 1.txt -D dvwa -T users -C user,password --dump
Target
-d # 直接连接数据库
-u # 目标 URL
-l # 从 Burp 或者 WebScarab 加载一个日志文件
-x # 从远程网站地图(sitemap).xml 文件加载目标
-r # 从文件中加载目标【重要】
-g # 从 google 结果中加载目标
-c # 从配置文件(.ini)中加载目标
Request
指定如何连接目标的 URL
–method=METHOD 定制 http 方法 (e.g. PUT)
–data=DATA 通过 POST 发送数据 (e.g. “id=1”)
–param-del=PARA… 用特殊字符拆分字符串 (e.g. &)
–cookie=COOKIE 定制 cookie (e.g. “PHPSESSID=a8d127e…”)
–cookie-del=COO… 定制分割 cookie 的字符 (e.g. 😉
–drop-set-cookie 忽略返回包中的 Set-Cookie
–user-agent=AGENT 定制 User-Agent
–random-agent 使用随机的 UA
–host=HOST 设置 host 的值
–referer=REFERER 设置 referer 的值
-H HEADER, --hea… 额外的请求头 (e.g. “X-Forwarded-For: 127.0.0.1”)
–headers=HEADERS 额外的请求头,使用 \n 来分割 (e.g. “Accept-Language: fr\nETag: 123”)
–auth-type=AUTH… 身份认证类型 (Basic, Digest, NTLM or PKI)
–auth-cred=AUTH… HTTP 身份凭证 (name:password)
–auth-file=AUTH… 从文件中载入 PEM 证书文件
–ignore-code=IG… 忽略状态码 (e.g. 401)
–ignore-proxy 忽略系统代理
–ignore-redirects 忽略重定向
–ignore-timeouts 忽略超时的链接
–proxy=PROXY 设置一个代理
–delay=DELAY 设置两个 HTTP 请求之间的延迟
–timeout=TIMEOUT 设置超时时间 (default 30)
–retries=RETRIES 设置超时重试时间 (default 3)
–randomize=RPARAM 随机改变给定的参数的值
–safe-url=SAFEURL 在测试的时候,频繁的访问某 URL(伪装是真人)
–safe-post=SAFE… 在测试的时候,频繁的 POST 数据
–safe-req=SAFER… 从文件中加载一个安全的 http 请求
–safe-freq=SAFE… 在两次请求中间,加入一个访问请求
–skip-urlencode 忽略 URL 编码
–csrf-token=CSR… 保留 anti-CSRF token
–csrf-url=CSRFURL 访问一个 URL,来获取 anti-CSRF token
–force-ssl 强制使用 SSL/HTTPS
–chunked 分块传输 POST 的请求
–hpp 使用 http 参数污染
Optimization
有俩不知道咋做到的,有时间抓包看看。。
-o 打开所有优化开关
–predict-output 预测常见的查询输出??
–keep-alive 使用一个长连接,不中断
–null-connection 在不使用实体 HTTP 请求的情况下获取页面长度??
–threads=THREADS 最大线程数 (default 1)
Injection
-p TESTPARAMETER 指定测试的参数
–skip=SKIP 跳过指定的参数
–skip-static 如果参数是静态的,那么就跳过
–dbms=DBMS 指定后端的数据库类型
–dbms-cred=DBMS… 指定数据库的账号密码 (user:password)
–os=OS 指定后端的操作系统
–no-cast 关闭 payload casting 机制
–no-escape 关闭 string escaping 机制
–prefix=PREFIX 在 payload 上加个前缀
–suffix=SUFFIX 在 payload 上加个后缀
–tamper=TAMPER 使用 tamper
Detection
–level=LEVEL 测试级别:2 检测 cookie,3 检测 User-Agent/Referer (1-5, default 1)
–risk=RISK 风险级别:2 会加上大量时间盲注测试,3 会加上 OR 类型的布尔盲注 (1-3, default 1)
Techniques
–technique=TECH… 注入类型 (default “BEUSTQ”,可改成 EU 试试)
–time-sec=TIMESEC 设置时间盲注延迟的时间 (default 5)
–union-cols=UCOLS 指定 union 查询的列数
–dns-domain=DNS… Domain name used for DNS exfiltration attack
B:布尔型盲注
E:报错盲注
U:联合查询注入
S:堆查询注入
T:时间盲注
Q:内联查询注入
Enumeration
这个基本都明白
-a, --all Retrieve everything
-b, --banner Retrieve DBMS banner
–current-user Retrieve DBMS current user
–current-db Retrieve DBMS current database
–hostname Retrieve DBMS server hostname
–is-dba Detect if the DBMS current user is DBA
–users Enumerate DBMS users
–passwords Enumerate DBMS users password hashes
–privileges Enumerate DBMS users privileges
–roles Enumerate DBMS users roles
–dbs Enumerate DBMS databases
–tables Enumerate DBMS database tables
–columns Enumerate DBMS database table columns
–schema Enumerate DBMS schema
–count Retrieve number of entries for table(s)
–dump Dump DBMS database table entries
–dump-all Dump all DBMS databases tables entries
–search Search column(s), table(s) and/or database name(s)
–comments Check for DBMS comments during enumeration
–statements Retrieve SQL statements being run on DBMS
-D DB DBMS database to enumerate
-T TBL DBMS database table(s) to enumerate
-C COL DBMS database table column(s) to enumerate
-X EXCLUDE DBMS database identifier(s) to not enumerate
-U USER DBMS user to enumerate
Brute force
以下情况,无法直接读取表名
mysql 版本 < 5.0,没有
Access 的数据库,系统表 MSysObjects 不可读
其他权限问题
这时候就需要采用字典爆破了。
–common-tables 爆破表名
–common-columns 爆列名
–common-files 爆文件
File system access
–file-read=FILE… 读文件
–file-write=FIL… 写文件
tamper
-v 参数
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
0x03、文件相关
修改最大线程数
cd /usr/local/Cellar/sqlmap/1.1.7/libexec/lib/core
open settings.py
然后查找 MAX_NUMBER_OF_THREADS,修改成自己想要的值即可。
目录
tamper 脚本位置
/Users/v/sqlmap/tamper
random-agent
/Users/v/sqlmap/data/txt/user-agents.txt