位置: 澳门金沙在线官网 > 他山之石 > 正文

他山之石 对 XSS 的一次深入分析认识

作者:admin 来源:未知 关注: 时间:2019-02-11 05:47

  随着时间的推移,Web应用漏洞的类型在不断演变,但年复一年持续存在且影响广泛的漏洞仍然还属XSS漏洞。长期以来,XSS漏洞算是非常常见的安全问题,以至于对大多数人来说,即使一个新的XSS漏洞被披露,但从内心来说,早已习已为常。本文深入描述XSS攻击在几种实际环境中的应用,同时顺带提到了一些XSS攻击的绕过技术。

  和我们能想到的一样,预防是最好的治疗方法,而且去尝试和缓解一些意外的攻击也不失为一种好的策略实践。通常情况下,大多数组织机构只会部署现成的WAF产品(网络应用防火墙),而不是制订开发适合自身的缓解技术,根本不会意识到那些结合自身的防护技术才是最恰当最精准的安全措施。

  这样一来,攻击者们在构造代码验证请求或实施代码审计之后,有WAF产品也没用,攻防双方就又形成了猫捉老鼠或是打地鼠的游戏格局了。

  如果一个攻击者发现标签对会被过滤器转换为空字符串,那么,把它们组合构造夹杂放入一条java中,最终只有标签对被删除了,其它剩下的就又形成了新的组合方式,示例如下:

  完美,这就是我们想要的。同样的方法可以应用到一些标签属性或事件处理程序中,就像如果是删除目标,那么,我们可以构造以下Payload:

  当一些不安全的样式被替换而不是被删除之后,目标系统过滤器要识别它们,可能就有一些麻烦了。根据不同的过滤器规则,可以使用替换方式来构造我们最终想要的Payload。

  但如果我们把这种嵌套式样式后,那么参照替换为NAUGHTY_HACKER字段的规则,对于来说,目标过滤器会把它过滤为:

  在开始标签中,虽然技术上属于无效,但最终却能正确解析。因为浏览器在某种程度上为了减少错误,虽然能识别到这个附加属性,但会简单地把它忽视掉。最终在浏览器的检查器效果如下:

  一些XSS披露漏洞中简单的跳出弹框PoC证明,可能是导致XSS漏洞危害被认知不足的一个原因吧,尽管XSS调用alert形式的弹框能证明漏洞的存在,但却不能很好地证明XSS漏洞的实际威力和影响。所以,XSS漏洞导致的Java执行到底会有多严重,让我们产生无限遐想。在此就分享两个案例。

  会话Cookie劫持可能是XSS攻击中对目标系统或用户的最大潜在威胁,因为这通常会导致目标用户的会话被攻击者完全操纵利用。

  越来越多的人熟知会话劫持的风险,因此,后期在会话信息中加入了HttpOnly标志,来避免Java读取Cookie,这应该算是一个大的改进了,但实际来说,劫持账户也并不只有Cookie劫持一种方法。

  有很多事件程序可以和Java关联起来,其中一个就是 keypress 按键事件(你能看到该事件背后会发生什么吗?)。通过在keypress事件的document调用方法中添加回调函数Callback,在用户点击、按下或选中触发回调,以此来截取用户的按键信息。

  通过这种操作,攻击者可以有效地将键盘记录器植入用户浏览器中,实现按键监听,窃取用户密码凭据相关的按键信息。如下视频:

  上图中,keypress 按键事件通过包含以下内容的Java文件,捕获按键事件信息并发送到攻击者的本地web服务器中。

  虽然上述XSS构造的键盘记录器能正常起效,但如果不被目标用户信任,迷惑不了目标用户执行输入,那么,这种攻击最后也会无效。

  我们可以对上述键盘记录器PoC稍作修改,可以修改执行时的DOM,用包含登录页面的body内容进行替换。这样一来,可以把任意标记内容都分配给erHTML作为属性,如下:

  这样,页面的body内容将会形成一个迷惑性的登录框,诱使用户输入密码凭据等敏感信息。如下:

  虽然这只是个简单的示例,但是基于此,攻击者可以创建和网站登录页面一模一样的钓鱼页面,以假乱真,形成有效攻击。毕竟,大部份受害者只要看到正确的域名,就不会对登录页面产生太多质疑。

  DOM 形式的这种操纵利用远不止于此,另外,它还可以用来构造复杂的社工攻击。比如,可以被构造用来向用户发送提示通知,告诉用户需要通过某个号码去联系客户支持部门,如果这种提示显示在和用户访问的目标网站相同的域名上,那么其可信度就相当高了,只要用户拨通所谓的客户部门电话,个人敏感信息就会被攻击者轻易获得。

  如今,随着现代浏览器功能特性的不断发展更新,XSS Payload的构造方式也不断升级,利用新的浏览器功能特性,攻击者甚至可以窃取到用户当前浏览器视图的截图信息。

  html2canvas 能够实现在用户浏览器端直接对整个或部分页面进行截屏,利用这一功能,攻击者用6行Java代码就能窃取受害者浏览器视图截图,并回传到控制服务器。代码示例如下:

  结合上述代码,构造以下Payload提交到测试的目标用户应用中,之后,就会生成一张包含目标用户使用信息的截图图片,而且该图片会被回传至攻击者控制服务器中。

  setTimeout()方法用于在指定的毫秒数后调用函数,这里调用了setTimeout原因是为了确保图像显示在屏幕上以供验证说明。

  虽然上述Payload是将截图发送到和目标Web应用相同的服务器中,但在实际环境中,完全可以把截图发送到攻击者控制的远程外部服务器中去。

  Payload一旦执行后,一个名为screenshot.png的截图文件就会出现在Node.js应用中,该截图包含了网页内容,如下:

  虽然这种攻击的实际应用有限,但它可以很好地诠释利用XSS漏洞能实现的攻击场景,值得思考借鉴。

  如果你想实际动手测试这篇文章中提到基于Node.js的Web应用实例,把玩其中的键盘记录器或浏览器截图程序,请参考我们的GitHub页面:

打印此文】 【关闭窗口】【返回顶部
相关文章
推荐文章
最新图文


友情连接
网站地图 | xml地图
Copyright © 2016-2019 澳门金沙在线官网  版权所有