pikachu-暴力破解源码分析及修复

写在前面:这个系列主要想写漏洞的源码分析以及修复,渗透测试方法有很多师傅已经写的比较详细了,我只简单写一下攻击的思路。
pikachu项目github链接:https://github.com/zhuifengshaonianhanlu/pikachu
pikachu通关攻略 https://blog.csdn.net/weixin_43899561?t=1

暴力破解源码分析

1.基于表单的暴力破解

在这里插入图片描述
没有验证码,什么保护措施都没做,直接burp抓包,转发到Intruder模块,爆破。
后端实现逻辑:接收前端post提交的用户名和密码,在数据库做查询"select * from users where username=? and password=md5(?)",若查询行数大于0,则login success!没有任何控制措施
在这里插入图片描述

2.验证码绕过(on server)在这里插入图片描述

在表单的基础上加上了字母和数字结合的验证码,burp抓包,输入正确的验证码,试着爆破用户名和密码,爆破成功。
后端实现逻辑:用户名、密码、验证码都不为空的前提下,加入了验证码验证机制,具体实现是判断strtolower($_POST[‘vcode’]) 和 strtolower($_SESSION[‘vcode’])是否相等。验证完成后,并没有及时销毁$_SESSION[‘vcode’],这才导致了输入一遍验证码,爆破用户名和密码就可以爆破成功。
在这里插入图片描述
接下来我们看看验证码是怎么实现的,验证码由后端showvcode.php文件产生,且点击图片会自动刷新。
在这里插入图片描述
跟进…/…/inc/showvcode.php
在这里插入图片描述

可知$_SESSION[‘vcode’]=vcodex();,$_SESSION[‘vcode’]是有vcodex()函数产生赋值的。vcodex()函数return的字符串即为小写字母和数字中任意的六个组合。
在这里插入图片描述
现在思路就很清楚了,burp重复发包,并没有刷新页面,意味着$_SESSION[‘vcode’]一直是第一次产生的值,则strtolower($_POST[‘vcode’]) 和 strtolower($_SESSION[‘vcode’])一直相等,这为爆破提供了条件。应该在验证完一次后就销毁($_SESSION[‘vcode’]变量,这个后面说。

3。验证码绕过(on client)

在这里插入图片描述
审查元素发现是前端验证码,前端很容易,前端的保护措施基本就没啥用,就直接爆破了。
后端的实现逻辑:后端是基本的表单处理,保护措施在前端。
在这里插入图片描述
前端验证机制:
产生验证码:数字和大写字母中随机产生五位的验证码
在这里插入图片描述
在这里插入图片描述
表单提交时前端先做验证,若validate()函数返回值为true,表单才会提交。验证条件即为验证码框里填写的字符串是否和createCode()函数产生的一样。把验证机制交给前端是不安全的,输入一遍正确的验证码即可爆破用户名和密码,甚至注销掉表单提交时的验证函数等等,黑客可以轻松绕过,这为爆破提供了条件。

在这里插入图片描述
在这里插入图片描述

4.token防爆破

在这里插入图片描述
burp测试以及观察请求包和返回包,看到由token字段,并且可以找到token在返回包里,虽然是hidden属性,但还是返回到前端了,还是burp抓包,将token参数设置为上次返回包里返回的token字段,即可爆破。
后端的实现逻辑:验证条件为$_POST[‘token’]==$_SESSION[‘token’],我们看看这两个值是怎么产生的。
在这里插入图片描述
$_SESSION[‘token’]是加载页面就产生的,通过set_token()函数,这个函数将 $_SESSION[‘token’]赋值为当前的微妙时间+一个五位数的前缀。

在这里插入图片描述

而$_POST[‘token’]是嵌在前端隐藏的一个input里, P O S T [ t o k e n ] _POST['token']就等于 _SESSION[‘token’]。
由以上可以知道,token是一直变化的,这为爆破提供了难度,但是不管怎样,token值既然已经返回到前端,就可以得到返回的token值进行爆破。

在这里插入图片描述

暴力破解修复

修复建议:
1.登陆错误次数过多锁定账户
2.登陆错误次数过多锁定ip
3.验证码,记得及时刷新
4.不易自动识别的验证码,比如中文汉字,移动滑块,点击字母等等

根据pikachu系统我选择了验证码及时刷新+登陆错误次数过多锁定ip 5分钟的两种方式结合(当时实际情况中锁定时间会更长)
后端验证码及时刷新:(即在验证码绕过(on server)中验证完就销毁$_SESSION[‘vcode’])
在这里插入图片描述
登陆错误次数过多锁定ip 5分钟(这里是以简单的表单为基础,添加的锁定ip的功能)

后端验证:
在这里插入图片描述
获取ip:
在这里插入图片描述
错误五次锁定ip 5分钟

在这里插入图片描述
验证用户名和密码
在这里插入图片描述
admin.php:
在这里插入图片描述
在这里插入图片描述

发布了27 篇原创文章 · 获赞 8 · 访问量 8259

猜你喜欢

转载自blog.csdn.net/weixin_41652128/article/details/95370319