所有你见过XSS行动在这一点上,但我们来回顾一下今天我们要讨论的XSS类型:

反射型XSS --  来自用户的输入将直接返回到浏览器,从而允许注入任意内容  【浏览器输入,马上到服务器上,再反射回来直接生效】

存储型XSS -- 来自用户的输入存储在服务器上(通常存储在数据库中),稍后返回时不需要进行适当的转义 【保存到服务器上,以后触发】

DOM XSS -- 来自用户的输入无需适当处理就插入到页面的DOM中,从而支持插入任意节点 【存在JavaScript代码控制DOM】

利用或减轻xss的第一步很简单:找到xss

那么,我们能做些什么来确定,比如说,一个反射的输入是脆弱的呢?

对于每个输入,我都遵循一个相当简单的心理清单:

1.找出它的去向:它是否嵌入到标签属性中?它是否嵌入到脚本标记中的字符串中?

2.找出任何特殊的处理方法:url会像第1级中的文章一样变成链接吗?

3.弄清楚特殊字符是如何处理的:输入类似 '<>:;”

通过这三个步骤,您将知道给定的输入是否容易受到XSS的攻击。

此时,存储的XSS和反射的XSS之间的区别变得很明显:

在POST的情况下,rXSS漏洞本质上依赖于可利用的CSRF漏洞。

如果您的rXSS仅存在于GET中,那么您没问题,但是您依赖于CSRF。

案例1
在特殊字符测试期间,您会注意到尖括号在没有编码的情况下传递,并且您的输入显示在文档的文本节点中。

在这种情况下,像<script> alert(1); </ script>这样的简单有效负载几乎肯定会起作用。

在极少数情况下,WAF或其他过滤可能会检测脚本标记并阻止执行。

第一种情况的一个密切相关的变体是当您的输入反映在标签属性中时。

在这种情况下,您的首要任务是打破属性,但在大多数情况下,您根本不需要保留标记 - 这意味着不需要尖括号。

案例2

现在我们如何执行代码?好吧,有很多可以触发的DOM事件。

在这种情况下,一个好的是onmouseover,例如  http://"onmouseover="alert(1);

给你<a href="http://"onmouseover="alert(1);"> ...

现在当受害者盘旋在该链接上时,你有javascript执行。

在那一点上,你已经超出了属性!但你不能留下标签和空格会结束“URL”,那么我们能做什么呢?

要意识到的一件重要事情是,在属性的结束引用之后不需要空格。

标签<a href="http://foo.com"style="...">完全有效。

案例3

如果您看到您的输入反映在脚本标记中,则有多种方法可能会出错。

让我们使用以下示例:<script> var token ='user input here'; </ script>

普通的HTML编码无法正确缓解这种情况,原因有两个:

1.HTML实体不会在javascript中解析,这意味着输入将是错误的。

2.单引号很少编码为HTML实体。

以我们的示例为例,让我们看一下HTML编码和简单字符串转义下某些有效负载会发生什么。

HTML编码的有效负载:'; alert(1);'

给我们一个最终的脚本:<script> var token ='';alert(1); ''; </script>

意思是我们完全控制执行!

js字符串转义的有效负载:</script><script>alert(1);</script>

给我们提供了一个最终脚本:<script> var token ='</ script> <script> alert(1); </ script>'; </ script>

再次给我们完全控制。

防御措施

我们现在已经看到了3或4种不同的存储/反射XSS案例以及我们如何利用它们。

那么我们如何减轻它们?嗯,这比它看起来要复杂一点。

人们通常会说“只是逃避/编码!”,但我们已经看到,并不认识到这种情况很重要。

在第三种情况下,除了引号和反斜杠之外,它足以将转义字符串括起来。

I.E. 将<with \ x3c and>替换为\ x3e。

但是有很多情况下这还不够,例如 当您将整数值传递给DOM事件属性或脚本标记中的变量时。

通过设计缓解

除非绝对没有其他选项,否则用户控制的输入不应该在脚本标记中或DOM事件的属性内部结束。

虽然有可能减轻它(正如我们刚才讨论的那样),但正确缓解的可能性几乎为零。

您将采用多种不同的方式来减轻XSS。

在几乎所有与js相关的案例中,都会出错。

基于DOM的XSS

与rXSS / sXSS的不同之处在于它不依赖于服务器端的缺陷来将攻击者输入到页面中。

这意味着通过客户端上的易受攻击的JavaScript,攻击者可能会注入任意内容。

例如:

让我们看一个简单的页面,它根据哈希中指定的语言环境在页面中包含一个标志,例如。http://example.com/#en-us

有些人可能已经注意到它看起来就像一个rXSS漏洞,只是在客户端。

来自URL中散列的字符串直接插入到图像标签中,允许攻击者传递任何内容,例如

http://example.com/#"><script>alert(1);</script>

DOM XSS的核心问题在于它实际上有无数种方式可以实现,每种方式都需要不同的缓解:

将攻击者数据嵌入到eval / setTimeout / setInterval中需要字符串转义/过滤

将攻击者数据嵌入标记和属性需要HTML编码

innerHTML也是如此

所以尽管如此,我们如何概括缓解?

不要在页面上放置用户控制的数据!看起来很严格,但这是要走的路。 白名单非常具体的事情,例如 标志示例的有效语言环境列表。

如果必须将用户数据放入页面,则必须对特定上下文进行转义/编码。

强制浏览/不正当授权

好吧,他们几乎都是一回事。

在这两种情况下,您都无法正确授权访问资源,例如。 管理区域不受保护,或者您可以直接枚举请求中的值以访问其他用户的数据。

两者之间的界限非常好。

通常,当您谈论可识别的值(例如帖子ID和站点的其他部分,通常不是您的权限级别可用)时,将使用强制浏览(或直接对象引用)。

不要过分担心你使用的是什么;有些人将它们组合在“授权错误”(或auth-z,以区别于auth-n,身份验证)之下。

***意思是,知道情况就行,不用担心各种不一样的说法。

一个简单的例子可以在level1中找到。

帖子的永久链接功能使攻击者能够简单地枚举ID并访问系统中的每个帖子,而不仅仅是他们自己的帖子。

例如,我的一个是http://h101levels.appspot.com/levels/1/post?id=456

将id = 456更改为id = 464会给我一个来自其他用户的帖子。

这是强制浏览的一个例子。

除了改变我们看到的ID之外,我们还能找到auth-z错误吗?

测试应用程序时,最好的技术之一是作为最高权限用户执行每个操作,然后切换到权限较低的用户并重播这些请求,根据需要更改会话ID / CSRF令牌。 CSRF token

这是查找具有不正当授权检查的管理员级功能的好方法。

99%的情况下,应用程序不会以任何有意义的方式概括其访问级别,因此请确保测试您看到的每个入口点。

你永远不知道什么时候会有人受到伤害。

hacker101----XSS Review的更多相关文章

  1. XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

    本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...

  2. Cross-site Scripting (XSS) 阅读笔记

    本文源自 https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29 通过阅读和翻译,并按照自己的理解,整理成如下文档. 概述 XSS ...

  3. XSS检测工具 X5S/fiddler

    x5s http://xss.codeplex.com/ 5s是fiddler的插件, 协助XSS脚本攻击的穿刺性测试.  需要手动驱动. 安全编码,unicode字符变形,ut-8编码. 5s is ...

  4. Code Review Engine Learning

    相关学习资料 https://www.owasp.org/index.php/Code_review https://www.owasp.org/images/8/8e/OWASP_Code_Revi ...

  5. 前端代码质量保障之代码review

    经验丰富的程序员和一般程序员之间的最大区别,不仅体现在解决问题的能力上, 还体现在日常代码的风格上.掌握一门技术可能需要几月,甚至几周就够了. 好的习惯风格养成却需数年. 团队成员之间需要合作,代码需 ...

  6. XSS CSS Cross SiteScript 跨站脚本攻击

    XSS攻击及防御 - 高爽|Coder - CSDN博客 https://blog.csdn.net/ghsau/article/details/17027893 XSS又称CSS,全称Cross S ...

  7. hacker101教学笔记--introduction--the web in depth

    hacker101笔记 提前准备:运行java的环境 burp proxy(代理) firefox(浏览器) xss 可以控制参数,发送JavaScript到服务器,再从服务器反映到浏览器上面< ...

  8. Hacker101 CTF 学习记录(一)

    前言 苦力挖洞,靠运气赚点小钱.看着大佬严重,高危,再看看自己手上的低危,无危害默默流下了菜鸡的泪水 思路受局限,之前听学长推荐和同事聊到hacker101,因此通过hacker101拓展下漏洞利用思 ...

  9. 聊两句XSS(跨站脚本攻击)

    XSS(跨站脚本攻击),聊两句,五毛的. XSS的危害: 窃取Cookie,盗用用户身份信息 这玩意儿是大多数XSS的目标,也好解决,可以先治个标,直接设置HttpOnly=true ,即不允许客户端 ...

  10. 开发中Design Review和Code Review

    一.Design Review 详解 翻译为设计评审,也就是对需求设计进行审核,防止出现异常问题,例如下面的这些 可用性 外部依赖有哪些?如果这些外部依赖崩溃了我们有什么处理措施? 我们SLA是什么? ...

随机推荐

  1. Windows 实用软件

    Useful tool Listary Ditto Winsnap Quick Look Myper Splash GifCam ScreenToGif Free Download Manage Si ...

  2. [易学易懂系列|golang语言|零基础|快速入门|(一)]

    golang编程语言,是google推出的一门语言. 主要应用在系统编程和高性能服务器编程,有广大的市场前景,目前整个生态也越来越强大,未来可能在企业应用和人工智能等领域占有越来越重要的地位. 本文章 ...

  3. C#基础知识之DirectorySearcher 类

    活动目录(Active Directory)是从一个数据存储开始的,它采用了类似Exchange Server的数据存储,所以被称为Extensible Storage Service (ESS).其 ...

  4. <authentication> 元素

    <authentication> 元素 配置 ASP.NET 身份验证支持.该元素只能在计算机.站点或应用程序级别声明.如果试图在配置文件中的子目录或页级别上进行声明,则将产生分析器错误信 ...

  5. postman(二):详解在Pre-request Script中如何执行请求

    一.这里以Pre-request Script标签来介绍 postman提供了postman提供了一个"Send a request"代码段,他是已经封装好的发送请求的方法 一个& ...

  6. FAT12

    FAT12 is one of FAT file system families,mostly used on 1.44MB floppy disk. FAT 's full name is File ...

  7. React 应用设计之道 - curry 化妙用

    使用 React 开发应用,给予了前端工程师无限"组合拼装"快感.但在此基础上,组件如何划分,数据如何流转等应用设计都决定了代码层面的美感和强健性. 同时,在 React 世界里提 ...

  8. PKUSC2019颓废记

    Day -x \(THU\):"想过初审?gck" 我:"你说gck,那就gck⑧" 于是就来\(PKU\)碰碰运气了 Day 0 为了赶高铁起的很早. 颓了一 ...

  9. DUBBO原理、应用与面经总结

    研读dubbo源码已经有一段时间了,dubbo中有非常多优秀的设计模式和示例代码值得学习,但是dubbo的调用层级和方法链都较为繁杂,如果不对源码思路进行梳理则很容易忘却,因此总结一篇研读心得,从阅读 ...

  10. P4716 【模板】最小树形图

    题意 说一下我对朱刘算法的理解: 首先我们考虑树形图的性质:每个点除了根节以外都含有一条入边. 因此我们可以有一个贪心的想法:对每个点(除了根节点)找到一条最短的入边,但是这样会出现环,如下图: 我们 ...