xerxes: 1
项目地址:https://download.vulnhub.com/xerxes/xerxes.tar.gz
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本

80 端口

目录扫描到一个文件上传,但是没有密码

CTF
RGBA 颜色解密
点击忘记密码拿到一个二维码

在线网站扫描拿到一段字符串

Base64 解码得到
1 | look deeper |
放大图片发现有色块

在 PS 等软件中查看颜色发现只有 A 变化

记录下来
1 | 75,121,115,114,75,121,115,114,87,122,52,114,75,121,115,114,75,121,115,114,75,122,119,116,88,84,52,114,75,121,115,114,76,105,115,117,76,83,48,116,76,83,52,116,76,105,52,61 |
转成 ASCII 码
1 | KysrKysrWz4rKysrKysrKzwtXT4rKysrLisuLS0tLS4tLi4= |
Base64 解码
1 | ++++++[>++++++++<-]>++++.+.----.-.. |
Brainfuck 解密拿到密码
1 | 45100 |
文件上传
Upload
直接传 PHP 木马被拦截了

改了一下后缀上传成功

连接成功

提权
权限配置不当
进入家目录发现 amanpour 用户的目录可以进去

观察历史命令

把脚本内容扔给 AI 结合命令分析
1 | import Image, sys, getopt |


按照 AI 的结果执行阶段 6 的命令拿到一串字符

结果 SSH 直接连接上去了

Pickle 反序列化
查找所有有 SUID 权限的文件
1 | find / -perm -4000 -type f 2>/dev/null |
发现一个 /opt/notes

进入到 /opt 目录下发现有个 notes.py 文件

查看源代码
1 | import pickle |
在目标程序中,load 函数读取用户指定的文件,并用 pickle.load 解析其内容
如果攻击者能够控制 filename,并在 /home/curtiz/ 目录下放置一个精心构造的 pickle 文件,那么当程序执行 load 时,就会触发恶意代码
1 | def load(filename): |
在 Linux 权限模型中:
RUID (Real UID): 启动进程的真实用户 ID
EUID (Effective UID): 进程执行时生效的用户 ID
尝试 Pickle 反序列化提权到 curtiz 用户上
该文件中的对象 __reduce__ 方法返回 (os.system, (cmd,)),即反序列化时会执行 os.system(cmd)
1 | ┌──(root㉿kali)-[/home/kali] |

Python 升级为交互式 Shell
1 | python -c 'import pty;pty.spawn("/bin/bash")' |

SSH 私钥泄露
进入到家目录中发现 notes 线索

翻译一下
1 | 我找到了 Marie 的密钥文件,并且能够通过 SSH 登录 |
去找这个用户

在当前用户家目录中发现还有一个 id_rsa 文件
1 | -----BEGIN RSA PRIVATE KEY----- |
使用私钥连接这个用户成功

密码泄露
在家目录中找到两个可执行脚本

第一个脚本用于:
检查一个名为 “last”(或包含 “last”)的文件
如果该文件超过 24 小时未更新,认为密码已过期
提示用户更新密码
1 | !/bin/sh |
第二个脚本用于:
创建密码标记:通过
touch .last更新或创建时间戳文件生成随机密码:基于当前时间的 MD5 哈希值
显示密码:输出格式化的密码信息
1 | !/bin/sh |
现在我们需要找到 “.last” 文件创建时间时间戳
1 | stat .last |
接下来需要获取其 MD5 哈希值
1 | echo 00:19:51 |md5sum |
提权成功
