欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

XSS利用中的一些小坑

来源:本站整理 作者:佚名 时间:2019-08-12 TAG: 我要投稿

随着时间的推移,简单使用alert(1)和python –m SimpleHTTPServer的黄金年代已经不复存在。现在想通过这些方法在locahost之外实现XSS(Cross-Site Scripting)以及窃取数据已经有点不切实际。现代浏览器部署了许多安全控制策略,应用开发者在安全意识方面也不断提高,这都是阻止我们实现传统XSS攻击的一些阻碍。
现在许多人只是简单地展示XSS的PoC(Prof of Concept),完全无视现代的安全控制机制,这一点让我忧心忡忡。因此我决定把我们在攻击场景中可能遇到的一些常见问题罗列出来,顺便介绍下如何绕过这些问题,实现真正的XSS,发挥XSS的价值。
在进入正文之前,我们要知道现在许多浏览器内置了一些保护措施,可以阻止攻击者利用浏览器特定的漏洞绕过安全机制、发起XSS攻击。然而为了聚焦主题,这里我并不会取讨论如何绕过不同浏览器XSS控制策略的方法。我想关注更为“通用”的内容,聚焦如何在已知内容上进行创新,而不是挖掘全新的方法。
因此我想简单介绍下我在针对现代应用程序利用XSS PoC过程中碰到的一些非常实际的问题,包括:
针对动态创建Web页面时的常见“问题”
隐藏在alert(1)表面下的问题
位置问题,知道什么时候我们需要等待
被称为XSS杀手的CSP(Content Security Policy)
HTTP/S混合内容,如何“干净地”窃取数据
使用CORS(Cross-Origin Resource Sharing)实现双向C2的一些基本知识点
 
0x01 Element.innerHTML
先从简单的开始讲起。
大家还记得最近一次看到没有采用动态方式构建/改变DOM(Document Object Model)的应用是什么时候?如果采用动态构建方式,使用元素的innerHTML属性将通过某些API获取的内容插入页面,就可能存在一些风险。比如如下API调用:
$ curl -X POST -H "Content-Type: application/json" --cookie "PHPSESSID=hibcw4d4u4r8q447rz8221n"
-d '{"id":7357, "name":"alert(1)", "age":25}'
http://demoapp.loc/updateDetails
{"success":"User details updated!"}
$ curl --cookie "PHPSESSID=hibcw4d4u4r8q447rz8221n"
http://demoapp.loc/getName
{"name":"alert(1)"}
然后看一下用来动态更改网页内容的“非常安全的”JavaScript代码:
function getName() {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      var data = JSON.parse(this.responseText);
      username.innerHTML = data['name'];
    }
  }
  xhr.open("GET", "/getName", true);
  xhr.send();
}
这看起来像是非常简单的XSS利用场景。然而,当我们尝试注入基于的典型payload时,却看不到什么效果(即使目标应用没有采用任何输入验证机制,也没有编码或转义标签)。如下图所示,正常情况下我们应该能看到一个完美的弹窗:

那么究竟这里有什么黑科技?其实这是因为在HTML5规范中,规定了如果采用元素的innerHTML属性将标签插入页面中,那么就不应该执行该标签。
这可能是比较令人沮丧的一个“陷阱”,但我们可以使用标签之外的其他方式绕过。比如,我们可以使用或者标签,利用如下API调用来发起攻击:
$ curl -X POST -H "Content-Type: application/json" --cookie "PHPSESSID=hibcw4d4u4r8q447rz8221n" -d '{"id":7357, "name":"Bob", "age":25}' http://demoapp.loc/updateDetails
{"success":"User details updated!"}
现在当页面再次获取到用户名,就会达到XSS攻击效果:

 
0x02 Alert(1)
当我们将alert(1)注入页面,看到弹窗,就可以在报告中声称我们达到了XSS

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载