SQLmap 常用命令
这里是一些我自己用过的或者感觉上回比较实用的一些sqlmap参数命令,有新的会不断补充
简介
SQLMap 是一个开源的渗透测试工具,可以用来进行自动化检测,利用 SQL 注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
sqlmap支持五种不同的注入模式:
- 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
- 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
- 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
- 联合查询注入,可以使用union的情况下的注入。
- 堆查询注入,可以同时执行多条语句的执行时的注入。
用法
- 首先是sql自带的帮助文档
1 | sqlmap -hh |
- 如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
1 | 0、只显示python错误以及严重的信息。 |
如果你想看到sqlmap发送的测试payload最好的等级就是3。
目标选定
直接连接到数据库
参数:-d
1 | sqlmap -d "mysql://admin:admin@127.0.0.1:3306/db" |
对单个数据库运行sqkmap
指定URL
参数:-u 或者 –url
1 | sqlmap -u "http(s)://targeturl:[port]/[...]" |
请求方式
HTTP数据
参数:–data
1 | sqlmap -u "http(s)://targeturl:[port]/[...]" --data="id=1" |
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数
HTTP cookie头
参数:–cookie,–load-cookies,–drop-set-cookie
这个参数在以下两个方面很有用:
web应用需要登陆的时候。
你想要在这些头参数中测试SQL注入时。
可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。
在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。
如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。
当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。
HTTP User-Agent头
参数:–user-agent,–random-agent
用于指定 user-agent ,当使用 –random-agent 时,sqlmap会从./txt/user-agents.txt获取参数。
当–level的参数设定为3或者3以上的时候,sqlmap会尝试注入User-Agent参数。
HTTP Host头
参数:–host
用于指定 host 的值。
HTTP Referer头
参数:–referer
sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入。
额外的HTTP头
参数:–headers
可以通过–headers参数来增加额外的http头。
探测
指定数据库类型
参数:–dbms
默认sqlmap会自动探测web应用后端的数据库是什么
风险等级
参数:–risk
设置测试用例的类型,默认是1, 会使用常见的注入用例,2:加入基于时间的盲注, 3: 增加基于OR的测试用例,在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。
注入技术
注入所使用的类型
参数:–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(基于时间延迟注入)
列数据
列出数据库系统的数据库
参数:–dbs
当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库。
列举数据库表
参数:–tables
当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出一个特定数据的所有表。
如果你不提供-D参数来列指定的一个数据的时候,sqlmap会列出数据库所有库的所有表。
列举数据库表中的字段
参数:–columns
当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出指定数据库表中的字段,同时也会列出字段的数据类型。
如果没有使用-D参数指定数据库时,默认会使用当前数据库。
获取表中数据个数
参数:–count
有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。
获取整个表的数据
参数:–dump
如果当前管理员有权限读取数据库其中的一个表的话,那么就能获取这个表的所有内容。
使用-D,-T参数指定想要获取哪个库的哪个表,不适用-D参数时,默认使用当前库。
通用
清除session
参数:–flush-session
会清空当前URL相关的session
清除查询结果
参数:–fresh-queries
清除之前的查询结果,进行重新请求操作。
其他参数
初级用户向导
参数:–wizard
面向初级用户的参数,可以一步一步交互式操作
- Post title:SQLmap 常用命令
- Post author:John_Frod
- Create time:2021-03-07 19:02:43
- Post link:https://keep.xpoet.cn/2021/03/07/SQLmap 常用命令/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.