0%

第二届陇剑杯初赛复现

前言:

备战第三届陇剑杯初赛,由于不清楚第三届的题型,又基于第二届全是我比较不熟悉的流量分析,所以复现一下第二届作为准备。

hard_web_1

题目内容:服务器开放了哪些端口,请按照端口大小顺序提交答案,并以英文逗号隔开(如服务器开放了80 81 82 83端口,则答案为80,81,82,83)

答案:80,888,8888

先来猜测一下这段流量的行为。通过分析可以确定服务器是192.168.162.180,客户端为192.168.162.188。开始框起来的部分是客户端在查找服务器对应的域名,后续可以看到客户端在对服务器进行端口扫描。

分析猜测完后开始答题

查看开放端口,通常就是查看TCP端口,利用wireshark查看UDP比较难以判断(UDP无连接,只是发包没有握手的过程,所以难以判断)

TCP开放端口,需要完成三次握手

第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。

  • SYN :标志位,表示请求建立连接
  • Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
  • Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

第二次握手的数据包:服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1

  • SYN + ACK::标志位,同意建立连接,并回送SYN+ACK
  • Seq = 0 :初始建立值为0,表示当前还没有发送数据
  • Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

第三次握手的数据包:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1

ACK :标志位,表示已经收到记录

Seq = 1 :表示当前已经发送1个数据

Ack = 1 :表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

法一:查看完成三次握手的端口

过滤完成三次握手的TCP端口,并且通过上面的分析我们可以知道服务器端是192.168.162.188

1
tcp.flags.syn == 1 && tcp.flags.ack == 1 && ip.dst == 192.168.162.188

可以看到开放的端口为80,888,8888

法二:查看synack字段

如果成功建立连接的话,服务器会发送一个synack字段

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

hard_web_2

题目内容:服务器中根目录下的flag值是多少?

答案:flag{9236b29d-5488-41e6-a04b-53b0d8276542}

猜测应该是有一个flag文件在根目录,直接查看有没有包含flag发现没有流量包含

那么换个思路,要得到flag一般需要getshell,所以一般会传入一个木马文件用于请求。

直接过滤http协议

1
http

拖到最下面可以发现有三个可疑的文件——index.jsptest.jspshell.jsp

通过追踪流,可知index.jsptest.jsp都是用于命令执行的木马文件参数为cmd。并且可以看到根目录下确实有一个flag文件

查看shell.jsp的流,虽然说post传入的值看不出什么,但是可以猜测shell.jsp应该是用于webshell的

接着观察,发现有一个/test.jsp?pwd=admin&cmd=ls%20/www/wwwroot/test.com/shell.jsp 是查看shell.jsp内容的,直接查看test.jsp流里的这个请求

可以看到文件内容被进行AES加密了,key为748007e861908c03,但是没有找到iv变量,所以说明是ECB模式(如果熟悉的可以看的出是哥斯拉的webshell

名称 是否需要IV 明文是否需要强制对齐 默认是否隐藏明文长度 是否块加密模式
ECB
CBC
CTR
GCM
CFB
OFB

那么接着就是解密/shell.jsp的通信内容,都是一次请求对应一次响应,直接看最后一次响应的内容,将其复制为hex流,然后用厨师解密即可得到flag(当然不确定的话也可以每一次请求和响应都看一下,但是这里我不知道是什么原因除了最后一个响应其他的请求和响应一直解密不成,感觉有可能是cyberchef的版本出问题了。。。)

hard_web_3

题目内容:该webshell的连接密码是多少?

答案:14mk3y

上面解密请求时,在解密倒数第五个请求可以看到提示(由于我这里有点问题不知道为什么解密不成功,所以直接用别人的图了)

获取key文件,查看响应

可以看到key是1****y,中间的4位数并没有给出

md5解密748007e861908c03得到完整的key(这步我是一脸懵逼的)

sevrer save_1

题目内容:黑客是使用什么漏洞来拿下root权限的。格式为:CVE-2020-114514

答案:CVE-2022-22965

查看http协议

发现经过了3个/hellowrld/greeting请求后就可以用shell.jsp这个木马文件进行命令执行了,追踪流看看

发现一段可疑字符串,搜索一下就看到是CVE-2022-22965

sevrer save_2

题目内容:黑客反弹shell的ip和端口是什么,格式为:10.0.0.1:4444

答案:192.168.43.128:2333

接着看发现有请求拉取了一个bbbb.sh文件,并且执行了这个sh文件

下面有两种看这个文件的方式

法一:追踪流量

可疑看到有一个流量是访问了/bbbb.sh,直接追踪查看流即可看到内容

法二:看文件

附件给了一个do.tar是环境的压缩文件,在helloworld目录下即可看到bbbb.sh

sevrer save_3

题目内容:黑客的病毒名称是什么? 格式为:filename

答案:main

这题也是挺莫名奇妙的,本来想着看看历史命令(查看.bash_history文件),结果发现只有root用户有历史命令,普通用户没有.bash_history(一般在/home/user/.bash_history

看了wp说在普通用户的目录里。。。

可以看到目录里有个可执行文件main

将其导出用微步进行分析,可以确定main就是病毒

sevrer save_4

题目内容:黑客的病毒运行后创建了什么用户?请将回答用户名与密码:username:password

答案:11:123456

/etc/passwd导出查看,可以看到最新创建的用户为11

/etc/shadow导出查看,可以看到密码为123456(shadow储存明文密码也是逆天。。。)

sevrer save_5

题目内容:服务器在被入侵时外网ip是多少? 格式为:10.10.0.1

答案:172.105.202.239

可以看到病毒文件同目录下有个日志文件,查看即可看到ip

至于为什么,用ai分析了一下文件内容

sevrer save_6

题目内容:病毒运行后释放了什么文件?格式:文件1,文件2

答案:lolMiner,mine_doge.sh

根据上面日志文件,释放了文件在.idea目录

 2025-09-06 015128.png

sevrer save_7

题目内容:矿池地址是什么? 格式:domain:1234

答案:doge.millpools.cc:5567

直接将mine_doge.sh导出查看即可看到

sevrer save_8

题目内容:黑客的钱包地址是多少?格式:xx:xxxxxxxx

答案:DOGE:DRXz1q6ys8Ao2KnPbtb7jQhPjDSqtwmNN9.lolMinerWorker

同上

Wireshark1_1

题目内容:被入侵主机的IP是?

答案:192.168.246.28

被入侵大概率是远程登陆,所以直接查看telnet协议

Telnet协议:是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。

可以看到所有从 192.168.246.1 发往 192.168.246.28 的数据包,其目标端口都是 23

所以被入侵的主机应该是192.168.246.28

Wireshark1_2

题目内容:被入侵主机的口令是?

答案:youcannevergetthis

追踪流就可以看到

Wireshark1_3

题目内容:用户目录下第二个文件夹的名称是?

答案:Downloads

同样直接追踪流就可以得到

Wireshark1_4

题目内容:/etc/passwd中倒数第二个用户的用户名是?

答案:mysql

同样直接追踪流就可以得到(注意是倒数)

SmallSword_1

题目内容:连接蚁剑的正确密码是______________?

答案:6ea280898e404bfabd0ebb702327b19f

查看http协议,发现存在sql注入

追踪流并进行切换查看,可以发现在74和75时通过sql注入写入了两个webshell文件1.phpinfo1.php,并且两个文件的连接密码都是6ea280898e404bfabd0ebb702327b18f

本来以为就是这个了,结果看了wp发现还有高手。。。

连接密码在连接的时候变成了6ea280898e404bfabd0ebb702327b19f(莫名其妙就变了),最后感觉应该是连接并执行命令的才是最准确的

 2025-09-06 023312.png

SmallSword_2

题目内容:攻击者留存的值是______________?(答案示例:d1c3f0d3-68bb-4d85-a337-fb97cf99ee2e)

答案:ad6269b7-3ce2-4ae8-b97f-f259515e7a91 (注意最后有个空格)

这里也是对留存值是啥产生了疑惑,看了wp说是木马文件执行命令写入文件的内容,所以这里也是先过滤一下

1
http contains "/sqlii/Less-7/info1.php"

接着一个一个流追踪过去,在139的时候发现有写入的操作

base64解密一下,是将Halo ANT!写入到D:/phpStudy/PHPTutorial/WWW/sqlii/Less-7/hacker.txt

但是这题狗的很,本来以为这个就是答案了,结果后面给这个文件内容又覆盖掉了。。。

查看142的时候,发现又有一个写入操作

解密后发现是将hacker.txt给覆盖了

SmallSword_3

题目内容:攻击者下载到的flag是______________?(答案示例:flag3{uuid})

答案:

追踪流的时候也是没发现什么下载的流(看wp说是130和137也不知道哪里出问题了)

查看对象发现有个大小异常的info1.php,将其保存下来

打开后发现是二进制数据(其实能够猜到是exe文件了)

用010打开后转化为16进制,可以看到exe文件的文件头4D5A90

接着将文件头前面的部分删除否则没法运行

然后运行程序生成test.jpg打开后没啥东西

将其拖入010继续分析,发现是png文件

将后缀改为png后打开也没有什么变化,依据之前做misc的经验,要么就是盲水印要么就是改长宽

这里也是用脚本检测一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import zlib
import struct
import argparse
import itertools

parser = argparse.ArgumentParser()
parser.add_argument("-f", type=str, default=None, required=True,
help="输入同级目录下图片的名称")
args = parser.parse_args()

bin_data = open(args.f, 'rb').read()
crc32key = zlib.crc32(bin_data[12:29]) # 计算crc
original_crc32 = int(bin_data[29:33].hex(), 16) # 原始crc

if crc32key == original_crc32: # 计算crc对比原始crc
print('宽高没有问题!')
else:
input_ = input("宽高被改了, 是否CRC爆破宽高? (Y/n):")
if input_ not in ["Y", "y", ""]:
exit()
else:
for i, j in itertools.product(range(4095), range(4095)):
# 理论上0x FF FF FF FF,但考虑到屏幕实际/cpu,0x 0F FF就差不多了,也就是4095宽度和高度
data = (bin_data[12:16] +
struct.pack('>i', i) +
struct.pack('>i', j) +
bin_data[24:29])
crc32 = zlib.crc32(data)
if crc32 == original_crc32:
# 计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
print(f"\nCRC32: {hex(original_crc32)}")
print(f"宽度: {i}, hex: {hex(i)}")
print(f"高度: {j}, hex: {hex(j)}")
exit(0)

将图片的宽高进行修改

接着再次打开图片即可得到flag