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

利用基于AngularJS的XSS实现提权

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

大家好,我是Shawar Khan。自我上次写作以来已经时隔好几个月了,这段时间我一直忙于不同的测试目标。最近我在某个目标中发现了一个有趣的XSS漏洞,通过该漏洞我可以将我的权限提升为管理员用户。
XSS是一个非常有趣的漏洞,在发现它之后,你可以直接与应用程序进行通信,而无需担心同源策略。一切都在我们的控制之中,大部分保护都被打破了。
管理员用户拥有应用程序的最高权限可以对任意用户执行添加/删除/编辑操作。而我最终得以提升到管理员权限就是通过XSS做到的。每当我发现XSS,我都会尝试使用一些独特的方式来利用它们。令牌抓取,CSRF保护绕过或是抓取cookie,现在看来已经显得有些过时。
在我的测试期间,在用户配置文件页面我发现了多个XSS漏洞。每个注册用户都有不同的配置文件页面,如“https://www.site.com/users/username-here”。

发现基于 AngularJS 的XSS
这是一个所有特权用户均可访问包含用户帐户名和姓的页面。应用简单的测试探针,如“>并没有显示任何结果,所以这说明该应用已做了适当的XSS保护。所有特殊字符都被正确过滤,这引发了我的另一思考,为什么不尝试获取基于AngularJS的XSS呢?转到“ settings”并将帐户名更改为“{{alert(1)}}”。

因此,我以不同的特权用户身份测试了相同的内容,并导航到了我的配置文件/users/username_page(任何用户均可访问)触发payload。

当尝试提升权限时,你的主要目标是寻找能够编辑你角色的功能或是邀请你进入不受限区域的功能。在我的例子中,管理员用户有权编辑/添加用户。
在我的例子中,我有一个测试管理员帐户来测试这些问题,所以我知道要添加一个新的管理员特权用户需要复制什么请求。在没有访问权限的情况下,你只需尝试通过发送document.body.innerHTML的输出来获取管理帐户的源码,并尝试获取有关内部功能的信息。可以利用XSSHunter和其他一些工具来获取此类信息。
如何提供 payload ?
无论如何,用户名字段的长度限制很短,因此无法在该字段中编写整个漏洞利用代码。用户名还会将条目添加到配置文件页面,此外它也会显示为恶意内容。同样受限于长度,无法注入引用外部JavaScript的脚本标记。
与往常一样,我通过window.name提供payload。我总是通过window.name提供payload,因为它没有利用限制,加载我们的漏洞利用代码的payload限制为20个字符,因为我们将只加载给定的payload并将其提供给eval(atob(top.name))使用这种技术的另一个好处是,可以绕过绕过许多恶意关键字的验证检查,因为我们的主要漏洞利用代码不会被输入到易受攻击的应用程序中。因此简而言之,我们的攻击代码不会被验证和检查。
因此,可以通过使用window.open(url,”window name here”) 打开一个URL来设置window name,我们将漏洞利用代码设置为base64。因此,通过调用window.name,它将返回我们的漏洞代码,这些代码将由eval()执行
定位用户修改功能:
此功能发现于管理用户门户,并且最高权限用户能够任意更改应用程序中用户的数据和权限。这里有不同的选项,如电子邮件更改和复选框,以确认用户是否具有更高的权限。通过设置参数“csc=1”,用户将被授予full权限,但此操作只能由管理员用户执行。如果仅检索源码,则可以通过执行源码审查来了解哪些端点采用哪些参数来映射所有功能。
以下是将用户修改为管理员和完全权限用户的请求:
POST /users/attackers-username HTTP/1.1
Host: vulnerablesite.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 141
_method=PUT&_token=CSRF_TOKEN_HERE&name=USERNAME&email=USER_EMAIL&phone=&csc=1
为了提升我们的权限,应该再现以上请求,这样当更高权限用户访问我们的漏洞利用代码时,我们的用户将被修改。
编写漏洞利用代码:
我们首先要检索的是CSRF令牌,这样我们就可以验证请求。有时它会出现在cookie中,因此从document.cookie中检索它非常容易,但在本例中,是在一个meta标记中找到的:

[1] [2]  下一页

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