pikachuDOM型xss

本文详细介绍了DOM型XSS的概念,解析了DOM如何将Web页面与脚本语言结合,以及利用DOM进行XSS攻击的常见手法。通过示例展示了如何通过函数domxss()实现攻击,探讨了注入命令的影响。同时,分析了利用GET方法进行XSS攻击的场景,并提出了对XSS攻击的防范思路。

pikachu

DOM型xss

   文档对象模型 (DOM) (Document Object Model)是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。简言之,它会将 web 页面和脚本或程序语言连接起来。
   一个 web 页面是一个文档。这个文档可以在浏览器窗口或作为 HTML 源码显示出来。但上述两个情况中都是同一份文档。文档对象模型(DOM)提供了对同一份文档的另一种表现,存储和操作的方式。 DOM 是 web 页面的完全的面向对象表述,它能够使用如 JavaScript 等脚本语言进行修改。我们用JavaScript对网页进行的所有操作都是通过DOM进行的。

思路

dom既然和html挂钩,那么F12,找到相应位置:

image-20220906205832243

看到有一个函数表示出来了:

 function domxss(){
                        var str = document.getElementById("text").value;
                        document.getElementById("dom").innerHTML = "<a 										                         href='"+str+"'>what do you see?</a>";
                    }

表示输入的text的值(value)赋值给str,然后将str放入<a href='"+str+"'>what do you see?</a>

最后在div的标签中执行,上图输入了asa后点击butten后function就执行了下面的那排what do you see就看的到,而这个str就成了一个超链接,名字就叫what do you see?

试试给的注释1,鼠标移到图片上(onmouseover的作用),就出现了alert:

image-20220906211721369

试试出现的注释2,点击下方超链接(代码将超链接换成了onclick),出现了alert:

image-20220906211906251

总结

目前还不知道xss的注入命令,比如注释上的'不知道怎么来的,但没了它代码运行不起来

DOM型xss-x

思路

随便输入,onclick后发现输入的文本出现在了url一栏中的text=,F12中查看果然发现表单的method果然是get:image-20220907205148099

domxss中str为获取url的内容,经过url解码和字符串分离,取出text=后的内容赋值给txss,txss把+换成空格

容,经过url解码和字符串分离,取出text=后的内容赋值给txss,txss把+换成空格

并赋值给xss,最后拼接,注释1和2都可以放入表单中。

DOM XSS(Cross-Site Scripting)漏洞是一种发生在客户端的安全漏洞,其主要特点是通过操作文档对象模DOM)来注入恶意脚本,从而在用户的浏览器中执行恶意行为。在 Pikachu 靶场中,XSS 关卡中的 DOM XSS 练习是学习和理解此类漏洞的重要实践环境。 ### Pikachu 靶场中的 DOM XSS 示例 在 Pikachu 靶场的 DOM XSS 练习中,通常会设计一个场景,用户输入的数据通过 JavaScript 从 URL 的参数或哈希值中获取,并直接插入到页面的 DOM 中,而没有进行适当的过滤或编码处理。例如,在 `XSS 04 - DOM XSS` 这一关中,用户输入的内容被直接插入到页面中,导致攻击者可以构造恶意的 URL,诱导用户点击,从而触发 XSS 攻击。 以下是一个典DOM XSS 漏洞示例代码: ```html <!DOCTYPE html> <html> <head> <title>DOM XSS 示例</title> <script> function getQueryParam(param) { var urlParams = new URLSearchParams(window.location.search); return urlParams.get(param); } window.onload = function() { var userInput = getQueryParam('input'); if (userInput) { document.getElementById('output').innerHTML = userInput; } } </script> </head> <body> <h1>欢迎访问我的网站!</h1> <div id="output"></div> </body> </html> ``` 在这个示例中,`window.location.search` 获取 URL 中的查询参数,并通过 `URLSearchParams` 解析出 `input` 参数的值。随后,该值被直接插入到页面中 `id` 为 `output` 的 DOM 元素中。如果用户访问的 URL 是类似 `http://example.com/xss.html?input=<script>alert('XSS')</script>`,那么恶意脚本将会在用户的浏览器中执行。 ### Pikachu 靶场中的 DOM XSS 攻击利用教程 在 Pikachu 靶场中,DOM XSS 的攻击利用通常涉及以下几个步骤: 1. **分析前端代码**:首先需要查看网页的 JavaScript 代码,找到哪些地方使用了 URL 参数或哈希值,并将其插入到页面的 DOM 中。 2. **构造恶意输入**:根据代码逻辑,构造一个包含恶意脚本的 URL。例如,在 PikachuDOM XSS 关卡中,可以通过构造类似 `http://pikachu/xss/dom_xss.php?input=<script>alert(1)</script>` 的 URL 来触发 XSS 攻击。 3. **测试漏洞**:将构造好的 URL 发送给目标用户,或者通过其他方式诱导用户访问该 URL,从而触发恶意脚本的执行。 4. **防御措施**:为了防止 DOM XSS 攻击,应该对用户输入进行适当的过滤和编码。可以使用 `textContent` 而不是 `innerHTML` 来插入用户输入的内容,或者使用 HTML 编码库对用户输入进行转义。 ### 示例攻击场景 假设在 Pikachu 靶场的 DOM XSS 关卡中,页面代码如下所示: ```html <!DOCTYPE html> <html> <head> <title>DOM XSS 漏洞示例</title> <script> window.onload = function() { var hash = window.location.hash.substring(1); // 去掉 # 符号 if (hash) { document.getElementById('output').innerHTML = hash; } } </script> </head> <body> <h1>欢迎访问我的网站!</h1> <div id="output"></div> </body> </html> ``` 在这个示例中,`window.location.hash` 获取 URL 中的哈希值,并将其插入到页面的 `output` 元素中。如果用户访问的 URL 是 `http://pikachu/xss/dom_xss.php#<script>alert('XSS')</script>`,那么恶意脚本将会在用户的浏览器中执行。 ### 防御 DOM XSS 攻击 为了防止 DOM XSS 攻击,可以采取以下几种防御措施: - **避免直接插入用户输入**:尽量避免使用 `innerHTML` 或 `document.write()` 等方法直接插入用户输入的内容。可以使用 `textContent` 来插入文本内容,这样可以防止 HTML 注入。 - **对用户输入进行编码**:在将用户输入插入到页面之前,应该对其进行 HTML 编码。可以使用现成的库(如 `DOMPurify`)来对用户输入进行清理和编码。 - **使用 Content Security Policy (CSP)**:通过设置 CSP 头,限制页面中可以执行的脚本来源,从而防止恶意脚本的执行。 ### 示例防御代码 ```html <!DOCTYPE html> <html> <head> <title>DOM XSS 防御示例</title> <script> function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } window.onload = function() { var hash = window.location.hash.substring(1); // 去掉 # 符号 if (hash) { document.getElementById('output').textContent = escapeHtml(hash); } } </script> </head> <body> <h1>欢迎访问我的网站!</h1> <div id="output"></div> </body> </html> ``` 在这个防御示例中,`escapeHtml` 函数会对用户输入的内容进行 HTML 编码,防止恶意脚本的执行。同时,使用 `textContent` 而不是 `innerHTML` 来插入用户输入的内容,进一步增强了安全性。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值