Pikachu 通关攻略(更新)【靶场】

0x00 系统介绍

GitHub:https://github.com/zhuifengshaonianhanlu/pikachu

  • Burt Force(暴力破解漏洞)
  • XSS(跨站脚本漏洞)
  • CSRF(跨站请求伪造)
  • SQL-Inject(SQL注入漏洞)
  • RCE(远程命令/代码执行)
  • Files Inclusion(文件包含漏洞)
  • Unsafe file downloads(不安全的文件下载)
  • Unsafe file uploads(不安全的文件上传)
  • Over Permisson(越权漏洞)
  • …/…/…/(目录遍历)
  • I can see your ABC(敏感信息泄露)
  • PHP反序列化漏洞
  • XXE(XML External Entity attack)
  • 不安全的URL重定向
  • SSRF(Server-Side Request Forgery)
  • More…(找找看?..有彩蛋!)

0x01 暴力破解

概述

“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

  • 是否要求用户设置复杂的密码;
  • 是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
  • 是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
  • 是否采用了双因素认证;

对暴力破解的理解:暴力破解=连续性的尝试+字典+自动化。

其实就是去猜可能的密码,经过不断的试账号和密码,找出正确的账号密码,达到暴力破解的目的。

最重要的部分就是字典,一个好的字典可以大大加快破解速度。

基于表单的暴力破解

image-20231115203337593

尝试性登录,提醒用户名或密码不存在

image-20231115203431709

在响应界面返回一个登录失败的界面

image-20231115203647864

发送到 Intruder 模块

image-20231115203736801

使用 Cluster bomb 模式进行爆破,在 Payloads 中配置第一个变量和第二个变量的字典

  • Sniper模式逻辑:先将第一个变量也就是用户名替换,第二个变量不动。当第一个变量替换完之后,对第二个变量进行依次替换。直白一点就是说一个变,另外一个不变,第一个变完,变第二个。
  • Battering ram模式逻辑:所有变量进行同时同样的替换。就是说你变我也变,你变什么我也变什么。
  • Pitchfork模式逻辑:所有变量同时替换,但是各自变量替换各自的字典,同时进行,但是互不相干。替换时第一个变量的第一替换值对应第二个变量的第一个替换值,不进行排列组合,就是1对1,2对2。不会将密码进行随机的排列组合。
  • Cluster bomb模式逻辑:与Pitchfork模式逻辑类似,不同点是Cluster bomb模式会进行随机的排列组合。

image-20231115203901753

设置两个字典

image-20231115203921378

根据返回数据包的长度进行判断是否成功

image-20231115203945238

用破解出的账号密码登录

login success

image-20231115204115525

验证码绕过(on server)

随机输入账号和密码,相应验证码,用 burpsuite 抓包,登录失败,验证码发生变化,将数据包发送到 Repeater 进行判断

将验证码设置为空,运行,出现错误提示,验证码不能为空

随机输入验证码,运行,出现错误提示,验证码不正确

经过判读,发现后台会对验证码进行校验,接下来对验证码是否在后台过期进行验证

获取一个新的验证码,返回数据包中,运行,提示用户名或密码不正确,接着修改账号和密码,验证码不变,运行,结果不变,说明验证码可重复使用

将数据包发送到 Intruder 模块,设置变量用户名和密码,验证码固定,使用 Cluster bomb 模式,进行爆破

image-20231115221340013

总结:

  • 验证码在后台不会过期,导致可以被长期使用
  • 验证码校验不合格,逻辑出现问题
  • 验证码设计过于简单和有规律

验证码绕过(on client)

验证码的作用:

  • 防止登录暴力破解;

  • 防止机器恶意注册;

验证码大概的的认证流程:

  • 客户端 request 登录页面,后台生成验证码:

  • 后台使用算法生成图片,并将图片 response 给客户端;

  • 同时将算法生成的值全局赋值存到 SESSION 中;

  • 校验验证码:

  • 客户端将认证信息和验证码一同提交;

  • 后台对提交的验证码与 SESSION 里面的进行比较;

  • 客户端重新刷新页面,再次生成新的验证码:

  • 验证码算法中一般包含随机函数,所以每次刷新都会改变;

随机输入账号和密码,输入相应验证码,使用 burpsuite 抓包

image-20231115212646916

​ 登录失败,验证码发生变化

image-20231115212815566

查看源代码,发现验证码是由 js 生成,每点击一次函数运行一次,生成验证码

<script language="javascript" type="text/javascript">
    var code; //在全局 定义验证码
    function createCode() {
        code = "";
        var codeLength = 5;//验证码的长度
        var checkCode = document.getElementById("checkCode");
        var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的

        for (var i = 0; i < codeLength; i++) {
            var charIndex = Math.floor(Math.random() * 36);
            code += selectChar[charIndex];
        }
        //alert(code);
        if (checkCode) {
            checkCode.className = "code";
            checkCode.value = code;
        }
    }

    function validate() {
        var inputCode = document.querySelector('#bf_client .vcode').value;
        if (inputCode.length <= 0) {
            alert("请输入验证码!");
            return false;
        } else if (inputCode != code) {
            alert("验证码输入错误!");
            createCode();//刷新验证码
            return false;
        }
        else {
            return true;
        }
    }


    createCode();
</script>

image-20231115213215157

将数据包发送到 Repeater 模块中,对验证码进行判定,判断后台是否对验证码进行校验,尝试多次后发现返回的都是用户名或密码不存在,没有提示验证码错误

image-20231115214544615

可以判断虽然验证码被提交,但是后台并没有验证,接下来的流程和基于表单的流程一样,将数据包发送到 Intruder 中,用 Cluster bomb 模式修改变量,因为验证码没有用,所以只选择用户名和密码

image-20231115215032827

总结:

  • 使用前端 js 实现验证码
  • 将验证码在 cookie 中泄露
  • 将验证码在前端源代码中泄露

token 防爆破

会话令牌(session token)本身并不直接用于防止密码爆破攻击。它主要用于验证用户身份或防止跨站请求伪造(CSRF)攻击。

//生成一个token,以当前的时间+一个5位的前缀
function set_token(){
    if(isset($_SESSION['token'])){
        unset($_SESSION['token']);
        }
        $_SESSION['token']=str_replace('.','',uniqid(mt_rand(10000,99999),true));
  }

暴力破解防范措施

密码爆破攻击是一种尝试猜测用户密码的攻击方式。攻击者通过尝试多个可能的密码组合,直到找到正确的密码为止。要防止密码爆破攻击,可以采取以下措施:

  • 强密码策略:确保用户使用足够强度的密码,包括字母、数字和特殊字符的组合,并限制密码长度。
  • 密码锁定:在一定的尝试次数后,锁定用户账户,防止攻击者继续进行密码尝试。
  • 延迟响应:在每次密码尝试失败后,增加一定的延迟时间,以防止攻击者快速尝试多个密码。
  • 双因素认证:要求用户除了密码之外,还要提供额外的身份验证因素,例如手机验证码或指纹识别。

这些措施可以增加密码爆破攻击的难度,提高系统的安全性。会话令牌主要用于验证用户身份和防止CSRF攻击,可以与上述措施结合使用,但单独的会话令牌并不能完全防止密码爆破攻击。
的尝试次数后,锁定用户账户,防止攻击者继续进行密码尝试。

  • 延迟响应:在每次密码尝试失败后,增加一定的延迟时间,以防止攻击者快速尝试多个密码。
  • 双因素认证:要求用户除了密码之外,还要提供额外的身份验证因素,例如手机验证码或指纹识别。

这些措施可以增加密码爆破攻击的难度,提高系统的安全性。会话令牌主要用于验证用户身份和防止CSRF攻击,可以与上述措施结合使用,但单独的会话令牌并不能完全防止密码爆破攻击。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值