所有你见过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. python打包命令

    打包成exe方法 (1)切换到该文件夹 (2)pyinstaller -F py文件 (py文件要英文才行) -F 生成单个可执行文件 -w 去掉控制台窗口 -p 自定义需要加载的类路径 -i 可执行 ...

  2. Manacher || P4555 [国家集训队]最长双回文串 || BZOJ 2565: 最长双回文串

    题面:P4555 [国家集训队]最长双回文串 题解:就.就考察马拉车的理解 在原始马拉车的基础上多维护个P[i].Q[i]数组,分别表示以i结尾最长回文子串的长度和以i开头的最长回文子串的长度 然后就 ...

  3. pull request的使用

    在git中,不少开发者对自己的提升非常看重,github中的开源项目就是一个非常好的学习资料. github中的开源项目并不是完全正确的,而成为项目贡献者是一件值得骄傲的事情. 所以如何才能对开源项目 ...

  4. 浅析拯救小矮人的 nlogn 算法及其证明

    浅析拯救小矮人的 nlogn 算法及其证明 题型简介: 有 $ n $ 个人,第 $ i $ 个人身高 $ a_i $ 手长 $ b_i $ ,他们为了从一个高为 $ H $ 的洞中出去,决定搭人梯. ...

  5. H5 FormData对象

    FormData对象 2018年01月08日 14:31:53 阅读数:2635 FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台. 在使用aj ...

  6. [原创]Laravel 基于redis队列的解析

    目录 参考链接 本文环境 为什么使用队列 Laravel 中的队列 分发任务 任务队列 Worker Last-Modified: 2019年5月10日11:44:18 参考链接 使用 Laravel ...

  7. C++fread/fwrite的基础用法

    前言 fread是吼东西 应某人要求(大概)科普一下 fread #include <iostream> #include <cstdlib> #include <cst ...

  8. js数字每3位加一个逗号

    if(typeof val ==="number"){ var str = val.toString(); ? /(\d)(?=(\d{})+\.)/g : /(\d)(?=(?: ...

  9. HDU 6287 Just h-index

    Time limit 3000 ms Memory limit 132768 kB OS Windows Source CCPC2018-湖南全国邀请赛-重现赛(感谢湘潭大学) 中文题意 一个序列,每 ...

  10. Internet History, Technology, and Security(week4)——History: Commercialization and Growth

    Explosive Growth of the Internet and Web: The Year of the Web 1994年后,由NCSA的老员工们构成的Netscape(网景)的成立.Ne ...