一次心血来潮VulnHub-Chronos
background:
寒假这个月基本都是在休息,也没做啥事情。突发奇想就想做做vulnhub,以前都是看着wp做的,想试试自己独立思考的过程。现在看自己四年前vulbhub的笔记,当时都是不能知其所以然,随着后面实战项目越来越多自己的各方面能力都能得到提升。才能了解这个逻辑。
所以这次就想看看自己水平到底怎么样了,哪知道下的这个靶场是nodejs的,我第一次接触,没办法不会做的又看了wp。https://www.vulnhub.com/entry/chronos-1,735/
自己的成果
都配置好hosts解析了,一开始想试试nodejs反序列化的,后来发现了口子是base58编码,一直以为这里是nodejs格式化字符串的漏洞。需要拼接nodejs代码实现rce,没想到就是朴实无华的exec。我真没看出来,要是我能看出来那段字符串是date命令的话,也许结果就不一样了。
漏洞点
直接访问没东西 看到js了这个请求地址 所以就想到改hosts
比较有意思的一点就是谷歌浏览器里面访问不了 得去火狐里面
后面看了源码知道是限制了user-agent。需要是Chronos才行,我感觉应该是谷歌浏览器渲染js机制的问题。
访问接口得到的就是时间
解密字符串
这里实际上执行的date命令 看到百分号我以为是格式化字符串的问题 我直接拼接nodejs的代码去了
所以直接拼接执行命令就行了 我base64编码了一下来反弹shell
HGJDfrQRz994SAFofCozWdrsEFqARARPZWEj65fKSAR7yEuyc6ZEoyrbCi3mfzVZts25UXww25j3gHfrGeGvd4DXAeLJCDKeJ5k1pXEn4 |
越权
发现有imera用户 但是读不了他的文件 所以得想办法拿到他的权限 试了暴力破解无果
网上的教程就是直接对着文件开怼了,当然也可以,但是正常的应该是看imera用户跑了哪些程序。
ps -aux一下
直接读/opt/chronos-v2/backend/server.js
const express = require('express'); |
看到这个服务跑在8080端口,我直接就上了个nps 实际上毛用也没有 多此一举
然后就无解了 实在是看不懂nodejs 看了wp后了解到这个洞 靶机有python3环境 直接本地发包就行了
#CVE-2020-7699 |
提权
拿了imera之后看下suid 可以执行node和npm
那就无脑上了 但是这里怎么执行我也懒得查了 直接看wp了(不知道咋执行nodejs……其实也不应该 psaux里都有执行命令)
加个sudo就root了
const { execSync } = require('child_process'); |
改exp弹shell即可,还要base64编码一下
const { execSync } = require('child_process'); |