DVWA Brute Force 暴力破解全等级分析及实践:
Low:
查看源码:
源码中暴露的问题:
1.GET 登录不够安全,一般使用 POST 方式进行登录
2.用户名和密码都没有进行过滤
设置代理,Burp suite抓包
送到intruder:
Payload set 1载入字典:
Payload set 2载入字典:
爆破结果:
爆破成功:
admin———password
ADMIN——–password
Medium:
查看源码:
1.源码登录逻辑没有太大变化,登录失败会延时两秒,导致暴破速度会慢一些。
2.使用了mysqli_real_escape_string()函数对用户输入进行了过滤。
载入字典后攻击:
查看response包:
High:
查看源码:
从源码中发现的问题:
相比low和medium等级,增加了对token的检测
1.抓包
2.选择攻击模式Pitchfork:
3.Payload set 1载入字典:
4.在Payload set 2 中 token 值选择使用 Recursive grep(递归查询:从response中提取数据 user_token 的,然后去替换我们爆破的值)。
设置 Options,Request Engine 的线程设置为 1 ,同时需要设置 Grep – Extract ,点击 Add ,在弹出的页面点击 Refetch response ,将其中 token 的值选中,便会自动选择范围;Redirections 选择Always;在Payloads中的“Initial payload for first request”添加初始值。
Impossible:
分析源码(源码较长,就不贴图了):
1.更改为POST传参
2.对token有检测
3.对用户名密码检查过滤
4.使用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是破坏sql语句结构执行恶意的sql命令
这里扩展一下pdo:
MySQL pdo预处理能防止sql注入的原因:
1、先看预处理的语法
$pdo->prepare('select * from biao1 where id=:id'); $pdo->execute([':id'=>4]);
2、语句一,服务器发送一条sql给mysql服务器,mysql服务器会解析这条sql。
语句二,服务器发送一条sql给mysql服务器,mysql服务器不会解析这条sql,只会把execute的参数当做纯参数赋值给语句一。哪怕参数中有sql命令也不会被执行,从而实现防治sql注入。
5.登陆失败后会随机延时2-4秒
6.增加了登陆失败锁定机制:3次失败锁定15分钟
防护总结
加登录验证码等干扰因素。
添加防错误机制
验证token
过滤对用户的传参
来源:freebuf.com 2021-06-25 11:30:41 by: wakemeup
请登录后发表评论
注册