pikachu漏洞练习第二章节DOM型xss,DOM型xss-x练习收获

通过 JavaScript,可以重构整个 HTML 文档。可以添加、移除、改变或重排页面上的项目。
要改变页面的某个东西,JavaScript 就需要获得对HTML 文档中所有元素进行访问的入口。

这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。
所以,可以把DOM理解为一个一个访问HTML的标准编程接口。

DOM型xss不与后台服务器产生数据交互,时一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。

练习部分

DOM型xss

打开pikachu漏洞练习第二章节的DOM型xss部分。先输入随机数值在页面尝试,可见在点击确认后弹出一个what do you see的字符。

依旧是网页右键查看源代码,找到网页页面相关的JavaScript代码部分,可见弹出的文字利用dom方法绑定。下方的注释中留有靶场作者的提示信息。

观察可知“+str+”处是我们输入的信息,如果我们利用此处把JavaScript代码插入进去,就可以利用这个漏洞输出我们想要的结果。

新建一个文本文档把<a>标签下的字符复制下来,方便我们观察代码。再把作者给的提示

' onclick="alert('xss')">
'><img src="#" onmouseover="alert('xss')">

替换掉刚刚提到的“+str+”部分,可得到新的代码文本。

文档中的第二段代码可见我们把原来的代码替换为了一个href属性为空的a标签,转而显示img和a标签‘>what do you see?

文档中的第三段第三段代码可见我们把原来的代码替换为了一个href属性为onclick的a标签,转而显示img和a标签‘>what do you see?

我们回到网页,分别在input框中填入作者提示的代码文本,观察结果变化。

img这一段代码填入后网页在加载后自动弹出了xss提示。这是因为该代码运行后,网页加载img图片,弹出img图片规定的onmouseover 事件,onmouseover 事件发生在鼠标指针移动到元素或它的子元素上时。而具体弹出的事件就是我们规定写着xss文本的弹出框。

另一段代码填入后网页显示了新的‘>what do you see?字段,点击字段,弹出提示框xss。这是因为该代码运行后,把原本只显示字符的a标签增加了一个单击后的弹出框,弹出的内容就是我们写入的xss。完成该漏洞的利用。

DOM型xss-x

打开pikachu漏洞练习第二章节的DOM型xss-x部分。先输入随机数值在页面尝试,可见在点击确认后弹出一段字符,点击该段字符又弹出一段不同字符。

像刚刚DOM型xss步骤所做的一样查看网页的源代码,可见在function domxss下存在与之前xss问题中类似的html dom语句。在源代码函数中查询可知,text=字符来自于txss变量。查阅decodeURIcomponent函数用法为返回一个解码后的统一资源标识符(URI)字符串,处理前的 URI 经过了给定格式的编码。可知变量str为我们输入在文本框的字符,变量txss为添加给url的字符,变量xss为更新text后字符的数值。

尝试直接在输入框中输入提示文本,点击确认,再点击字符,成功弹出提示框。可见xss与xss-x的区别在于一个是直接获取输入的数值,另一个是通过url获得输入的数值。

完成该次漏洞利用。

### 关于Pikachu项目中的DOMXSS漏洞解释与解决方案 #### DOMXSS漏洞概述 DOM跨站脚本攻击(Cross-Site Scripting, XSS)是一种特殊的XSS形式,其特点是恶意代码完全在客户端执行,不涉及服务器端逻辑处理。这种类漏洞通常发生在JavaScript动态修改网页内容的过程中,当用户的输入未经过滤或转义便被嵌入到HTML文档中时,就可能引发安全风险[^1]。 #### Pikachu靶场中的DOMXSS实例分析 以Pikachu靶场为例,DOMXSS的具体实现可以通过以下方式观察:用户输入的数据会被直接用于构建HTML结构的一部分,而无需发送至服务器进行处理。例如,在某些场景下,前端通过`document.getElementById()`或其他类似的DOM操作函数获取用户输入的内容,并将其未经验证地插入到页面的某个节点中[^2]。 具体来看,如果存在如下代码片段: ```javascript var userInput = document.getElementById('inputField').value; document.write(userInput); ``` 上述代码会将用户输入的内容直接写入当前文档流中,从而可能导致任意HTML/JS代码被执行。这正是DOMXSS的核心机制之一[^5]。 #### 解决方案 针对此类问题,有多种有效的缓解措施可采取: 1. **输入过滤** 对所有来自用户的输入数据进行全面校验和清理,移除潜在危险字符(如 `<`, `>`, `(`, `)` 等),并确保只允许合法范围内的字符集进入后续流程[^3]。 2. **上下文敏感编码** 根据最终渲染位置的不同应用相应的转义策略。比如对于属性值应采用HTML实体化;如果是JavaScript字符串,则需考虑反斜杠转义等问题[^4]。 3. **CSP头配置** 使用Content Security Policy (CSP),这是一种HTTP响应头部设置手段,能够有效限制哪些资源可以从外部加载以及如何运行内联脚本等内容。 以下是改进后的代码样例展示正确做法: ```javascript // 获取用户输入 var userInput = document.getElementById('inputField').value; // 进行必要的转义处理 function escapeHtml(unsafe) { return unsafe.replace(/[<>"'&]/g, function(m) { switch(m){ case '<': return '<'; case '>': return '>'; case '"': return '"'; case "'": return '''; case '&': return '&'; } }); } // 安全输出已转义过的字符串 document.body.innerHTML += "<div>" + escapeHtml(userInput) + "</div>"; ``` 以上方法综合运用了输入净化技术和输出阶段的安全保障技术,极大降低了遭受DOMXSS攻击的可能性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值