前端任意用户登入逻辑漏洞

目录

一、描述

二、环境(宝塔面板搭建简单,自行百度完成)

三、漏洞复现

四、修复建议


一、描述

提交登录表单,截断并修改靶机的响应包,绕过登陆验证。

二、环境(宝塔面板搭建简单,自行百度完成)

机器

IP

内置组件

攻击机-kali

192.168.0.2

burpsuite渗透工具

靶机-centos7

192.168.0.3

宝塔面板(lamp框架也行)

2.1.准备项目文件index.html,login.php,test.html

index.html代码如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
    <h2>登录</h2>
    <form action="login.php" method="POST">
        <input type="text" name="username" placeholder="用户名" required><br><br>
        <input type="password" name="password" placeholder="密码" required><br><br>
        <input type="submit" value="登录">
    </form>
    <div id="login-result"></div>

    <script>
        // 监听表单提交事件
        document.querySelector('form').addEventListener('submit', function(e) {
            e.preventDefault(); // 阻止表单的默认提交行为

            // 创建XMLHttpRequest对象
            var xhr = new XMLHttpRequest();

            // 定义请求处理程序
            xhr.onreadystatechange = function() {
                if (xhr.readyState === XMLHttpRequest.DONE) {
                    if (xhr.status === 200) {
                        var response = JSON.parse(xhr.responseText);
                        if (response.result) {
                          //document.getElementById('login-result').textContent = '登录成功';
                          //账密匹对成功,就会跳转到test.html页面
                            window.location.href="test.html"    
                        } else {
                            document.getElementById('login-result').textContent = '登录失败,用户名或密码不正确,请重新输入!';
                        }
                    } else {
                        document.getElementById('login-result').textContent = '请求失败';
                    }
                }
            };

            // 设置请求参数
            var username = document.querySelector('input[name="username"]').value;
            var password = document.querySelector('input[name="password"]').value;
            var params = 'username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password);

            // 发送POST请求
            xhr.open('POST', 'login.php', true);
            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            xhr.send(params);
        });
    </script>
</body>
</html>
login.php代码如下
<?php
$username = $_POST['username'];
$password = $_POST['password'];

// 在这里进行登录验证,假设用户名为 "admin",密码为 "password"
if ($username === 'admin' && $password === 'password') {
    $result = true;
} else {
    $result = false;
}

// 返回登录结果
echo json_encode(['result' => $result]);
?>
test.html代码如下
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
<h1>欢迎admin用户成功登入!</h1>

</body>
</html>     

2.2在/www/wwwroot路径下新建文件夹test

cd /www/wwwroot

mkdir test

 

2.3 将index.html、login.php和test.html三个文件放入test目录下

 

2.4进入宝塔面板,点击网站,将网站目录修改为/www/wwwroot/test

 

三、漏洞复现

3.1打开kali攻击机,访问web站点http://192.168.0.3

 

3.2进入kali攻击机,启动burpsuite

3.3点击proxy模块,选择options,配置代理端口为8080

3.4浏览器代理设置,和burpsuite代理端口保持一致

3.5web表单中任意输入账密,并点击登录

注意:Intercept状态要为on

3.6点击Response to this request拦截响应包,然后点击forword进行转发

抓取响应包设置,选择proxy模块,点击options

3.7将result的结果修改为true

 

修改后

 

3.8点击forword进行重放响应包,发现成功访问了test.html文件,实现登入绕过

3.8再次点击forword,发现304状态码,也就是重定向到了test.html文件

3.9web界面成功跳转到登入成功界面,实现前端任意用户登入绕过

 

四、修复建议

将前端验证改为后端验证

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值