目录
一、描述
提交登录表单,截断并修改靶机的响应包,绕过登陆验证。
二、环境(宝塔面板搭建简单,自行百度完成)
机器 | 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界面成功跳转到登入成功界面,实现前端任意用户登入绕过
四、修复建议
将前端验证改为后端验证