Acest script funcționează împreună cu formularul HTML următor:
Când PHP acceptă o solicitare POST cu tipul de codificare "multipart / form-data", în directorul pentru fișiere temporare (ex. / Var / tmp / php4vlktb) este creat un fișier temporar cu nume aleatoriu. De asemenea, PHP completează matricea globală $ _FILES cu informații despre fișierul încărcat:
În acest exemplu simplu, nu există nicio restricție asupra tipului de fișiere descărcate, astfel încât un atacator poate descărca un fișier cu cod PHP sau .NET rău intenționat, ceea ce va duce la compromisul serverului. În acest caz, atacatorul poate pur și simplu încărca scripturile malware c99 shell sau shell-ul r57 și obține controlul asupra serverului.
Cu toate acestea, chiar dacă scopul unei securitate a verifica extensia fișierului se face înainte de încărcare, un atacator poate, de asemenea, l evita prin utilizarea nulă% 00. Tot ce trebuie să faceți este să alegeți fișierul PHP pentru a descărca, fără a apăsa pe butonul „Download“. Calea către fișierul selectat pentru a descărca va fi afișat pentru * NIX-sisteme vor arata ca /Users/username/exploit.php, și pentru sistemele bazate pe Windows, cum ar fi c: \ exploit.php. În această etapă, trebuie să adăugați manual la caracterul nul șir la orice extindere ulterioară a imaginii, de exemplu, /Users/username/exploit.php%00.jpg sau c: \ exploit.php% 00.jpg.
După ce faceți clic pe butonul "Descărcare", serverul va verifica extensia, consideră că imaginea va fi descărcată și va afișa un mesaj similar cu următorul text: "Vă mulțumim pentru descărcarea imaginii!". Odată ce fișierul este descărcat, veți putea să executați un cod rău intenționat pe server.
O altă modalitate populară de a proteja împotriva executării fișierelor descărcate este interzicerea executării de script-uri în directorul de descărcare utilizând fișierul .htaccess. Un fișier .htaccess standard pentru acest scop trebuie să conțină următorul cod:
Codul de mai sus folosește o listă de extensii interzise și nu este în mod special sigur de la sine. O cracker poate pur și simplu să ocolească astfel de verificări prin descărcarea unui fișier numit .htaccess care conține un cod similar cu următorul text:
Această linie îi spune lui Apache că este necesar să execute fișiere imagine cu extensia .jpg ca și cum ar fi script-uri PHP. Acum, atacatorul poate încărca un fișier cu extensia .jpg care conține codul PHP. Deoarece fișierele descărcate pot suprascrie și suprascrie cele existente, atacatorii pot înlocui cu ușurință fișierul .htaccess cu versiunea lor modificată, ceea ce permite executarea anumitor scripturi pentru compromiterea ulterioară a serverului.