闲得无聊,好久没做题了。去vulnhub发现21年好多没做过。找了个Jangow: 1.0.1做做,以此记录。
导入到Vbox里正常启动。
虽然启动后控制台已经有IP了,但是假装不知道,先fping扫一下这个网段。
发现128和132,,128是我本机kali的IP,所以应该是132(和控制台提示也一样)
再使用nmap详细扫描
等了一下就看到80和21开着,让它先扫着。先看看这两个端口。
首先看看80。
进来以后发现一个目录,点击进去长下面这样。
随便点点。
首页下面有个框
试了试也没啥入口
这还有一个超链接,
点了一下跑到 https://startbootstrap.com/theme/grayscale 了。
再点点
发现这里点完跳转到 http://192.168.110.132/site/busque.php?buscar=
http://192.168.110.132/site/busque.php?buscar=
这个URL有点意思,,后面加个ls试试 http://192.168.110.132/site/busque.php?buscar=ls。
好吧,这里应该就是这道题的入口了。
回头看一眼nmap,
啥,,只有一个21和80,,系统类型unix,为啥连个22都没有,有点不太正常。
不过web里已经有命令注入了,那就用命令注入重新搜集一些基本信息吧。
系统类型:NAME=“Ubuntu” VERSION=“16.04.1 LTS (Xenial Xerus)” ID=ubuntu ID_LIKE=debian PRETTY_NAME=“Ubuntu 16.04.1 LTS” VERSION_ID=“16.04” HOME_URL=“http://www.ubuntu.com/” SUPPORT_URL=“http://help.ubuntu.com/” BUG_REPORT_URL=“http://bugs.launchpad.net/ubuntu/” UBUNTU_CODENAME=xenial
内核版本:Linux jangow01 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
当前用户:www-data
本机用户:有一个普通用户jangow01和root有shell权限
本机监听的端口:
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp6 0 0 :::80 :: LISTEN - tcp6 0 0 :::21 :: LISTEN - tcp6 0 0 :::22 :: LISTEN - tcp6 0 0 192.168.110.132:80 192.168.110.1:4352 TIME_WAIT - tcp6 0 0 192.168.110.132:80 192.168.110.1:4336 TIME_WAIT - tcp6 0 0 192.168.110.132:80 192.168.110.1:4374 ESTABLISHED - tcp6 0 0 192.168.110.132:80 192.168.110.1:4363 TIME_WAIT - tcp6 0 0 192.168.110.132:80 192.168.110.1:4337 TIME_WAIT -
本机监听的端口,看到了0.0.0.0:22 ,有22呀,nmap为啥没扫到。
手动试试,80可以,22还是不行。
继续搜集信息
当前运行服务:
看到一个防火墙ufw,且还是enabled。22端口正在监听。但是无法通,八成是22端口被拦截了。生产中大概率是物理防火墙做的,但是这个虚拟机,,,大概率是自带的ufw防火墙。
其它能用的端口,也确实像nmap扫描的那样,也就21端口还通着。试了一把匿名登录。无法登录。
好像也就web能下手了。
再看看web的目录有啥值得的信息
本来就没几个文件,找到一个config.php
php无法直接在浏览器打开,也懒得用bp。。就改个后缀复制一个
看一眼有个用户名和密码,但是没有ssh。只有个ftp,,用ftp试了试,这个用户名密码无法登录。
根据搜集的系统信息,找个本地提权exp。先试试45010.c。。
因为暂时没有交互shell,,所以我们需要exp可以直接执行脚本文件,将main函数改为,mysh.sh是我们一会儿要自己写的东西。
先看看这个机器上有没有编译工具。如果有的话,就传上去以后在目标机上编译,也少报错。。如果没有的话,我们可能需要在本地编译后再传上去,环境不一样也可能报错。
好的,有gcc。下面就是想办法把这个exp的源文件搞上去。
根据现有的信息,目前只有一个web命令注入可以继续动手,其它的ftp只能是爆破。看来只能用web命令注入来提权了。先传个shell进去吧。
搞了个webshell准备传进去。
使用web启用一个web。
使用命令注入传进去
先用确认下有没有wget 或者curl,是有的。
然后准备传进去,可是一直在转圈圈。
我只好试试将错误输出到文件。结果是这样,,,根本不通。。换curl也是一样。
得,完了,对外连接好像禁止了。这个机器貌似禁止访问外网,只有80和21两个端口提供监听。反弹shell不能用了。这……写个一句话木马进去吧。
直接写个python去连接它,执行一下,可以用。
将exp文件使用base64编码,以便分割传输文件或转码错误。然后使用脚本或bp、http等工具发送post请求将这个东西上传。
上传成功后应该可以看到这个文件。简单和源文件对一下。对比没啥错。
然后使用base64 解码(linux服务器一般都会有base64命令,)
对比完EXP也没啥问题。
改个名字,然后编译。
OK,编译成功。
然后就是搞一个mysh.sh试试了。看看能不能获取到权限。
直接执行./exp.out,看到exp后的mysh.sh,是以root权限执行的。也就意味着我们只要修改mysh.sh,mysh.sh里的文件都是以root权限执行的。
网络不通的问题,看看是不是本机防火墙吧(但是现实生产中,可能是前端的安全设备做的策略,搞起来可能更费劲,这里只是个题,所以大概率是本机防火墙)。
**呃,是防火墙!!!我当时看到这个的时候,是想要吐血的。**简单说下这个防火墙的规则,,,允许外部访问本机的80 和21端口,,允许本机主动访问外部的TCP443端口,,这个如果当时反弹shell我的python HTTP使用443端口而不是8000,,wget 是可以下载webshell的。。。唉!!!!!!
所以可以直接用TCP443反弹shell。现在先不关防火墙,试试443端口。
先将webshell 中反弹的端口改成443。
然后使用python在443端口启动服务
下载shell。
监听反弹
然后执行
nc已经得到shell了。
进到web目录
把防火墙关了,然后新增个后门用户hello,密码hello123
果然是这样,,防火墙关了以后,使用刚刚创建的用户可以直接进来了。
将exp.c中的文件修改为原来是,然后重新编译
这次是在ssh的命令行里拿到root权限了。。。做到这基本就算完了。。。有时间再研究一下那个ftp服务。现在还不清楚是用来干啥的。。