disable_functions bypass - dl function

Support HackTricks

Important note:

dl je PHP funkcija koja se može koristiti za učitavanje PHP ekstenzija. Ako funkcija nije onemogućena, može se zloupotrebiti da obiđe disable_functions i izvrši proizvoljne komande. Međutim, ima neka stroga ograničenja:

  • dl funkcija mora biti prisutna u okruženju i nije onemogućena

  • PHP ekstenzija mora biti kompajlirana sa istom glavnom verzijom (PHP API verzija) koju server koristi (ovaj podatak možete videti u izlazu phpinfo)

  • PHP ekstenzija mora biti smeštena u direktorijumu koji je definisan direktivom extension_dir (možete ga videti u izlazu phpinfo). Veoma je malo verovatno da će napadač koji pokušava da zloupotrebi server imati pristup za pisanje u ovaj direktorijum, tako da će ovo zahtevati verovatno sprečiti zloupotrebu ove tehnike).

Ako ispunjavate ove zahteve, nastavite sa čitanjem posta https://antichat.com/threads/70763/ da biste saznali kako da obiđete disable_functions. Evo sažetak:

dl funkcija se koristi za dinamičko učitavanje PHP ekstenzija tokom izvršavanja skripte. PHP ekstenzije, obično napisane u C/C++, poboljšavaju funkcionalnost PHP-a. Napadač, primetivši da dl funkcija nije onemogućena, odlučuje da kreira prilagođenu PHP ekstenziju za izvršavanje sistemskih komandi.

Koraci koje je preduzeo napadač:

  1. Identifikacija PHP verzije:

  • Napadač određuje PHP verziju koristeći skriptu (<?php echo 'PHP Version is '.PHP_VERSION; ?>).

  1. Nabavka PHP izvora:

  1. Lokalna PHP postavka:

  • Ekstrahuje i instalira specifičnu PHP verziju na svom sistemu.

  1. Kreiranje ekstenzije:

Napomene za kompajliranje prilagođene ekstenzije:

  1. ZEND_MODULE_API_NO:

  • ZEND_MODULE_API_NO u bypass.c mora odgovarati trenutnoj Zend Extension Build, koju možete dobiti sa:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. PHP_FUNCTION modifikacija:

  • Za novije PHP verzije (5, 7, 8), PHP_FUNCTION(bypass_exec) može zahtevati prilagođavanje. Pruženi kodni isječak detaljno opisuje ovu modifikaciju.

Datoteke prilagođene ekstenzije:

  • bypass.c:

  • Implementira osnovnu funkcionalnost prilagođene ekstenzije.

  • php_bypass.h:

  • Header datoteka, definišući osobine ekstenzije.

  • config.m4:

  • Koristi se od strane phpize za konfiguraciju okruženja za izgradnju prilagođene ekstenzije.

Izgradnja ekstenzije:

  1. Komande za kompajliranje:

  • Koristi phpize, ./configure i make za kompajliranje ekstenzije.

  • Rezultantni bypass.so se zatim nalazi u poddirektorijumu modula.

  1. Čišćenje:

  • Pokreće make clean i phpize --clean nakon kompajliranja.

Učitavanje i izvršavanje na žrtvovanoj mašini:

  1. Kompatibilnost verzija:

  • Osigurava da se PHP API verzije poklapaju između napadačeve i žrtvine mašine.

  1. Učitavanje ekstenzije:

  • Koristi dl funkciju, zaobilazeći ograničenja korišćenjem relativnih putanja ili skripte za automatizaciju procesa.

  1. Izvršavanje skripte:

  • Napadač učitava bypass.so i PHP skriptu na server žrtve.

  • Skripta koristi dl_local funkciju za dinamičko učitavanje bypass.so i zatim poziva bypass_exec sa komandom prosleđenom putem cmd upitnog parametra.

Izvršavanje komandi:

  • Napadač sada može izvršavati komande pristupom: http://www.example.com/script.php?cmd=<command>

Ovaj detaljan vodič opisuje proces kreiranja i implementacije PHP ekstenzije za izvršavanje sistemskih komandi, koristeći dl funkciju, koja bi idealno trebala biti onemogućena kako bi se sprečile ovakve sigurnosne povrede.

Support HackTricks

Last updated