DVWA Brute Force 暴力破解全等级分析及实践 – 作者:wakemeup

DVWA Brute Force 暴力破解全等级分析及实践:

Low:

查看源码:

1624591301_60d54bc5056bdec73918a.png!small

源码中暴露的问题:

1.GET 登录不够安全,一般使用 POST 方式进行登录

2.用户名和密码都没有进行过滤

1624591332_60d54be4e3275f55989b4.png!small

设置代理,Burp suite抓包

1624591340_60d54bec573000ebef479.png!small

送到intruder:

1624591346_60d54bf24434f0f9702b8.png!small

Payload set 1载入字典:

1624591354_60d54bfa88e797b1b072f.png!small

Payload set 2载入字典:

1624591361_60d54c01706dfca04749d.png!small

爆破结果:

1624591371_60d54c0be29b20cddbd17.png!small

爆破成功:

admin———password

ADMIN——–password

Medium:

查看源码:

1624591389_60d54c1d3abbb72cef56f.png!small

1.源码登录逻辑没有太大变化,登录失败会延时两秒,导致暴破速度会慢一些。

2.使用了mysqli_real_escape_string()函数对用户输入进行了过滤。

载入字典后攻击:

1624591397_60d54c25cfbbb90024d4a.png!small

查看response包:

1624591404_60d54c2c8883e352791c8.png!small

1624591411_60d54c3363acb4bdd4128.png!small

High:

查看源码:1624591429_60d54c45aefdfaad4dad2.png!small

1624591454_60d54c5e9237ad4074667.png!small

从源码中发现的问题:

​ 相比low和medium等级,增加了对token的检测

1.抓包

1624591465_60d54c69a6f6c2d05bb92.png!small

2.选择攻击模式Pitchfork:

1624591473_60d54c716875c6d3365cd.png!small

3.Payload set 1载入字典:

1624591480_60d54c780127a8807a6a0.png!small

4.在Payload set 2 中 token 值选择使用 Recursive grep(递归查询:从response中提取数据 user_token 的,然后去替换我们爆破的值)。

1624591486_60d54c7e5d0c7c1834b41.png!small

1624591496_60d54c881befd77e41beb.png!small

设置 Options,Request Engine 的线程设置为 1 ,同时需要设置 Grep – Extract ,点击 Add ,在弹出的页面点击 Refetch response ,将其中 token 的值选中,便会自动选择范围;Redirections 选择Always;在Payloads中的“Initial payload for first request”添加初始值。

1624591516_60d54c9c08fbbe0695e9a.png!small

1624591523_60d54ca309814fe09223b.png!small

1624591539_60d54cb3d9f79a78b717b.png!small

Impossible:

分析源码(源码较长,就不贴图了):

1.更改为POST传参

2.对token有检测

3.对用户名密码检查过滤

4.使用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是破坏sql语句结构执行恶意的sql命令

1624591553_60d54cc1ce433c96deebf.png!small

这里扩展一下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

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论