玩转DVWA 之XSS DOM

本文深入探讨了XSS中的DOM型攻击,解释了DOM的本质和XSS DOM攻击原理。通过DVWA(Damn Vulnerable Web Application)的不同级别实例,详细展示了攻击过程,包括如何利用document对象的方法插入恶意代码,以及在不同防护级别下攻击者如何调整策略。在Low级别,payload直接执行;Medium级别利用<img>标签的onerror事件绕过过滤;High级别采用#注释绕过白名单;Impossible级别则由于编码处理导致攻击无效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XSS是Cross Site Scripting的缩写,意为跨站脚本攻击。XSS分为反射型、DOM型、存储型,本篇来聊一聊DOM型攻击。

一、什么是DOM

DOM是一种思想,是访问结构化文档的方式。

根据W3C定义,DOM分为核心DOM ,XML DOM,HTML DOM。

DOM是Javascript操作网页的接口。当浏览器载入 HTML 文档, 它就会成为 Document 对象。HTML DOM 模型被构造为对象的树。

 

二、什么是XSS DOM 攻击

XSS DOM攻击就是利用document对象的方法写入可执行代码。

常用的document对象的方法如下。

document.getElementById(id):获取带有执行id的节点(元素);

document.getElementsByClassName(class):获取所有指定类型的节点

document.write():写入html,script代码。

例如DVWA的DOM利用,就是用document.write()中插入script执行代码

在整个过程中,只有受害者的端网页脚本修改了,服务器响应的页面没有发生变化。

三、DVWA中DOM利用

选择级别

### 关于DVWAXSS DOM漏洞的信息 在探讨DVWA(Damn Vulnerable Web Application)中的DOM型跨站脚本攻击(XSS)时,需理解DOM操作如何影响Web应用程序的安全性。DOM XSS发生在客户端JavaScript代码解析并执行来自不受信任的数据源的恶意输入之时[^1]。 对于`http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<script>alert(1)</script>`这样的URL请求,在未加防护的情况下,服务器返回固定内容给浏览器渲染,而浏览器依据接收到的HTML文档构建DOM树,并处理其中嵌入或由外部引入的JavaScript逻辑。如果这些逻辑不当使用了查询字符串参数,则可能导致安全风险。例如上述案例展示了通过修改URL中的`default`参数传递一段简单的JavaScript弹窗命令,实现了向页面注入可被执行的脚本片段的目的。 然而值得注意的是并非所有情况下都能轻易达成这种攻击效果。某些场景下虽然允许用户提交特定形式的数据至前端显示区域,但由于编码机制的存在使得原始意图被改变——即所输入的内容可能先经历了一轮转义转换再参与后续流程;另外还有些情形里尽管表面上看似可以绕过初步筛查手段实施payload投递,实则因更深层次防御措施如正则表达式匹配替换等生效阻止了最终危害的发生。比如有实例提到即使尝试发送带有<script>标签的有效载荷也未能触发预期行为,因为目标位置处存在针对此类结构的关键字过滤规则,迫使攻击者寻找其他途径完成相同目的,像利用图像加载失败后的回调函数作为新的突破口:<img src="nonexistent.jpg" onerror="alert('xss')">[^4]。 #### 解决方案建议 为了有效防范这类基于DOM的操作引发的安全隐患: - **验证与净化输入**:确保所有来源于用户的输入都经过严格的校验过程去除潜在危险成分后再用于更新界面状态; - **采用上下文敏感输出编码**:根据不同展示环境特点分别应用适合的方式对特殊字符做适当变换防止其被解释成活动指令的一部分; - **最小权限原则**:仅授予必要的功能访问权利给各部分组件减少不必要的暴露面; - **定期审查第三方库和服务集成情况**:及时跟进官方发布的补丁信息修补已知缺陷。 ```javascript // 假设有一个接收用户输入并将其反映到页面上的简单例子 function updatePageContent(userInput){ // 不要这样做 - 存在高危风险 document.getElementById("content").innerHTML = userInput; // 应该这样做 - 使用textContent代替innerHTML以避免HTML/JS注入 document.getElementById("content").textContent = userInput; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值