第二届"Parloo 杯"CTF 应急响应挑战赛
城南花已开 Lv6

Misc

签到

正常发送消息,签到即可

1
palu{parlooisgood}

screenshot

调整图片对比度,亮度,等细节

image

时间折叠

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hex_bytes = [
"fe","ef","e2","fb","f5","da","e6","e7","fd","d1",
"e7","fd","d1","cf","d1","dd","ef","e3","fe","e2",
"eb","d1","c8","e2","ef","e9","d1","cd","e6","ef",
"e0","e9","eb","d1","c3","eb","af","af","f3"
]

# 先转成int
data = [int(b,16) for b in hex_bytes]

# 试异或0xff,或者0xa0,看看是否有可读字符
for key in range(256):
decoded = ''.join(chr(b ^ key) for b in data)
if all(32 <= ord(c) <= 126 or c in '\n\r\t' for c in decoded):
print(f"Key={key:02x}: {decoded}")

image

1
palu{This_is_A_Sample_Flag_Change_Me!!}

Reverse

PositionalXOR

问GPT即可

image

1
palu{PosltionalXOR_sample}

Crypto

欧几里得

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from Crypto.Util.number import *
from tqdm import tqdm

# Paillier 解密输出值
c = 1426774899479339414711783875769670405758108494041927642533743607154735397076811133205075799614352194241060726689487117802867974494099614371033282640015883625484033889861

# 假设 n 是大于 c 的大素数,因此直接用 c 作 mod n 时的上界
n = c + 1 # 或你已知的实际 n,最好替换成真实值

for i in tqdm(range(0, 65536)):
r = i.to_bytes(2, 'big')
m2_bytes = r * 35
m2 = bytes_to_long(m2_bytes)

m1_candidate = (c - m2) % n
try:
flag = long_to_bytes(m1_candidate)
if flag.startswith(b"palu{"):
print(f"[+] Found: {flag.decode()}")
break
except:
continue
1
palu{48b635a7a2474ef743e333478b67a2f5}

Web

CatBank

测试得知可以随意转账,导致自己余额变为负数

那就注册两个账号,左右手互倒,这样就有一百万余额了,随意转账后出现flag

image

1
palu{6e0b8b6383864964ac383d4b9ea3e143}

畸形的爱

攻击者ip地址1:

查看web日志,分别尝试ip

image

1
palu{192.168.31.240}

攻击者ip地址2:

查看容器中的脚本文件

image

1
palu{192.168.31.11}

暴力破解开始时间:

flag1

利用everything直接搜flag即可

image

1
palu{pc3_zgsfqwerlkssaw}

flag2:

PC2的edge中发现下载了notepad++,利用everything搜索

image

1
palu{nizhidaowoyouduoainima}

flag3:

数据库中查询,base64解码即可

image

1
2
root@ubuntu:/tmp# echo "W3siaXRlbV9pZCI6MSwiaXRlbV9uYW1lIjoiZmxhZzNwYWx1e3NxbGFhYmJjY3Nid2luZG93c30iLCJxdWFudGl0eSI6MiwicHJpY2UiOjE5OS45OX0seyJpdGVtX2lkIjozLCJpdGVtX25hbWUiOiLoi7Hlm73lpI3ljbAiLCJxdWFudGl0eSI6MSwicHJpY2UiOjU5Ljk5fV0="|base64 -d
[{"item_id":1,"item_name":"flag3palu{sqlaabbccsbwindows}","quantity":2,"price":199.99},{"item_id":3,"item_name":"英国复印","quantity":1,"price":59.99}]
1
palu{sqlaabbccsbwindows}

钓鱼文件的哈希32位大写:

image

1
2
❯ md5sum 简历.exe|awk '{print $0}' |sed 's/.*/\U&/g'
2977CDAB8F3EE5EFDDAE61AD9F6CF203 简历.EXE

palu包裹即可

1
palu{2977CDAB8F3EE5EFDDAE61AD9F6CF203}

webshell密码1:

查看一句话木马

image

1
palu{hack}

提交攻击者开放端口

攻击者开放端口1:

同第二题

1
1133

攻击者开放端口2:

读一下r.sh

image

由于我靶机重启过了,所以/tmp/r.sh自动删除了

1
1144

攻击者开放端口3:

简历.exe放到奇安信云沙箱中

image

最后拼接上述端口

1
palu{1133,1144,8084}

webshell密码2:

webserver/var/www/html

image

1
palu{00232}

隐藏账户的密码:

[溯源]攻击者的邮箱:

[溯源]flag4:

应急响应主线

1.提交堡垒机中留下的flag

由于不知道密码,进docker改一下密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@ubuntu:/opt/jumpserver/config# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7b9821a2913 jumpserver/web:v4.9.0-ce "/docker-entrypoint.…" 13 days ago Up 20 minutes (healthy) 0.0.0.0:80->80/tcp, :::80->80/tcp jms_web
e9bb351c5252 jumpserver/core:v4.9.0-ce "./entrypoint.sh sta…" 13 days ago Up 20 minutes (healthy) 8080/tcp jms_core
d38df5fc7a66 jumpserver/core:v4.9.0-ce "./entrypoint.sh sta…" 13 days ago Up 20 minutes (healthy) 8080/tcp jms_celery
c36bd06217b5 jumpserver/koko:v4.9.0-ce "./entrypoint.sh ./k…" 13 days ago Up 20 minutes (healthy) 0.0.0.0:2222->2222/tcp, :::2222->2222/tcp jms_koko
f68635ed6655 jumpserver/chen:v4.9.0-ce "./entrypoint.sh wisp" 13 days ago Up 20 minutes (healthy) 8082/tcp jms_chen
9b642edcfc15 jumpserver/lion:v4.9.0-ce "./entrypoint.sh sup…" 13 days ago Up 20 minutes (healthy) 8081/tcp jms_lion
dc846fe14926 postgres:16.3-bullseye "docker-entrypoint.s…" 13 days ago Up 20 minutes (healthy) 5432/tcp jms_postgresql
f5fd5b403a6d redis:7.0-bullseye "docker-entrypoint.s…" 13 days ago Up 20 minutes (healthy) 6379/tcp jms_redis
root@ubuntu:/opt/jumpserver/config# docker exec -it e9bb /bin/bash
root@jms_core:/opt/jumpserver# cd apps/
root@jms_core:/opt/jumpserver/apps# python manage.py shell
Python 3.11.12 (main, Apr 9 2025, 18:22:21) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from users.models import User
>>> u = User.objects.get(username='admin')
>>> u.reset_password('password')
>>> u.save()
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
root@jms_core:/opt/jumpserver/apps#

藏在标签列表

image

1
palu{2025_qiandao_flag}

通过设置MFA后添加令牌,即可查看各个虚拟机的密码

image

2.提交WAF中隐藏的flag

连上ssh后

同样的,重置密码,得到重置后的凭证为admin:NBADvFlh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@ubuntu:/home/ubuntu# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a54db0d2a415 swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-luigi:8.6.0 "/bin/sh -c /app/lui…" 13 days ago Up 43 minutes 80/tcp safeline-luigi
a0a6bbd86673 swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-mgt:8.6.0 "/docker-entrypoint.…" 13 days ago Up 43 minutes (healthy) 80/tcp, 0.0.0.0:9443->1443/tcp, [::]:9443->1443/tcp safeline-mgt
2a0b15505f26 swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-fvm:8.6.0 "/app/fvm /app/confi…" 13 days ago Up 43 minutes safeline-fvm
bbef8add0472 swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-postgres:15.2 "docker-entrypoint.s…" 13 days ago Up 43 minutes (healthy) 5432/tcp safeline-pg
23f453dcc6be swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-detector:8.6.0 "/detector/entrypoin…" 13 days ago Up 43 minutes (healthy) 8000-8001/tcp safeline-detector
b02f080a22ee swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-chaos:8.6.0 "./entrypoint.sh /us…" 13 days ago Up 43 minutes 8080/tcp, 9000/tcp safeline-chaos
a60b8093c155 swr.cn-east-3.myhuaweicloud.com/chaitin-safeline/safeline-tengine:8.6.0 "entrypoint.sh nginx…" 13 days ago Up 43 minutes safeline-tengine
root@ubuntu:/home/ubuntu# docker exec -it a0a6 resetadmin
2025/05/17 06:07:36 [INFO] model/user.go:168 admin password has been reset
[INFO] Initial username:admin
[INFO] Initial password:NBADvFlh
[INFO] Done

访问192.168.60.102:9443登录即可

image

1
palu{2025_waf}

3.提交Mysql中留下的flag

使用堡垒机登录mysql,查询即可

image

1
palu{Mysql_@2025} 

4.提交攻击者的攻击IP

在waf中查看拦截ip

image

只有三个ip,分别尝试下,最终确定为108

1
palu{192.168.20.108}

5.提交攻击者最早攻击时间flag格式为palu{xxxx-xx-xx-xx-xx-xx}

6.提交web服务泄露的关键文件名

image

1
palu{key.txt}

7.题解泄露的邮箱地址

查看私钥备注信息

image

1
palu{[email protected]}

8.提交立足点服务器ip地址

通过查看sshserver/tmp/result.txt中的信息得知

1
palu{192.168.20.108}

9.提交攻击者使用的提权的用户和密码

10.提交攻击者留下的的文件内容作为flag提交

sshserver找到即可

image

1
palu{hi_2025_parloo_is_hack}

11.提交权限维持方法的名称

12.提交攻击者攻击恶意服务器连接地址作为flag提交

strings查看id程序的字符串信息

image

1
palu{47.101.213.153}

13.找到系统中被劫持的程序程序名作为flag提交

ssh连上sshserver服务器

通过dpkg查看最近修改的文件

image

1
palu{id}

14.找到系统中存在信息泄露的服务运行端口作为flag提交

image

1
palu{8081}

15.提交Parloo公司项目经理的身份证号作为flag提交

image

1
palu{310105198512123456}

16.提交存在危险功能的操作系统路径作为flag提交。flag格式为palu{/xxx/xxx}

雷池waf中查看应用即可

image

image

1
palu{/admin/parloo}

17.提交进源机器中恶意程序的MD5作为flag进行提交。 flag格式为palu{MD5小写}

18.提交攻击者留下的恶意账户名称md5后作为flag进行提交。 格式为palu{md5{xxxxx}}

image

1
palu{d78b6f30225cdc811adfe8d4e7c9fd34}

19.提交内部群中留下的flag并提交

image

1
palu{nbq_nbq_parloo}

20.请提交攻击者使用维护页面获取到的敏感内容作为flag进行提交

image

1
palu{Server_Parloo_2025}

21.提交获取敏感内容IP的第一次执行命令时间作为flag进行提交。flag格式为palu{xxxx-xx-xx:xx:xx:xx}

利用head命令只查看开头内容

image

1
palu{2025-05-04:15:30:38}

22.提交攻击者使用的恶意ip和端口flag格式为palu{xx.xx.xx.xx:xxxx}

查看日志筛选即可

image

1
palu{10.12.12.13:9999}

23.提交重要数据的内容作为flag提交

不是很明白这给为啥不对

image

24.提交恶意维权软件的名称作为flag进行提交

image

1
palu{svhost}

25.提交恶意程序的外联地址

image

将python打包的exe,反编译一下

26.提交攻击这使用的恶意dnslog域名作为flag进行提交

得到好几个dnslog域名,分别尝试提交下,最终为np85qqde.requestrepo.com

image

1
palu{np85qqde.requestrepo.com}

27.提交寻找反序列化漏洞的端口作为flag进行提交

可以从进程信息中得知是java的反序列化

1
2
3
4
5
6
7
8
9
10
11
12
root@ubuntu:/opt# ls -la
total 22264
drwxr-xr-x 5 root root 4096 May 13 16:32 .
drwxr-xr-x 23 root root 4096 May 17 07:48 ..
drwxr-xr-x 13 root root 4096 May 17 05:23 1panel
-rw-rw-r-- 1 ubuntu ubuntu 22775728 May 13 15:49 adminAF.jar
drwx--x--x 4 root root 4096 May 3 16:30 containerd
drwxrwxrwx 2 root root 4096 May 4 15:29 parloo
root@ubuntu:/opt# ps aux |grep java
ubuntu 842 0.2 5.9 3620160 235408 ? Ssl 05:23 1:18 /usr/bin/java -jar /opt/adminAF.jar
root@ubuntu:/opt# ss -luntp |grep java
tcp LISTEN 0 100 *:9999 *:* users:(("java",pid=842,fd=9))

image

1
palu{9999}

28.提交web服务泄露的密钥作为flag进行提交

从应用路由中可以看到存在heapdump泄露

利用Releases · whwlsfb/JDumpSpider

提取敏感信息

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
F:\Downloads>java -jar JDumpSpider-1.1-SNAPSHOT-full.jar "heapdump (1)"
………………………………

CookieRememberMeManager(ShiroKey)
-------------
algMode = CBC, key = QZYysgMYhG6/CzIJlVpR2g==, algName = AES

===========================================
OriginTrackedMapPropertySource
-------------
management.endpoints.web.exposure.include = *
spring.thymeleaf.encoding = UTF-8
management.endpoint.health.show-details = always
spring.thymeleaf.cache = true
spring.thymeleaf.content-type = text/html
server.port = 9999
spring.thymeleaf.check-template = true
management.endpoints.jmx.exposure.include = *


…………………………………………
UserPassSearcher
-------------
org.apache.shiro.web.filter.authc.FormAuthenticationFilter:
[failureKeyAttribute = shiroLoginFailure, loginUrl = /login, successUrl = /, usernameParam = username, passwordParam = password]

org.apache.catalina.startup.Tomcat:
[hostname = localhost]


………………………………

尝试cookie中的key作为答案

1
palu{QZYysgMYhG6/CzIJlVpR2g==}

29.提交攻击者开始攻击的时间作为flag进行提交。flag各式为palu{xxxx/xx/xx:xx:xx:xx}

30.提交攻击者在server中留下的账户密码作为flag进行提交。flag格式为palu{username/password}

查看/etc/shadow内容

1
2
root@ubuntu:/opt# tail -n 1 /etc/shadow
parloohack:$y$j9T$RlIs4rqy6D2PI46ntcuwZ0$WFD6WgX3XC4zp/5Y.Jq9yLcfhHK5Rdg6IeDq2Rrl791:20221:0:99999:7:::

将拿到的hash爆破一下,得到密码123456

1
2
3
4
5
6
7
8
9
10
11
❯ john hash --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt
Using default input encoding: UTF-8
Loaded 1 password hash (crypt, generic crypt(3) [?/64])
Cost 1 (algorithm [1:descrypt 2:md5crypt 3:sunmd5 4:bcrypt 5:sha256crypt 6:sha512crypt]) is 0 for all loaded hashes
Cost 2 (algorithm specific iterations) is 1 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (?)
1g 0:00:00:00 DONE (2025-05-18 00:18) 4.166g/s 400.0p/s 400.0c/s 400.0C/s 123456..yellow
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

所以拼接得到

1
palu{parloohack/123456}

31.提交攻击者维权方法的名称作为flag进行提交

32.提交攻击者留下的木马md5后作为flag进行提交

image

1
palu{4123940b3911556d4bf79196cc008bf4}

33.提交攻击者留下的溯源信息作为flag进行提交

查看命令执行的log日志即可

Chrome中的密码管理器

image

1
palu{X5E1ykIz1oAdyHBZ}

34.提交攻击者的githubID作为flag进行提交

在33题中的用户名就是QQ号

搜索qq空间即可

image

1
ParlooSEc

35.提交攻击者在github下留下的的内容作为flag进行提交

image

1
palu{s5o3WkX33hptyJjk}

36.提交恶意用户的数量作为flag进行提交

不知到为什么是99,从 01 到 100(包括两端)不是100吗

image

1
palu{99}

37.提交恶意用户的默认密码作为flag进行提交

查看隐藏文件,有个vbs脚本,代码明文写了密码

image

1
palu{123456}

38.提交业务数据中攻击者留下的信息作为flag进行提交

image

1
palu{crP1ZIVfqrkfdhGy}

39.提交私人git仓库中留下的内容作为flag进行提交

修改gitea密码进入查看即可

1
2
224d7f8df25c:/data/gitea/conf$ gitea admin user change-password --username admin --password password --config /data/gitea/conf/app.ini
admin's password has been successfully updated!

image

1
palu{FO65SruuTukdpBS5}

40.提交存在在mysql服务器中的恶意程序的MD5作为flag进行提交

image

1
palu{ba7c9fc1ff58b48d0df5c88d2fcc5cd1}

41.提交恶意程序中模拟c2通信的函数名称作为flag进行提交

分析mysql服务器中的.a恶意程序

如同所示,去掉小括号

image

1
palu{simulate_network_communication}

42.提交恶意程序创建隐藏文件的名称作为flag提交

同上

image

1
palu{.malware_log.txt}

43.提交恶意程序中模拟权限提升的函数作为flag进行提交

同41题,就不上图了

1
palu{simulate_privilege_escalation}

44.提交被钓鱼上线的用户名作为flag进行提交

image

1
palu{Parloo-子怡}

45.提交恶意程序的所在路径作为flag进行提交

image

46.分析恶意程序的反连地址作为flag进行提交

server01服务器中存在aa程序,将恶意程序下载到本地,分析一下

image

1
palu{47.101.213.153}

47.提交恶意c2的服务器登录的账号密码作为flag进行提交。flag格式为palu{username/password}

image

1
palu{admin/admin@qwer}
总字数 633.1k
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务