Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Uneori, se face referire la fișierele ca înglobată inkluda, uneori, considerate ca făcând parte din PHP de injectare (injectare de cod). Acesta din urmă nu este în întregime adevărat, deoarece introducerea de vulnerabilitatea fișierelor nu este neapărat asociată cu punerea în aplicare a codului.

Vulnerabilitate poate apărea în timpul utilizării (în PHP) expresii precum:

Fiecare dintre ele are un pic nuanțe, dar au în comun este faptul că acestea includ în fișierul program și executați-l. Problema acestor expresii poate provoca, în cazul în care se transmite datele introduse de utilizator, iar programul nu este suficient de filtre sale.

Apropo, da, este expresia, nu funcția. Neobzyatelno a scrie acest lucru:

Mai preferat este o astfel de opțiune:

Dar această digresiune, care nu are nici o legătură cu vulnerabilitatea.

Dacă fișierul includ expresii de vulnerabilitate a făcut require_once, include_once, includ, necesită, putem spune că, în același timp, deține injecție de cod. Cu toate acestea, este posibil să includă fișiere de vulnerabilitate, fără executarea de cod pe server. De exemplu, apariția modificărilor site-ul bazat pe tema selectat de utilizator. Numele corespunde cu numele de fișiere HTML care pot fi citite pe server. În această situație, în cazul în care se formează cererea, astfel încât să se efectueze citirea fișierului, care nu este destinat pentru acest scop (de exemplu, fișierele PHP), în loc de a executa comenzi, PHP codul sursă va fi afișată.

Utilizatorul poate specifica ca fișierul pentru inkluda fișier de la distanță sau local. Pe baza celor două soiuri relevante Fabricat:

  • fișierele locale de punere în aplicare
  • introducerea fișierelor la distanță

Pericolul constă în inkluda executarea de la distanță de cod arbitrar pe un server vulnerabil. De obicei, este folosit pentru a infecta backdoor.

fișier includ vulnerabilitatea locală nu este mai puțin periculos decât introducerea fișierelor șterse.

Funcționarea fișierelor de implementare locale

Încercați să vă parte la această vulnerabilitate în aplicații web Fir-ar Vulnerabil (DVWA). Eu folosesc Web Security Dojo. în cazul în care DVWA deja instalat.

Pentru a începe cu un nivel scăzut de securitate (scăzut) (configurabil DVWA de securitate).

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Există trei link-uri noi pentru a merge:

În cazul în care valoarea care este similar cu numele fișierului (file1.php, file2.php) este trecut ca un argument pentru o variabilă, se poate presupune că este utilizat includ vulnerabilitatea. Deoarece extensia fișierului .php. este probabil că fișierul este executat pe server (care este posibil să se efectueze punerea în aplicare a codului) și nu doar de ieșire pentru a afișa.

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Da, locale includ vulnerabilitatea vulnerabilitate este prezenta. Când introduceți acces nefiltrat directorul de sus (../), o listă de fișiere pentru inkluda nu este exhaustivă (în locul propus de fișier * .php am ales about.php).

De multe ori, ca un exemplu de funcționare a fișierului local, inkluda dori să dea ceva de genul:

După cum puteți vedea, ea a lucrat. Dar, ca browsere Web ignora / r / n (linie nouă), avem nevoie pentru a deschide codul sursă pentru înregistrarea a început să citească:

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Din păcate, nu există parole în fișierul / etc / passwd a dispărut de mult.

Pe server, puteți trage diferite fișiere de configurare, de SSL certificate, în principiu, orice fișier care este deschis pentru citire tuturor utilizatorilor sau la care citirea de pe serverul de web nu au suficiente drepturi:

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

În ceea ce privește găzduirea generală, uneori reușesc să se uite în dosarul greșit (din nou, în cazul în care nu sunt configurate drepturile utilizatorului).

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Sarcina este complicată de faptul că trebuie să știm calea către fișierul.

Operarea fișierelor de implementare la distanță

PHP este foarte flexibil și ușor de utilizat pentru dezvoltatori limbaj de programare. Echipa de implementare (inkluda) fișiere și alte câteva bine recunosc și praviln6o tratate nu numai fișiere locale, dar URL-ul ...

A se vedea cât de interesant se dovedește:

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Desigur, această vulnerabilitate nu este interesant pentru noi, astfel că într-un singur site-ul poate vizualiza alte site-uri.

Putem păstra backdoor nostru pe site-ul afectat. următorul algoritm:

  1. Genera / vom găsi codul sursă al backdoor
  2. Crearea dreapta din perspectiva de fișier PHP pentru a executa pe server, care păstrează codul de backdoor original, într-un fișier PHP
  3. Salvați codul într-un fișier text
  4. Încărcați fișierul text la un server controlat de
  5. Pe un server vulnerabil, prin intermediul inkluda la distanță fișiere menține backdoor nostru

Am subliniat cuvântul „text“ pentru motivul că un server controlat, ar trebui să fie doar un fișier text, care nu ar trebui să fie executat pe serverul nostru. Serverul nostru are doar pentru a arăta conținutul său.

Pentru a crea un backdoor poate utiliza Weevely. PhpSploit. putem lua soluții gata făcute. Să folosim acest timp pregătit.

I $ variabila este cazul un cod backdoor sursă backdoor, care este descărcat de pe githaba. Apoi am folosi funcția file_put_contents pentru a salva fișierul rezultat c99unlimited.php codul sursă.

Codul pe care am postat într-un fișier text

Acum, folosind telecomanda includ vulnerabilitate, încărcăm un backdoor pe server afectat.

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Notă inscripția făcută. este derivat script, adică Probabil sa întâmplat.

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Ok, acum avem toate caracteristicile care pot necesita doar serverul de web de administrator ... și cei care au acces la serverul său.

filtrare bypass la fișiere inkluda locale

Să trecem la nivel mediu (mediu) de securitate (configurabil DVWA de securitate).

Dacă ne uităm la codul sursă (butonul Vizualizare sursă):

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

vedem acum că personajele ../ filtrate. Nu ne va da drumul la directorul de mai sus cel care folosește scriptul vulnerabil.

Ie deja nu funcționează:

Să vedem cum filtrarea în acest caz? Să presupunem că cuvântul filtrat „rău“, apoi o linie de genul

bine bine rau

după filtrare va fi:

Și dacă introduceți următoarea linie

după filtrare ( „rele“ vor fi eliminate) va

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

O altă opțiune ar putea fi pentru a ocoli caractere de codificare în codificarea hexazecimal, un exemplu de linie:

"../" poate fi înlocuit cu un «% 2E% 2E% 2f».

De asemenea, practicat dublu de codificare în codificare hexazecimal, în care „../“ este înlocuit cu un «% 252E% 252E% 252F»

Fișier local includ vulnerabilitate prin adăugarea de extensii la script

Dacă fișierul de cod inkluda arata ca:

Ie la orice intrare de utilizator se adaugă extensia .php, sau alte, atunci nu este posibil să se formeze o anchetă, astfel încât să facă atac.

Există mai multe tehnici care sunt concepute pentru a filtra extinderea, dar ele pot fi considerate depășite, deoarece acestea sunt de lucru pe PHP 5.3, și chiar și atunci nu toate versiunile. Cu toate acestea, administratorii de servere Web conservatoare punct de vedere clinic și preferă să nu atingă nimic, dacă funcționează. Ie o șansă de a întâlni un server cu o versiune foarte veche de PHP este, iar aceste tehnici ar trebui să fie conștienți de.

Folosind 00% la zero octet (byte nul)

La sfârșitul interogării de a ignora extensia adaugă un octet nul:

A doua metodă se numește calea de tăiere atac. Linia de jos este faptul că PHP trunchia lungimea căii de 4096 bytes. În acest caz, PHP deschide un fișier în mod corect, chiar dacă la sfârșitul numelui său, există slash-uri și puncte. În cazul în care parametrii sunt trecute la ceva de genul? Param1 = .. / .. / .. / .. / etc / passwd /./././././<…> (În cazul în care ./ se repetă de multe mii de ori), la sfârșitul fișierului cu extensia (care a adaugat un script, cu rezultatul că numele de fișier a devenit include /../../../../ etc / passwd /././. /././<…>.php) vor fi eliminate. Și, după cum numele fișierului va include /../../../../ etc / passwd /./././././<…>. Și pentru că PHP nu este confuz și slash-uri ./ la trailing sfârșitul fișierului, ea pur și simplu le ignoră, apoi un total de PHP deschide un fișier de pe calea include /../../../../ etc / passwd.

filtrare Bypass, la o distanță de fișiere încorporate

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Și, de asemenea, rețineți că nu este filtrat, cum ar fi ftp. și anume o astfel de opțiune ar fi lucrat chiar și fără trucuri:

Noțiuni de bază sursă script PHP atunci când fișierele inkluda cu php: // filtru

Pentru acest truc nu are nevoie de un fișier de la distanță includ vulnerabilitate. Se va folosi un fel de php meta-înveliș: // filtru.

Să presupunem că vrem să vedem fișierul file1.php codul sursă, apoi pentru situația noastră, cererea se va face după cum urmează:

Să acorde o atenție la linia fără sens de litere și numere - este codul sursă fișier file1.php Base64 codificat. Deoarece este base64, apoi l-au sprijinit și fișiere binare.

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

executarea de la distanță de cod cu php: // input

Nu e ca introducerea de fișiere și acest lucru din nou, nu este necesar pentru a încărca fișiere.

Pentru a ajuta, eu folosesc FireFox HackBar avansate. puteți, de asemenea, el, sau orice alt program (de exemplu, curl), care este capabil să transmită date prin POST utilizează.

php: // intrare are acces la corpul solicitare HTTP prime pentru a înțelege că include ( „php: // input“) face, du-te la

O cerere de a trimite codul corect PHP pentru organism (de exemplu, folosind metoda POST). Acest lucru vă va permite să efectuați orice permisă pe funcția de server de la distanță!

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

executarea de la distanță a datelor de cod: //

În plus, PHP acceptă date URL-schema: // Puteți plasa codul direct în parametrul GET! Următorul test nu necesită unelte speciale, doar un browser obișnuit pentru a efectua un atac.

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Unele aplicații web firewall-uri pot observa un șir de caractere suspecte în URL-ul, și să blocheze cererea malware. Dar există o modalitate de a cripta un șir de cel puțin codare base64:

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Rula comenzi arbitrare cu / proc / auto / Environ

/ Proc / self / environ - un depozit de variabile de proces. În cazul în care procesul de Apache drepturi suficiente pentru a avea acces, atunci când deschideți pagina Web pe care în prezent includ vulnerabilitatea cu ca URL-ul,

aduce ceva de genul

Notă HTTP_USER_AGENT. În schimb, este posibil să se înlocuiască codul PHP corect pentru a fi executat pe un server de la distanță.

Filtre de operare fișier implementare vulnerabilitate și by-pass local și la distanță

Gravarea și punerea în aplicare a fișierelor jurnal de la inkluda locale

Din păcate, cele mai recente versiuni de Apache, această metodă nu mai funcționează.

Esența ei constă în faptul că codul atacatorului încorporat în jurnalele de server web. Acest lucru se poate face prin spoofing User-Agent. sau chiar doar pentru a transfera parametrii GET.

În continuare, aveți nevoie pentru a face un fișier jurnal includ vulnerabilitate.

punerea în aplicare statică de fișier de la distanță

Exemplul inkluda static:

Exploit statice includ vulnerabilitatea pot fi situații foarte exotice. Pentru introducerea de cod malițios este necesar să se efectueze un atac în mijloc-om între cele două servere, dintre care unul găzduiește aplicația web care utilizează includ vulnerabilitatea, iar al doilea fișierul gazde, care este folosit pentru a inkluda.

concluzie

Pentru cele mai multe dintre exemplele prezentate aici sunt necesare anumite condiții, care sunt reduse la configurația serverului greșit. Ie cu alte cuvinte, nu toate metodele prezentate aici vor lucra pe cele mai multe servere web.

Articole similare: