Solar应急响应月赛-7月 WP

assets/Solar应急响应月赛-7月 WP/image-20250730162723334.png

【题目信息】VOL_EASY

某企业服务器近日遭受隐秘入侵。安全团队通过日志溯源发现,黑客利用Web应用漏洞植入恶意后门,根据溯源的信息配合警方逮捕了黑客,安全团队已经紧急保存了黑客电脑的内存转储文件,请你开始取证以便固定证据。请根据题目文件,找出下面10条证据让罪犯服软吧!

这里用 volatility2 来做,练习一下命令

首先 imageinfo

vol2 -f vol_easy.vmem imageinfo

assets/Solar应急响应月赛-7月 WP/image-20250731011131120.png

profile 用 Win7SP1x64

【任务1】VOL_EASY

黑客上传的一句话木马密码是多少?

filescan 扫描文件,保存结果

vol2 -f vol_easy.vmem --profile=Win7SP1x64 filescan > filescan.txt

用 notepad-- 打开,文件中搜索,排查一下桌面,发现很多感兴趣的文件

assets/Solar应急响应月赛-7月 WP/image-20250731012201005.png

dumpfiles 导出 ezshell.php.txt ,-Q 指定 offset,-D 指定保存目录

vol2 -f vol_easy.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007ddf2280 -D .

assets/Solar应急响应月赛-7月 WP/image-20250731013325009.png

solar

【任务2】VOL_EASY

黑客使用的木马连接工具叫什么(比如xx.exe)?(仅首字母大写)

pslist 列出进程

vol2 -f vol_easy.vmem --profile=Win7SP1x64 pslist > pslist.txt

assets/Solar应急响应月赛-7月 WP/image-20250731013735769.png

Antsword.exe

【任务3】VOL_EASY

黑客使用的木马连接工具的位置在哪里(比如C:\xxxx\xx.exe) ?

cmdline 列一下程序启动的命令行

vol2 -f vol_easy.vmem --profile=Win7SP1x64 cmdline > cmdline.txt

assets/Solar应急响应月赛-7月 WP/image-20250731014043120.png

C:\Tools\AntSword-Loader-v4.0.3-win32-x64\AntSword.exe

【任务4】VOL_EASY

黑客获取到的FLAG是什么?

同【任务 1】导出 flag.txt 即可

flag{ok!get_webshell_is_good_idea~}

【任务5】VOL_EASY

黑客入侵的网站地址是多少(只需要http://xxxxx/)?

iehistory 导出浏览记录

vol2 -f vol_easy.vmem --profile=Win7SP1x64 iehistory > iehistory.txt

assets/Solar应急响应月赛-7月 WP/image-20250731014652438.png

http://192.168.186.140/

【任务6】VOL_EASY

黑客入侵时,使用的系统用户名是什么?

由 iehistory 得知

Administrator

【任务7】VOL_EASY

黑客创建隐藏账户的密码是多少?

dump 蚁剑内存看看

vol2 -f vol_easy.vmem --profile=Win7SP1x64 memdump -p 1716 -D .

创建用户猜测执行了 net user,010 打开搜索一下

assets/Solar应急响应月赛-7月 WP/image-20250731015112932.png

solar2025

【任务8】VOL_EASY

黑客首次操作靶机的关键程序是什么?

桌面中看到了 dump_lass.bat,导出

assets/Solar应急响应月赛-7月 WP/image-20250731015424701.png

lsass.exe

【任务9】VOL_EASY

该关键程序的PID是多少?

根据 bat 脚本中的关键字,010 检索得

assets/Solar应急响应月赛-7月 WP/image-20250731015556456.png

456

【任务10】VOL_EASY

该关键程序的内存文件保存到了什么地方?

同上题,可更改 010 编码为 UTF-8 方便检索

C:\phpstudy_pro\WWW\lsass.dmp

【题目信息】应急大师

这是一台被黑客入侵的服务器,安全团队有进行一些基础溯源。目前服务器已经断网处理,请你继续协助安全团队进行溯源分析,将整个证据链补充完整。服务器密码是qsnctf。

【任务1】应急大师

请提交隐藏用户的名称?

启动靶机即可看到

assets/Solar应急响应月赛-7月 WP/image-20250731015859596.png

solar$

【任务2】应急大师

请提交黑客的IP地址?

在 nginx 日志中即可看到,此 ip 有大量 post 请求,检查响应 php 文件,确定为木马

assets/Solar应急响应月赛-7月 WP/image-20250731020301723.png

192.168.186.139

【任务3】应急大师

请提交黑客的一句话木马密码?

assets/Solar应急响应月赛-7月 WP/image-20250731020437151.png

solar2025

【任务4】应急大师

请提交黑客创建隐藏用户的TargetSid(目标账户安全ID)?

在 windows 安全日志中,筛选创建用户事件ID 4720

assets/Solar应急响应月赛-7月 WP/image-20250731020725803.png

S-1-5-21-3845547894-970975367-1760185533-1000

【任务5】应急大师

请提交黑客创建隐藏账户的事件(格式为 年/月/日 时:分:秒)?

assets/Solar应急响应月赛-7月 WP/image-20250731020801496.png

2025/7/23 17:05:45

【任务6】应急大师

黑客将这个隐藏用户先后加入了哪几个用户组?提交格式为 第一个用户组-第二个用户组,如student-teacher

筛选加入本地组事件 ID 4732

assets/Solar应急响应月赛-7月 WP/image-20250731020957227.png

Users-Administrators

【任务7】应急大师

黑客通过远程桌面成功登陆系统管理员账号的网络地址及端口号?提交格式为 IP:PORT 如 127.0.0.1:41110

筛选登陆成功事 ID 4624,排查得到

assets/Solar应急响应月赛-7月 WP/image-20250731021902121.png

192.168.186.139:49197

【题目信息】公交车系统攻击事件排查

思而听公交系统被黑客攻击,黑客通过web进行了攻击并获取了数据,然后获取了其中一位驾校师傅在FTP服务中的私密文件,其后黑客找到了任意文件上传漏洞进行了GETshell,控制了主机权限并植入了挖矿网页挖矿病毒,接下来你需要逐步排查。

【任务1】公交车系统攻击事件排查

分析环境内的中间件日志,找到第一个漏洞(黑客获取数据的漏洞),然后通过分析日志、流量,通过脚本解出黑客获取的用户密码数据,提交获取的前两个用户名,提交格式:flag

在 /var/log/apache2 目录下导出日志 access.log

base64 解码后观察发现为 sqlmap 执行的 sql 盲注,且每个正确的字符都执行了 != 的判断,所以只匹配 != 的即可

写脚本简单处理一下,首先正则提取所有 query 请求参数,然后尝试 base64 解码,最后正则提取三个值

import re
import urllib.parse
import base64

# 日志中提取 GET 请求的 query 参数
query_pattern = re.compile(r'search\.php\?query=([^ ]+)')

# 只匹配 != 的 payload
payload_pattern = re.compile(r'LIMIT (\d+),1\),(\d+),1\)\)!=(\d+)')

# 解码 query
def decode_query(q):
    q = urllib.parse.unquote(q)
    #忽略非base64
    try:
        q = base64.b64decode(q).decode("utf-8")
    except:
        pass
    # print(q)
    return q

# 打开日志分析
with open("access.log", "r", encoding="utf-8") as f:
    for line in f:
        m = query_pattern.search(line)
        if not m:
            continue
        decoded = decode_query(m.group(1))
        p = payload_pattern.search(decoded)
        if p:
            row = int(p.group(1))
            pos = int(p.group(2))
            if(pos == 1):
                print()
            val = int(p.group(3))
            print(chr(val),end='')

assets/Solar应急响应月赛-7月 WP/image-20250731002456307.png

flag{sunyue-chenhao}

【任务2】公交车系统攻击事件排查

黑客通过获取的用户名密码,利用密码复用技术,爆破了FTP服务,分析流量以后找到开放的FTP端口,并找到黑客登录成功后获取的私密文件,提交其文件中内容,提交格式:flag

排查 home 目录,在 /home/wangqiang/ftp 下发现 FTP 文件

assets/Solar应急响应月赛-7月 WP/image-20250730181050166.png

INTERNAL_FTP_ADMIN_PASSWORD=FtpP@ssw0rd_For_Admin_Backup_2025

【任务3】公交车系统攻击事件排查

可恶的黑客找到了任意文件上传点,你需要分析日志和流量以及web开放的程序找到黑客上传的文件,提交木马使用的密码,提交格式:flag

在 /var/www/html/uploads 目录下发现 shell1. php

assets/Solar应急响应月赛-7月 WP/image-20250730181645404.png

flag{woaiwojia}

【任务4】公交车系统攻击事件排查

分析流量,黑客植入了一个web挖矿木马,这个木马现实情况下会在用户访问后消耗用户的资源进行挖矿(本环境已做无害化处理),提交黑客上传这个文件时的初始名称,提交格式:flag

根据上题得到的 shell1. php,响应为md5前十六位+base64+md5后十六位,推测为哥斯拉流量

使用 BlueTeamTools 解密哥斯拉流量,在 NO.72211 流量包中找到上传文件的流量包,解密得到文件名

assets/Solar应急响应月赛-7月 WP/image-20250730191127030.png

flag{map.php}

【任务5】公交车系统攻击事件排查

分析流量并上机排查,黑客植入的网页挖矿木马所使用的矿池地址是什么,提交矿池地址(排查完毕后可以尝试删除它)提交格式:flag

木马在 index. php,js 代码混淆了,找到了一串数字,跟踪一下函数发现调用了 fromCharCode,ascii 码解码得到矿池地址

assets/Solar应急响应月赛-7月 WP/image-20250730191604634.png

assets/Solar应急响应月赛-7月 WP/image-20250730191428686.png

flag{gulf.moneroocean.stream:10128}

B02-奇怪的加密器

糟糕!一个客户的服务器的一个文件被加密了,为了防止感染,我将其放入了回收站,请你快点恢复我的 flag 生成器!这非常重要!!!服务器密码是:qsnctf

import sys
from Crypto.Cipher import AES
from Crypto.Hash import SHA1, SHA256
from Crypto.Util.Padding import unpad

def try_decrypt(ciphertext, key, iv):
    for hash_algo in [SHA1, SHA256]:
        for encoding in ['utf-16le', 'utf-8']:
            try:
                h = hash_algo.new()
                h.update(key.encode(encoding))
                derived_key = h.digest()[:16]
                
                cipher = AES.new(derived_key, AES.MODE_CBC, iv)
                decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size)
                
                if decrypted[:2] == b'MZ':
                    return decrypted, f"Success with {hash_algo.__name__} and {encoding}"
            except (ValueError, KeyError):
                continue
    return None, "All attempts failed"

def decrypt_file(encrypted_file, output_file, key):
    with open(encrypted_file, 'rb') as f:
        data = f.read()
    
    for iv_size in [16, 32, 0]: 
        if iv_size == 0:
            iv = bytes(16)
            ciphertext = data
        else:
            iv = data[:iv_size]
            ciphertext = data[iv_size:]
        
        decrypted, msg = try_decrypt(ciphertext, key, iv)
        if decrypted:
            print(msg)
            with open(output_file, 'wb') as f:
                f.write(decrypted)
            print(f"Successfully decrypted to {output_file}")
            return
    
    print(data[:32].hex())

if __name__ == "__main__":
    
    print("Usage: python decrypt.py <encrypted_file> <output_file>")
    encrypted_file = sys.argv[1]
    output_file = sys.argv[2]
    key = "secret_key_1234"  
    
    decrypt_file(encrypted_file, output_file, key)
posted @ 2025-07-31 02:20  PengSoar  阅读(327)  评论(0)    收藏  举报