今天选择的靶机是vuln的入门级CTF靶机,介绍如下:
HackinOS is a beginner level CTF style vulnerable machine. I created this VM for my university’s cyber security community and all cyber security enthusiasts.
废话不多说,开整。
祭出nmap对主机进行扫描,收获不少,不只找出了ssh和8000的http,还发现了upload.php页面和uploads目录,看来这就是入口点了,大体思路就是上传webshell然后想办法提权。
打开upload.php上传个gif试试,看出图片被上传到了uploads目录下
浏览器输入路径和文件名,发现没有找到这个文件,应该是上传后被修改了文件名,这样的话直接拿shell就有点费劲儿了,先试试能不能上传webshell吧。
在upload页面上传一个非图片的文件,页面给出了一个笑脸,看来这应该是上传失败了
打开浏览器的开发者模式,重新上传一次,在返回页面中有一行注释了的线索,给了一个github的链接,看来应该可以找到相关的代码。
打开链接看一看吧,给出的是upload.php的源码,从php代码来看,文件上传之后文件名被加了个1到100之间的随机整数,然后进行了md5。另外对上传的文件进行了判断,非png和gif的文件不能上传。
待解决的问题有两个,1是要遍历出被改的文件名,2是要躲过文件的检测。既然已经有了源码那么可以写一个脚本来把100个文件名遍历一遍,再用dirb去暴力跑一遍就OK啦,先用图片来验证,代码如下。
上传index.gif,然后用dirb进行扫描。
得到了正确的文件名,打开看看。
文件名的问题解决了,接下来看一下怎么骗过文件检测,php不熟,求助于baidu,得知这种检测只看文件头是否含有特定关键字,这就好办了,接下来用weevely生成webshell
在生成的php第一行加上GIF98这个关键字就可以跳过检测了。
修改之前的脚本猜测新的文件名,然后weevely获取shell。
新版本的weevely shell可以升级成为meterpreter shell,命令不在本文中介绍
在拿webshell的时候,发现上传的文件很快会被删除掉,所以这里在获取了一个shell后,又重新上传文件到非uploads的目录,在shell下ps,发现作者写了了一个定时执行删除命令的脚本,反正也换目录了,不去管它
在meterpreter 下,输入shell可以开启一个sh的shell,拿到shell后先不着急提权,先看看有没有什么可以利用的东西,根据上一次的经验,找到拥有root uid的程序提权将会很简单。所有用find命令搜索uid=0的程序
作者明显在这里给留下了线索,/usr/bin下有一个tail可以使用,用tail读取/etc/passwd或者/etc/shadow将直接可以拿到hash后的密码
使用john对拿到的hash进行破解,得到root的密码为john
用su切换到root,发现不可以执行
不知道如何解决,google之,找到解决方法,需要用python脚本
将这个脚本上传到靶机并运行,得到tty shell,可以执行su了
在/root下找到了flag,life consists of details..貌似还没完
在ifconfig中发现主机IP并不是我访问的IP,那看来这是个虚拟机或者docker
利用metasploit提供的脚本检测一下,发现这是个docker
看来作者给我开了个玩笑。继续挖掘,在wordpress的配置文件里找到了数据库的用户名和密码,还有数据库主机名为db,用ping来测试一下db的IP地址,IP为172.18.0.2
登陆数据库,发现里面有一个表叫host_ssh_cred,看来是ssh的用户名和密码了,dump出来看看吧
用户名hummingbirdscyber密码像是一个md5值,找个网站破解一下,得到了明文为123456
ssh成功登陆到靶机
查看docker情况,有三个容器在运行,先从ubuntu这个下手
docker exec发现ubuntu这个容器命令行无响应,google找到了另一个方法,利用ubuntu这个镜像重新创建一个docker并运行,在这个容器中找到了flag,看起来应该是成功了
这次渗透的关键点:
1,上传文件文件名和后台校验
2,检查所得到的shell主机是否是vm或docker