PrestaShop

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Perl backticks/qx// Apache mod_perl handler'larında sink'ler (reachability and exploitation)

Gerçek dünya deseni: Perl kodu bir shell komut dizgesi oluşturur ve backticks (veya qx//) ile çalıştırır. Bir mod_perl AccessHandler içinde, $r->uri() gibi saldırgan tarafından kontrol edilen istek bileşenleri bu dizeye akabilir. Eğer herhangi bir dal ham girdiyi birleştirip ardından bir shell ile değerlendiriyorsa, pre-auth RCE elde edersiniz.

Riskli Perl yürütme primitive'leri (tek bir string verildiğinde shell başlatır):

  • Backticks / qx//: my $out = cmd ...;
  • system with a single string: system("/bin/sh -c '...'") implicitly
  • open with a pipe: open my $fh, "cmd |" or "| cmd"
  • IPC::Open3 with a single string

Gerçek dünyada gözlemlenen minimal zafiyetli yapı:

perl
sub getCASURL {
...
my $exec_cmd = "...";
if ($type eq 'login') {
$exec_cmd .= $uri;        # $uri from $r->uri() → attacker-controlled
my $out = `$exec_cmd`;    # backticks = shell
}
}

mod_perl'de ana erişilebilirlik hususları:

  • Handler registration: httpd.conf istekleri Perl modülünüze yönlendirmeli, örn. PerlModule MOD_SEC_EMC::AccessHandler ve bir path scope için AccessHandler::handler'ı çağıran yapılandırma.
  • Triggering the vulnerable branch: yetkilendirilmemiş login akışını zorlayın ki type == "login" olsun (örn. beklenen auth cookie'yi göndermeyin).
  • Resolvable path: isteğinizin yapılandırılmış kapsam içinde çözülen bir URI'yi hedeflediğinden emin olun. Apache isteği handler üzerinden hiç yönlendirmezse, sink'e ulaşılamaz.

Exploitation workflow

  1. httpd.conf'yi PerlModule/MOD_PERL handler kapsamları açısından inceleyin ve handler tarafından işlenen çözülebilir bir path bulun.
  2. Yetkilendirilmemiş bir istek gönderin ki login yönlendirme yolu seçilsin (type == "login").
  3. request-URI yoluna shell metacharacters yerleştirin, böylece $r->uri() payload'unuzu komut dizisine taşır.

Example HTTP PoC (path injection via ';')

http
GET /ui/health;id HTTP/1.1
Host: target
Connection: close

İpuçları

  • Ayırıcıları deneyin: ;, &&, |, backticks, $(...), ve kodlanmış yeni satırlar (%0A) alıntılamaya bağlı olarak.
  • Eğer önceki yamalar diğer argümanları quote edip ama bir dalda URI'yi quote etmiyorsa, dizenin sonuna eklenen payload'lar genellikle işe yarar: ;id# or &&/usr/bin/id#

Sertleştirme (Perl)

  • Shell stringleri oluşturmayın. Argüman-vektörlü yürütmeyi tercih edin: system('/usr/bin/curl', '--silent', '--', $safe_url) — shell çağrısı yok.
  • Eğer bir shell kaçınılmazsa, tüm branch'lerde katı ve tutarlı kaçış uygulayın; $r->uri()'yi güvenilmez olarak değerlendirin. Yollar/sorgular için URI::Escape ve güçlü allowlist'ler düşünün.
  • Komut yürütme için backticks/qx// kullanmaktan kaçının; gerçekten gerekliyse shell çağırmadan çıktı yakalamak için open3/list formunu kullanın.
  • mod_perl handler'larında auth/redirect kod yollarını komut yürütmeden uzak tutun veya “fixed everywhere but one branch” regresyonlarını önlemek için tüm branch'larda özdeş sanitizasyon sağlayın.

Zafiyet avı

  • Shell komutları birleştiren modüllerde patch-diff yapın; branch'lar arasında tutarsız quoting'leri arayın (ör. if ($type eq 'login') kaçışlanmamış bırakılmış).
  • Grep for backticks, qx//, open\s*(|||, and system\s*(\s*" to find string-based shells. Sink'ten request girişine ($r) kadar bir call graph inşa ederek pre-auth ulaşılabilirliğini doğrulayın.

Gerçek dünya örneği: Dell UnityVSA pre-auth RCE (CVE-2025-36604)

  • Pre-auth command injection, type == "login" olduğunda AccessTool.pm:getCASURL içindeki backticks aracılığıyla ham $uri ($r->uri()) ile birleştirilerek gerçekleşiyordu.
  • Ulaşılabilirlik: MOD_SEC_EMC::AccessHandler → make_return_address($r) → getCASLoginURL(..., type="login") → getCASURL(..., $uri, 'login').
  • Pratik nüans: handler tarafından kapsanan ve çözülebilir bir path kullanın; aksi halde modül çalışmaz ve sink tetiklenmez.

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin