第二届“Parloo”CTF应急响应挑战赛(应急响应题目复盘)

免责声明:本文仅作分享!

题目思路贴合一线实战,总结复盘一下。(当然做题归做题,玩法还是很多的)

目录

附件

畸形的爱--拓扑&资产

畸形的爱--题目

1.提交攻击者使用的攻击ip地址1

2.提交攻击者使用的攻击ip地址2

3.题解攻击者暴力破解开始时间

4.提交攻击者留下的flag1

5.提交攻击者留下的flag2

6.提交攻击者留下的flag3

7.提交钓鱼文件的哈希32位大写

8.提交攻击者留下的webshell-1密码

9.提交攻击者开放端口

10.提交攻击者留下的webshell密码2

11.提交攻击者留下的隐藏账户的密码

12.[溯源]攻击者的邮箱

13.提交溯源后得到的flag

应急响应--拓扑&资产

应急响应--题目

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

2.提交WAF中隐藏的flag

3.提交Mysql中留下的flag

4.提交攻击者的攻击IP

5.提交攻攻击者最早攻击时间

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

7.提交泄露的邮箱地址

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

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

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

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

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

13.找到系统中被劫持的程序程序名

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

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

16.提交存在危险功能的操作系统路径

17.提交进源机器中恶意程序的MD5

18.提交攻击者留下的恶意账户名称md5

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

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

21.提交获取敏感内容IP的第一次执行命令时间

22.提交攻击者使用的恶意ip和端口

23.提交重要数据的明文内容*

24.提交恶意维权软件的名称

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

26.提交攻击者使用的恶意dnslog域名

27.提交寻找反序列化漏洞的端口

28.提交web服务泄露的密钥

29.提交攻击者开始攻击的时间

30.提交攻击者在server中留下的账户密码

31.提交攻击者维权方法的名称

32.提交攻击者留下的木马md5

33.提交攻击者留下的溯源信息

34.提交攻击者的githubID

35.提交攻击者在github下留下的的内容

36.提交恶意用户的数量

37.提交恶意用户的默认密码

38.提交业务数据中攻击者留下的信息

39.提交私人git仓库中留下的内容

 40.提交存在在mysql服务器中的恶意程序的MD5

41.提交恶意程序中模拟c2通信的函数名称

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

43.提交恶意程序中模拟权限提升的函数

44.提交被钓鱼上线的用户名

45.提交恶意程序的所在路径

46.分析恶意程序的反连地址

47.提交恶意c2的服务器登录的账号密码


附件

附件下载地址:

百度网盘 https://pan.baidu.com/s/1otqDnpKTOEsPZQiWSE8ECg?pwd=6666 提取码: 6666 夸克网盘 https://pan.quark.cn/s/46653bd06cca

123云盘 https://www.123865.com/s/qDVvjv-zVBod 提取码:6666
解压密码:

应急响应环境解压密码网络拓扑环境 Skills@@@Skills@@@Skills

畸行的爱 Parloo&zgsfsys&onefox&solar**juyt

畸形的爱--拓扑&资产


畸形的爱--题目

1.提交攻击者使用的攻击ip地址1

webserver 中间件为nginx,日志分析

/var/log/nginx 目录下:

攻击者1上传了php文件(a.php)

2.提交攻击者使用的攻击ip地址2

PC01 win7 有一个  简历.exe , 沙箱分析判断此软件为恶意软件,查看本地网络外联

netstat -ano

3.题解攻击者暴力破解开始时间

要找时间最早的那个。暴力破解,时间集中。

webserver 查看本地网络,发现还有docker web

hacker最先爆破了phpmyadmin服务,查看其日志即可。

4.提交攻击者留下的flag1

PC02 win10 任务计划程序

5.提交攻击者留下的flag2

PC02 win10 任务管理器--最近使用的文件

6.提交攻击者留下的flag3

webserver web目录下有关于数据库的配置文件(密码)

sql server 登录数据库,查询数据。

base64解码即可

7.提交钓鱼文件的哈希32位大写

PC01 win7 简历.exe 上传到微步云沙箱分析

8.提交攻击者留下的webshell-1密码

webserver docker的web

9.提交攻击者开放端口

由2知,简历.exe 的外联端口 8084

webserver 定时任务  1144

webserver  docker web 的脚本 :   1133

10.提交攻击者留下的webshell密码2

webserver 本地web 

11.提交攻击者留下的隐藏账户的密码

PC02  win10 

发现,隐藏用户, Disk 提用户凭证 ,猕猴桃爆破 ,再暴hash

具体操作,见此文章:取证分析--磁盘取证(DiskGenius||PE)_[第十章][10.1.2 磁盘取证方法]磁盘取证-CSDN博客


12.[溯源]攻击者的邮箱

简历.exe 为恶意钓鱼文件,通过云沙箱或本地逆向分析

会得到攻击者的用户名   n0k4u

通过github邮箱反查即可。

https://api.github.com/users/n0k4u/events/public
https://api.github.com/users/<name>/events/public

当时可以,现在复盘再访问没数据了。正常访问此网站后,过滤@或email,就能得到邮箱。

或者

直接在提交的url后面加上 .patch 就可以看到纯文本形式的commit提交记录。

得到邮箱:

n0k4u@outlook.com

13.提交溯源后得到的flag

qq添加好友即可。

palu{loveyouibiejv}


应急响应--拓扑&资产

 


应急响应--题目

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

前三个题都在web界面,自己找就好。 (实在找不到可以去进系统命令行过滤一下)

2.提交WAF中隐藏的flag

3.提交Mysql中留下的flag

同步后直接下载,得到flag

4.提交攻击者的攻击IP

网络攻击web应用的流量先经过waf

看雷池 waf 攻击事件 ,分析源ip

5.提交攻攻击者最早攻击时间

由4知,攻击ip,找到最早的攻击时间即可。

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

web服务,被waf保护, 雷池waf--防护应用--找到80端口的详情--应用路由/静态资源

7.提交泄露的邮箱地址

key.txt (存储公私钥)里有

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

通过攻击源ip,我们可判断,hacker最先攻陷了资产(sshserver)

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

sshserver 登录 ,分析用户密码

john爆破parloo的hash,得出密码也为 parloo


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

ssh server   的 parloo用户目录下

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

systemctl list-units --type=service --state=running

发现2个可疑的文件,读一下看看

systemctl cat rootset-test.service
systemctl cat rootset.service

发现它总是重启此服务,基本可以确定。 rootset  


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

ssh server 网络外联 (多执行几次就有)

13.找到系统中被劫持的程序程序名

看12, 外联是由于b4b40c44ws ,可以确定此程序即为恶意程序。


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

server01 登录web界面 

访问,发现信息泄露


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

看14


16.提交存在危险功能的操作系统路径

waf即可看到gitea资产,访问--探索,发现源码


17.提交进源机器中恶意程序的MD5

PC03为进源机器,开机后发现 svhost文件有点问题,直接磁盘搜索此文件,发现

丢沙箱分析,即可判断为恶意程序。


18.提交攻击者留下的恶意账户名称md5

pc开机就知道了   hack


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

pc开机--内网通--群聊--聊天记录就有


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


21.提交获取敏感内容IP的第一次执行命令时间

server01 command.log

22.提交攻击者使用的恶意ip和端口

server01  command.log

10.12.12.13:9999

23.提交重要数据的明文内容*

pc3桌面上有一个  txt  : c3a1c3c13e326020c3919093e1260525045e

web资产有gitea ,waf上也能看到,直接进终端修改gitea登录的密码

gitea admin user change-password --username admin --password 你的新密码

发现 加密txt的脚本,给ai解密即可。

初步爆破密钥:

def custom_decrypt(encrypted_hex, key):
    encrypted_bytes = bytes.fromhex(encrypted_hex)
    decrypted = []
    key_bytes = [ord(c) for c in key]
    
    for i, byte in enumerate(encrypted_bytes):
        # 逆向替代操作
        xored = ((byte & 0x0F) << 4) | ((byte & 0xF0) >> 4)
        
        # 逆向异或操作
        xor_key = key_bytes[i % len(key_bytes)]
        shifted = xored ^ xor_key
        
        # 逆向移位操作
        char = shifted - (i % 5 + 1)
        decrypted.append(chr(char))
    
    return "".join(decrypted)

def find_key_with_known_plaintext(encrypted_hex, known_plaintext, max_key_length=5):
    encrypted_bytes = bytes.fromhex(encrypted_hex)
    possible_keys = []
    
    # 确定需要匹配的已知明文长度
    match_length = len(known_plaintext)
    
    # 尝试所有可能的密钥长度
    for key_length in range(1, max_key_length + 1):
        # 对于每个可能的位置开始匹配
        for start_pos in range(len(encrypted_bytes) - match_length + 1):
            # 尝试从该位置开始匹配已知明文
            partial_key = [0] * key_length
            valid = True
            
            for i in range(match_length):
                byte_pos = start_pos + i
                if byte_pos >= len(encrypted_bytes):
                    valid = False
                    break
                
                # 逆向计算密钥字节
                target_char = known_plaintext[i]
                encrypted_byte = encrypted_bytes[byte_pos]
                
                # 逆向替代
                xored = ((encrypted_byte & 0x0F) << 4) | ((encrypted_byte & 0xF0) >> 4)
                
                # 计算移位前的值
                shifted = ord(target_char) + (byte_pos % 5 + 1)
                
                # 计算密钥字节
                key_byte = xored ^ shifted
                key_pos = byte_pos % key_length
                
                # 检查密钥一致性
                if partial_key[key_pos] == 0:
                    partial_key[key_pos] = key_byte
                elif partial_key[key_pos] != key_byte:
                    valid = False
                    break
            
            if valid:
                # 构建完整密钥
                key = ''.join(chr(b) for b in partial_key)
                possible_keys.append((key, start_pos))
    
    return possible_keys

encrypted_text = "c3a1c3c13e326020c3919093e1260525045e"
known_plaintext = "palu{"

print("尝试根据已知明文部分查找密钥...")
possible_keys = find_key_with_known_plaintext(encrypted_text, known_plaintext, max_key_length=5)

if possible_keys:
    print("\n找到可能的密钥:")
    for key, pos in possible_keys:
        print(f"密钥: '{key}' (匹配位置: {pos})")
        decrypted = custom_decrypt(encrypted_text, key)
        print(f"完整解密: '{decrypted}'")
        print("-" * 50)
else:
    print("没有找到匹配的密钥")

密钥   MySec     ,猜测可能为   MySecretKey  (长度太大爆破时间太长,也可借鉴其他佬的思路)

密钥爆破明文:

def custom_decrypt(ciphertext, key):
    decrypted = []
    key_bytes = [ord(c) for c in key]
    for i in range(0, len(ciphertext), 2):
        hex_byte = ciphertext[i:i+2]
        substituted = int(hex_byte, 16)
        xored = ((substituted & 0x0F) << 4) | ((substituted & 0xF0) >> 4)
 
        xor_key = key_bytes[(i // 2) % len(key_bytes)]
        shifted = xored ^ xor_key
 
        original_char_code = shifted - ((i // 2) % 5 + 1)
        decrypted.append(chr(original_char_code))
 
    return ''.join(decrypted)
 
key = "MySecretKey"
ciphertext = "c3a1c3c13e326020c3919093e1260525045e"
plaintext = custom_decrypt(ciphertext, key)
print(plaintext)

24.提交恶意维权软件的名称

pc03 开机后,就会出现svhost软件有问题

看其路径,在开机自启动里

svhost


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

palu03 

解包--发编译pyc文件即可。

88.173.90.103


26.提交攻击者使用的恶意dnslog域名

server01  command.log


27.提交寻找反序列化漏洞的端口

在waf的攻击流量中直接找反序列化漏洞。

9999


28.提交web服务泄露的密钥

waf 查看web资产 , 发现存在heapdump泄露,访问,下载。

Release Auto Build - 20250409T071858 · whwlsfb/JDumpSpider

工具直接读取,

java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump 


29.提交攻击者开始攻击的时间

waf  9999端口的资产         访问日志


30.提交攻击者在server中留下的账户密码

server01   parloohack  john直接爆破即可。

123456


31.提交攻击者维权方法的名称

server01 系统服务

systemctl list-units --type=service --all

parloohack_script.service


32.提交攻击者留下的木马md5

server01  


33.提交攻击者留下的溯源信息

palu02   Google浏览器--密码管理

34.提交攻击者的githubID

33题,  841366067  为qq号

ParlooSEc


35.提交攻击者在github下留下的的内容


36.提交恶意用户的数量

palu01  

cmd:  net user


37.提交恶意用户的默认密码

palu01 

a.vbs:

--也可提取出那些恶意用户的凭证,猕猴桃爆破,再爆hash。


38.提交业务数据中攻击者留下的信息

业务数据 


39.提交私人git仓库中留下的内容

gitea  


 40.提交存在在mysql服务器中的恶意程序的MD5

mysql server 


41.提交恶意程序中模拟c2通信的函数名称

.a    ida本地逆向

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

43.提交恶意程序中模拟权限提升的函数

44.提交被钓鱼上线的用户名

palu02   内网通

Parloo-子怡


45.提交恶意程序的所在路径


46.分析恶意程序的反连地址

回执.exe   上传到云沙箱

47.101.213.153


47.提交恶意c2的服务器登录的账号密码

palu02   google浏览器--密码管理

admin/admin@qwer


<think>好的,我需要帮助用户了解如何搭建帕鲁杯应急响应相关的靶场环境,特别是使用GZ:CTF这个工具。首先,我应该回忆一下之前提到的GZ:CTF的信息,用户之前提到过它比CTFD好用,适合网络安全学习者。 用户的问题涉及帕鲁杯应急响应靶场的搭建,可能这个靶场是专门为某个比赛或培训设计的,可能包含特定的应急响应场景。我需要先确定GZ:CTF是否支持自定义场景,或者是否有相关的配置文档。根据之前的引用,GZ:CTF是一个开源靶场,所以可能需要从GitHub或其他平台获取源码。 接下来,我需要分步骤说明搭建过程。首先应该是系统环境的要求,比如操作系统、依赖项安装。然后可能涉及GZ:CTF的安装步骤,包括克隆仓库、安装依赖、配置数据库等。之后,可能需要指导用户如何导入或配置帕鲁杯应急响应的特定题目或场景,这可能包括Docker容器的配置、题目文件的设置等。 同时,用户提到了CTF安全测试,所以可能需要涉及如何设置漏洞环境、网络配置、权限管理等。另外,应急响应靶场可能模拟了攻击后的环境,需要配置日志分析、入侵检测等模块,这部分可能需要额外说明。 还需要考虑可能的常见问题,比如端口冲突、依赖项版本问题,以及如何测试靶场是否正常运行。最后,应该建议用户参考官方文档或社区资源,以应对更复杂的需求。 需要确保回答结构清晰,步骤详细,并且引用之前的资料,比如GZ:CTF的优势。同时,根据用户的要求生成相关问题,可能涉及其他靶场工具的比较、应急响应场景的设计等。</think>### 帕鲁杯应急响应靶场搭建教程 #### 1. 环境准备 - **系统要求**: Ubuntu 20.04/22.04 或 Debian 10+(推荐使用纯净系统) - **依赖安装**: ```bash sudo apt update && sudo apt install -y docker.io docker-compose git python3-pip ``` #### 2. 部署GZ:CTF基础平台 1. **克隆仓库**: ```bash git clone https://github.com/CTF-Archives/GZCTF.git cd GZCTF ``` 2. **配置文件修改**: - 编辑`docker-compose.yml`,设置数据库密码和Redis配置 - 修改`.env`中的`SECRET_KEY`和域名信息 3. **启动服务**: ```bash docker-compose up -d ``` 等待约5分钟,访问`http://localhost:8000`完成初始化[^1]。 #### 3. 导入应急响应场景 1. **题目配置**: - 创建`palu_emergency`目录,包含: - `docker-compose.yml`(定义漏洞环境) - `flag`文件(设置动态flag) - `check.py`(验证脚本) 示例漏洞环境配置: ```yaml version: '3' services: web: image: vulhub/thinkphp:5.0.23 ports: - "8080:80" ``` 2. **场景打包**: ```bash tar -czvf palu_emergency.tar.gz palu_emergency ``` 通过GZ:CTF管理后台导入题目包。 #### 4. 网络配置 - 使用`--network=bridge`隔离容器 - 在平台设置中开启「动态端口分配」功能 #### 5. 验证测试 ```bash docker ps # 查看运行中的容器 curl http://localhost:8080 # 测试漏洞环境 ``` #### 6. 进阶配置 - 日志监控:部署ELK栈收集攻击日志 - 流量镜像:使用tcpdump捕获攻击流量 $$ Wireshark过滤表达式示例: \quad tcp.port == 8080 $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值