Sqlmap
目录
sqlmap支持五种不同的注入模式:
l 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
l 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
l 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
l 联合查询注入,可以使用union的情况下的注入;
l 堆查询注入,可以同时执行多条语句的执行时的注入。
1.1 sqlmap的使用
判断是否存在sql注入,和类型
类型:
-
报错注入
-
盲注
1.2sqlmap的参数
SQLMap1.输出详细程度2.目标参数3.请求参数4.注入参数5.检测参数6.技术参数7.枚举参数8.tamper脚本
1.输出详细参数
-v 参数用来指定输出数据的详细程度,一共七个等级:0~6(默认为1,可以用-vv代替-v 2)0:只输出 Python 出错回溯信息,错误和关键信息1:增加输出普通信息和警告信息2:增加输出调试信息3:增加输出已注入的 payloads4:增加输出 HTTP 请求5:增加输出 HTTP 响应头6:增加输出 HTTP 响应内容
2.目标参数
-d直连数据库,例如 python -sqlmap.py -d "mysql://root:root@192.168.0.1:3306/testdb"-uURL,指定需要检测的目标url-l从Burp代理日志文件中解析目标地址-m从文本文件中批量获取目标-r从文件中读取 HTTP 请求--purge清除历史缓存--flush-session清除上次扫描的缓存
3.请求参数
--method=METHOD强制使用提供的 HTTP 方法(例如:PUT)--data=DATA使用 POST 发送数据串;--data="id=1&user=admin"--param-del=";"使用参数分隔符,--data="id=1;user=admin"--cookie=COOKIE指定 HTTP Cookie--drop-set-cookie忽略 HTTP 响应中的 Set-Cookie 参数--user-agent=AGENT指定 HTTP User-Agent--random-agent使用随机的 HTTP User-Agent,随机从 ./txt/user-agents.txt 选取--referer=REFERER指定 HTTP Referer-H HEADER设置额外的 HTTP 头参数(例如:"X-Forwarded-For: 127.0.0.1")--headers=HEADERS设置额外的 HTTP 头参数,必须以换行符分隔(例如:"Accept-Language: fr\nETag: 123")--delay=10设置每个 HTTP 请求的延迟秒数--safe-freq=SAFE每访问两次给定的合法 URL 才发送一次测试请求
4.注入参数
-p指定需要测试的参数--skip=SKIP指定要跳过的参数--dbms=DBMS指定 DBMS 类型(例如:MySQL)--os=OS指定 DBMS 服务器的操作系统类型--prefix=PREFIX注入 payload 的前缀字符串--suffix=SUFFIX注入 payload 的后缀字符串--tamper=TAMPER用给定脚本修改注入数据
5.检测参数
用于指定检测的级别以及风险的参数:--level:指定检测级别,有五个等级,等级越高检测范围越大(默认为1)--level 1检测Get和Post--level 2增加检测HTTP Cookie--level 3增加检测User-Agent和Referer级别4和5会对更大范围的payload进行检测--risk:风险程度,有3个等级(默认为1)--risk 2会在默认的检测上添加大量时间型盲注语句测试--risk 3会在原基础上添加OR类型的布尔型盲注
6.技术参数
--technique=使用的 SQL 注入技术(默认为“BEUSTQ”)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)Q:内联查询注入( inline Query injection)--time-sec=TIMESEC 设置延时注入的时间(默认为 5)--second-order=设置二阶响应的结果显示页面的 URL(该选项用于二阶 SQL注入)
7.枚举参数
-a, --all获取所有信息、数据-b, --banner 获取banner,返回数据库的版本号--current-user 获取当前用户--current-db 获取当前数据库--hostname 获取服务器的主机名--is-dba 探测当前用户是否为 DBA(数据库管理员)--users 枚举出所有用户--passwords 枚举出所有用户的密码哈希--privileges 枚举出所有用户特权级--roles 枚举出所有用户角色--dbs枚举出所有数据库--tables 枚举出数据库中的所有表--columns 枚举出指定表中的所有列--schema 枚举出所有模式--count 获取数据表数目--dump 导出数据库表项--stop 10 只取前10行数据-D DB 指定要枚举的数据库-T TBL 指定要枚举的数据表-C COL 指定要枚举的数据列--sql-query=QUERY 指定要执行的 SQL 语句--sql-shell调出交互式 SQL shell
8.tamper
--tamper= "模块名"apostrophemask将单引号 url 编码apostrophenullencode将单引号替换为宽字节 unicode 字符base64encodebase64 编码between将大于符号和等号用 between 语句替换,用于过滤了大于符号和等号的情况bluecoat用随机的空白字符代替空格,并且将等号替换为 like ,用于过滤了空格和等号的情况charencode用 url 编码payloadcharunicodeencode用 unicode 编码 payload
1.2.1sqlmap常用的参数
python sqlmap.py -u url --users #列出所有用户python sqlmap.py -u url --current-user #列出当前用户python sqlmap.py -u url --is-dba #查看当前用户是否为数据库管理员python sqlmap.py -u url --dbs #列出所有数据库python sqlmap.py -u url --current-db #查看当前数据库python sqlmap.py -u url -D "数据库名称" --tables #查表名python sqlmap.py -u url -D "数据库名" -T "表名" --colunms #查列名python sqlmap.py -u url -D "数据库名" -T "表名" -C "列名" --dump #查询记录python sqlmap.py -u url --data "POST数据" #POST请求注入python sqlmap.py -r r.txt #将整个请求数据包保存为r.txt进行注入
1.3sqlmap的更多用法
-
获取数据库用户列表
-
上传木马文件,在对系统有控制权限之后 (一句话木马) --os-shell 执行操作系统的命令
-
绕过waf安全狗,识别可以使用kali工具wafw00f 参数绕过 (匿名注入,HTTP头部注入)指定脚本绕过 sqlmap会提供脚本
-
探测等级和危险等级
-
读取服务器的文件 上传文件