Enumeration
nmap
首先扫描目标端口对外开放情况,第一轮扫描发现对外开放了22,80,9001三个端口,端口详细信息如下
TCP/9001
9001端口挺神奇,nmap给出的结果是在9001端口运行着Medusa Supervisor,访问站点发现了一个登录框
在谷歌中搜索 ,查看默认用户名密码
尝试使用该用户名密码登录
看起来是在监控一些程序的运行,可以对服务进行重启,关闭,清除日志等操作 点击Tail -f Stdout,会返回系统正在运行的一些进程
可以看到有两个httpd正在运行,一个在3001端口,一个在3000端口
首先看3001端口,运行它的用户是r.michaels,目录为/home/r.michaels/devel/www下运行,可能是开发服务 而3000端口的运行用户为_httpd,目录为/var/www,可能是生产服务
对80端口的进一步探索标明,该nginx服务器被用作3000端口上运行的httpd的反向代理
在谷歌中搜索/usr/libexec/httpd,发现一个手册页,点进该手册页,进程指令是/usr/libexec/httpd -u -X -s -i 127.0.0.1 -I 3000 -L weather /usr/local/webapi/weather.lua -U _httpd -b /var/www
根据手册页内容显示,-L表示添加一个新的lua脚本,当触发特定url时,会执行lua函数,因此-L weather很有可能是 一个web目录,但是访问http://10.10.10.218/weather并没有展示有趣的东西
尝试扫描目录,发现该目录下存在forecast,且状态码为200
尝试访问结果如下
按照提示添加参数city=list,可以看出给出了一个城市列表
指出城市London,会收到下面的响应,可以看到列出了从今天开始很多天的天气预报
需要注意的是,城市的首字母应该大写,刚才输入london,收到的是状态码为500的错误
但是也提示了,如果输入的城市名不在列表中或拼写错误,系统会报错 在谷歌中搜搜lua httpd vuln,得到如下结果
lua code injection
但是先要考虑如何闭合,添加单引号
经过尝试,在下面的情况中,返回与最初报错相同
然后在后面添加payload,发现确实返回了id
那么就可以使用一个反向shell连接回来
监听得到shell
Lateral Movement
当前目录下有.htpasswd文件,保存了webapi_user的hash
然后使用john暴力破解hash值,得到密码webapi_user:iamthebest
使用用户名和密码可以登录80端口的http服务,但是并没有什么有趣的
查看home目录,发现只有一个r.michaels用户
而之前探索得到这个用户在3001端口运行了一个httpd服务,使用刚才获取的用户名和密码可以认证成功
进而发现了一个id_rsa目录,访问得到了一个私钥
将该密钥保存后,赋予权限,然后可以登录ssh
Privilege Escalation
在r.michaels目录中发现了一个.gnupg
搜索得知gnupg是一个用于加密加签的软件
然后在backups目录中,有一个压缩文件
在NetBSD中可以使用netgpg来解密,首先复制一份到/tmp目录,然后解密
解压输出的文件
打开.htpasswd,发现一个新的密码
使用john解密得到密码
在BSD上与sudo -l等效的是doas,首先找到并查看该配置文件
因为允许r.michaels以root权限执行,所以可以利用,输入刚才获取的密码,成功切换至root