翻译来自:掣雷小组
成员信息:
thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,
这个公众号,一定要关注哦,慢慢会跟上面老哥们一起分享很多干货哦~~
标记红色的部分为今日更新内容。
第五章、使用跨站脚本攻击客户端
5.0、介绍
5.1、使用浏览器绕过客户端控制
5.2、识别跨站脚本漏洞
5.3、利用XSS获取Cookie
5.4、利用DOM XSS
5.5、利用BeEF执行xss攻击
5.6、从Web存储中提取信息
5.7、使用ZAP测试WebSokets
5.8、使用XSS和Metasploit获取远程shell
5.4、利用DOM XSS
这种也称为客户端XSS。DOM XSS以这种方式命名,是因为payload是由浏览器的DOM接收和处理的,这意味着注入的代码永远不会在服务器端运行,并且任何服务器端验证或编码都对这种攻击无效。
在本文中,我们将分析如何在Web应用程序中检测和利用此漏洞。
实战演练
以下是在Web应用程序中检测和利用此漏洞的步骤:
1.在易受攻击的虚拟机vm_1中,转到MutillidaeII | Top 10 2013 | XSS | DOM | 本地储存的HTML5文件。
2.这个练习会展示一个表单,用于在浏览器的本地记录中存储信息和相应的session。然后在“网络”选项卡中启用开发人员工具。
3.尝试添加一些数据,我们发现在开发者工具中并没有进行网络通信,绿色条显示是我们输入的值:
4.如果我们检查Add New按钮,我们看到它在单击时调用了一个函数addItemToStorage:
5.现在,转到Debugger选项卡并查找addItemToStorage函数; 我们在index.php的第1064行找到了这个函数:
数字1的箭头表示存在一些输入验证,但它取决于名为gUseJavaScriptValidation的变量的值。 如果我们在代码中查找这个变量,我们发现它最初是以值FALSE(第1027行)声明的,并且似乎没有任何地方它的值发生变化,所以也许这个条件永远不会成立。我们跟随代码流并没有发现其他验证或修改保存密钥值的变量。在第1093行中,该值作为参数传递给setMessage函数,该函数在第1060行中通过使用现有元素的innerHTML属性将消息添加到页面。
6.所以我们尝试设置一个包含HTML代码的键值。添加以下键作为键的新值:Cookbook test <H1> 3</ H1>
7.如果浏览器解释HTML代码,则很可能也会出现JavaScript块。添加一个新条目,其中包含以下键值:Cookbook test <img src = Xonerror =“alert('DOM XSS')”>
原理剖析
在本文中,我们首先分析了程序的流程,注意到它没有连接到服务器,因此向页面添加信息,并且它反回了用户给出的值。然后我们分析了将数据添加到浏览器内部存储的脚本代码,并注意到这些数据可能无法验证是否合法,而且通过innerHTML属性呈现给用户。对于输入的值,这将意味着数据被视为HTML代码,而不是文本。
我们尝试这种没有验证的代码,我们首先插入了一些带有HTML标头标签的文本,并获得了浏览器解释的代码。那么我们的最后一步就是尝试XSS。