web渗透(利用DOM XSS)
这种类型的 XSS 攻击之所以如此命名,是因为注入的代码是由浏览器的文档对象模型(DOM)接收和处理的。这意味着注入的代码永远不会在服务器端运行,因此任何服务器端的验证或编码对这种攻击都是无效的。在 addltemToStorage函数中,可以看到存在一些输入验证,但这些验证取决于一个名为gUseJavaScriptValidation的变量的值。跟随代码流,发现在第1093行,输入值作为参数传递
利用DOM XSS
DOM基于的跨站脚本攻击(DOM-based XSS)也被称为客户端 XSS。这种类型的 XSS 攻击之所以如此命名,是因为注入的代码是由浏览器的文档对象模型(DOM)接收和处理的。这意味着注入的代码永远不会在服务器端运行,因此任何服务器端的验证或编码对这种攻击都是无效的。
在本节中,我们将分析如何在Web应用程序中检测和利用DOM XSS 漏洞。
任务实现
准备工作:
确保靶机 VM_1正在运行。
使用支持开发者工具的现代浏览器(如Chrome或Firefox).步骤:
1、导航到目标页面:
在靶机VM_1中,访问Mutillidae lI| OWASP 2013 | XSS | DOM|HTML5 Storage页面。
2、启用开发者工具:
打开浏览器的开发者工具(通常可以通过按F12或右键选择“检查”来打开)。切换到Network选项卡,以便观察网络通信。
3.分析javaScript代码:
查看页面上的“Add New”按钮,发现它在点击时调用了一个名为addltemtostorage的函数。
3.切换到Sources或Debugger选项卡,查找addltemToStorage函数。在index.php的第1064行找到该函数。
(数字1的箭头表示存在一些输入验证,但它取决于名为gUseJavaScriptValidation的变量的值。如果在代码中查找这个变量,发现它最初是以值 FALSE(第1027行)声明的,并且似乎没有任何地方它的值发生变化,所以也许169这个条件永远不会成立。跟随代码流并没有发现其他验证或修改保存密钥值的变量。在第1093行中,该值作为参数传递给setMessage函数,该函数在第1060行中通过使用现有元素的innerHTML属性将消息添加到页面。)
利用DOM XSS
完成
在 addltemToStorage函数中,可以看到存在一些输入验证,但这些验证取决于一个名为gUseJavaScriptValidation的变量的值。
在代码中查找gUseJavaScriptValidation变量,发现它最初在第1027行声明为 false,并且在整个代码中没有地方修改它的值。因此,输入验证条件可能永远不会成立。
跟随代码流,发现在第1093行,输入值作为参数传递给setMessage函数,该函数通过使用现有元素的innerHTML属性将消息添加到页面上。
4.测试注入HTML代码:
尝试设置一个包含HTML代码的键值。例如,添加以下键值: Cookbook test <H1> 3</ H1>如果浏览器解释了HTML代码,则说明可能存在DOM XSS漏洞。
5.测试注入JavaScript代码:
添加一个新条目,其中包含以下键值:Cookbook test < img sre =X onerror ="alert('DOM XSS')">
如果浏览器弹出一个警告框,显示"DOM XSS",则确认存在DOM XSS 漏洞。
三、相关知识与技能
DOM XSS 攻击原理:
在DOM XSS 攻击中,恶意脚本由浏览器的DOM接收和处理,而不会发送到服务器。因此,服务器端的验证和编码对此类攻击无效。
这种攻击通常发生在用户输入直接插入到页面内容中,并且使用innerHTML或其他类似属性来渲染页面的情况下。
分析过程:
程序流程分析:
首先注意到程序没有连接到服务器,所有操作都在客户端进行。
输入的数据存储在浏览器的本地存储中,并通过innerHTML属性呈现给用户。●输入验证:
分析additemToStorage的数,发现存在输入验证,但该验证依赖于一个初始值为false的变量gUseJavaScriptValidation,
由于该变量的值从未改变,因此输入验证实际上不起作用。注入测试:
通过插入带有HTML标签的文本,确认浏览器会解释这些标签。
最后一步是尝试注入JavaScript 代码,以验证是否存在 DOM XSS 漏洞。防御措施:
避免使用innerHTML:尽量使用textContent或innerText来插入纯文本内容,而不是使用innerHTML插入可能包含HTML代码的内容。
输入验证:即使在客户端,也应该对用户输入进行严格的验证,确保输入符合预期格式。
内容安全策略(CSP):使用CSP来限制页面可以加载的资源,减少XSS 攻击的风险。
定期更新和打补丁:保持应用程序及其依赖库的最新状态,修复已知的安全漏洞。总结:
通过本练习,我们了解了如何检测和利用DOMXSS漏洞。理解和掌握如何识和防范这类漏洞是进行有效渗透测试的关键技能之一。此外,通过分析响应和结可以更好地理解应用程序的行为,并识别潜在的安全漏洞。正确配置输入验证输出编码是防止DOM XSS攻击的重要手段。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)