代码编织梦想

什么是XSS

XSS(cross site script)或者说跨站脚本是一种web应用程序的漏洞,恶意攻击者往web页面里插入恶意script代码,当用户浏览该页之时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。

跨站脚本漏洞风险

  • 盗取用户cookie,然后伪造用户身份登录,泄露用户个人身份及用户订单信息。
  • 操控用户浏览器,借助其他漏洞可能会导致对https加密信息的破解,导致登录传输存在安全风险。
  • 结合浏览器及其插件漏洞,下载病毒木马到浏览器的计算机上执行
  • 修改页面内容,产生钓鱼攻击效果,例如伪造登录框获取用户明文账号密码。

存储式XSS漏洞

什么是存储式XSS

存储式XSS是将代码持久化存储在服务器中。存储式XSS是当不可信的用户输入被处理并在没有任何验证的情况下保存在文件或数据库,同时该不可信的数据从存储中被获取,然后在没有编码或转义的情况下反射回响应文中,导致了永久性的每次存储数据反射回响应文代码就会在浏览器中执行的一种XSS漏洞。

存储式XSS的影响有:

  • 通过JavaScript获取用户的cookie,根据这个cookie窃取用户信息;
  • 重定向网站到一个钓鱼网站;
  • 重新更改页面内容,假定让客户输入用户名、密码,然后提交到黑客的服务器;
  • 生成蠕虫,迅速扩散到整个网站用户。
如何检测存储式XSS

攻击者向被攻击页面写入恶意代码的方法很多,最常见的就是在论坛或留言本中发帖时将html代码写入到被攻击页面中,此外在用户资料修改、签名、联系方式等地方也是攻击者写入html代码常用的地方,如果被攻击页面对用户输入过滤不严的话,就可以被攻击者写入类似如下的一段代码:

<script> alert('1')</script>

由于攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据。所以大部分的存储型XSS漏洞都是在表单提交上会发生的。针对这种特性,需要做的就是在应用程序任何有可能提交表单上进行验证

传统测试方式

最简单的方式是在任意可以输入的地方,输入<script>alert('1')</script>是否有如下的弹窗:
在这里插入图片描述

这表明存在XSS漏洞,这是最简单的XSS检测方式。如果在输入框进行XSS测试受挫后,可以使用img标签属性进行XSS测试:

<img src=javascript:alert('1')></img>
<img dynsrc=javascript:alert('1')></img>

除了img还可以使用div标签属性跨站,同样也是图片载入:

<div style="background-image:url(javascript:alert('1'))">

基于HTML标签属性的一些特点,即使javascript字符被过滤了,也可以使用其他方法,例如:通过构造错误属性,让浏览器执行特定的javascript代码:

<img src="knownsec" οnerrοr=alert('1')> 

即使上述方法被防住,也可以使用自行构造事件:

<font style="TEST:expression(alert('1'));">

除了font,还有table、a、ul等标签也可以利用

如何防范存储式XSS

在这里插入图片描述

浏览器解析顺序:HTML语言》CSS语言》JavaScript语言

浏览器解码顺序:HTML语言》URL编码》JavaScript编码

第一是对用户输入的特殊字符进行转义

对HTML中不可信字符进行HTML转义 :

原字符转译后字符
&&amp;
<&lt;
>&gt;
"&quot;
`&#x60;
&#x27;
&#x2F;

对于事件触发属性中的不可信字符串,先进行javascript转义 ,然后执行HTML转义,因为浏览器在执行JavaScript字符串解码前执行HTML属性解码。对于JavaScript中的非可信数据,进行JavaScript字符串转义并且总是将属性加上引号,无论是(’ 或 “),但不要使用反引号(`):

  • 除了字母数字字符,以格式转义小于256的所有字符,以防开关的值伸到脚本中或另一个属性。不要使用类似的转义符号,因为引号符号可能被HTML属性解析器在第一次运行被匹配。这些转义符号也容易受到“转义已转义”的攻击,攻击者发送和漏洞代码转为使得可以成为引号。如果事件触发属性被正确引号,需要通过相应的引号来闭合。不带引号的属性可以被分隔为许多符号,包括另外,一个闭合标签可以闭合脚本块,即使它是一个带引号的字符串。需要注意的是,HTML解析器在JavaScript解析器。

对于HTML属性中的URL路径进行转义而不是完整的URL。总是为属性加上引号,无论是(’ 或 "),但不要使用反引号(`)。绝不允许或包含格式像或或者他们的组合,如:

  • 除了字母数字符号,用格式转义所有ASCII值小于256的字符。如果或属性被正确的引号起来,突破需要对应的引号。未被引号属性可以使用许多字符进行突破,包括和。这种情况下,实体编码是无用的。

对HTML样式属性内的不可信字符串先做CSS字符串转义,然后进行HTML转义,因为解析器的解析顺序是先HTML解析器然后再CSS解析器。总是给属性加上引号,如本例子中的风格属性加上("),CSS字符串加上(‘),不要使用反引号(`)。为在CSS中的不可信字符串做CSS字符串转义。也要确保不可信字符串在引号(’ 或 ”)之间,不要使用反引号(`)。也不要允许expression以及它的复杂组合,如(expre/**/ssion)。

  • 除了字母数字字符,用格式转义所有ASCII值小于256的字符。不要使用任何类似的转义符号,因为引号符合可能被HTML属性解析器在第一次运行被匹配。这些转义字符也容易受到“转义已转义”的攻击,攻击者发送和漏洞代码转为使得可以成为引号。如果属被正确引号,需要通过相应的引号来闭合。不带引号的属性可以被分隔为许多符号。同时,标签会关闭风格块,即使是在一个被引号的字符串内。请注意,HTML解析器在CSS解析器前运行。

对于JavaScript字符串中不可信的HTML,先执行HTML转义然后执行JavaScript字符串转义,保持这个顺序。 常用防止XSS注入方法:

  • 创建个Web应用程序应该允许来自用户的标签和属性的白名单。黑名单可以很容易的被绕过。

  • 使用UTF-8为默认的字符编码以及设置content为text/html。

  • 不要将用户可以控制的文本放在 标签前。通过使用不同的字符集注射可以导致XSS。

  • 使用**告诉你的浏览器遵循标准进行HTML、CSS的渲染以及如何执行**。

常用WEB漏洞扫描工具对存储式XSS漏洞扫描方法

snuck是一款自动化的漏洞扫描工具,它可以帮助你扫描web应用中存在的XSS漏洞。snuck基于Selenium,并且支持Firefox,Chrome和IE浏览器。

snuck与传统的Web安全扫描工具有显著的区别,它会尝试利用特殊的注入向量来破坏网站的XSS过滤器,并通过这种方法来提高,并通过这种方法提高漏洞的检出成功率。基本上说,snuck所采用的检测方法与iSTAR漏洞扫描工具的检测方法较为相似,但snuck针对的是特定的XSS过滤器。通常都是利用收集的各类XSSpayloads进行尝试。

反射式XSS漏洞

反射式XSS一般是提交信息的一部分内容通过服务器解析后反馈到浏览器,而不存储到服务器。它与存储式XSS的不同是:不能存储在服务器中。

攻击方法:一般都是构造了有恶意代码的链接(一般都是可信度高的网站)发送给受害者,受害者点击后会执行注入的XSS代码。

反射式XSS利用流程

在这里插入图片描述

如何构造有问题的链接

构造有问题的链接:

http://mydvwa.com/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%27hello+wel%27%29%3C%2Fscript%3E#

流程如下:

  1. 将上诉链接发送给受害者
  2. 受害者打开页面,服务器解析了地址,然后返回给用户
  3. 用户收到有script注入的页面,受害者浏览器根据script内容进行运

上诉链接的效果如下:
在这里插入图片描述

反射式XSS的检测与修复

基本原理:通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析,执行,如此就可以获取用户的COOKIE,进而盗号登录。

示例获取用户cookie,并用弹出展示:

http://mydvwa.com/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E#

在这里插入图片描述

检测与修复方式与存储式XSS类似,仅仅是不能存储在服务器中。

如何防范XSS

参考模块“存储式XSS漏洞》如何防范存储式XSS”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/henni_719/article/details/111563882

Web渗透测试之XSS攻击:存储型XSS-爱代码爱编程

文章目录 前言存储型XSS最简单的存储型XSS利用存储型XSS获得cookie总结 前言   在了解了反射型XSS相关方面的内容之后,本篇我们将继续深入了解存储型XSS,笔者将通过具体的例子讲解存储型XSS攻击的具体流程与危害。 存储型XSS   在之前的博客中我们提到过,存储型XSS是被包含在之后的HTTP请求响应中的,并且由于存储型X

Web渗透测试之XSS攻击:反射型XSS-爱代码爱编程

文章目录 前言反射型XSS最简单的反射型XSS利用反射型XSS获得cookie获得cookie的最简单的方法DNSlog辅助获得cookie总结 前言   在上一篇文章中我们基本了解了XSS的类型和危害,在本篇中我们将通过具体的例子和讲解,深入理解反射型XSS攻击的具体过程及危害。 反射型XSS   在上一篇中我们了解到反射型XSS往往存

XSS及CSRF攻击防御-爱代码爱编程

一、概念: XSS攻击全称跨站脚本攻击(Cross Site Scripting); CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF;是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨

Web渗透测试之XSS攻击:针对管理员的XSS攻击-爱代码爱编程

文章目录 前言准备工作反射型XSS存储型XSS总结 前言   管理员权限的重要性不言而喻,而在渗透测试中如果能够获得管理员权限,无疑将会奠定胜利的基调。本篇将讲述如何利用XSS漏洞冒充管理员,从而达到获得管理员权限的目的。 准备工作   在攻击者的服务器端准备脚本执行文件以及cookie获得网页:getcookie.js: var im

Web渗透测试之XSS攻击:基于DOM的XSS-爱代码爱编程

文章目录 前言基于DOM的XSS什么是DOM基于DOM的XSS产生的原因如何手工挖掘基于DOM的XSS漏洞如何利用基于DOM的XSS漏洞总结 前言   本篇主要讲解什么是基于DOM的XSS漏洞,基于DOM的XSS漏洞产生的原因以及一般会在何处产生,最后讲解如何利用基于DOM的XSS漏洞(如XSS经典的窃取cookie、钓鱼等)。 基于DOM

XSS(Cross-site-Script跨站脚本攻击)学习笔记-爱代码爱编程

XSS(Cross-site-Script跨站脚本攻击)   XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。   攻击成功后