phpbar.de logo

Mailinglisten-Archive

[php] apache log einträge

[php] apache log einträge

Yannik Hampe yannik at cipher-code.de
Mon Feb 4 15:34:51 CET 2008



Silvio Siefke wrote:
> Yannik Hampe schrieb:
>> Ja: Irgendwer versucht irgend einen Mist mit deinem Formular anzustellen.
> 
> Das Formular geht an ein Perl Script. Meine Dateien haben zwar die Endungen 
> PHP, enthalten aber nur 3 Zeilen PHP Code, das ist um die Zugriffe zu loggen.
> 
>> Das ist wohl eher die Anleitung für den Systemadministrator zu 
>> Schadensminimierung, falls der php-Programmierer unsicheren Code 
>> schreibt. Durchaus wichtig, aber wie deine kontakt.php aussieht ist viel 
>> wichtiger.
> 
> Also bringt das nichts, was in dem Link stand?

Doch, es bringt in jedem Fall was. Aber es ist eben nur die halbe 
Wahrheit. Oder wie Christoph schon sagte "als 2. Verteidigungslinie".
> 
>> Die übergebenen URLs enthalten den Text
>> <?php echo md5("just_a_test");?>
>> Es wird wohl darum gehen deinen Server dazu zu bringen diesen Code 
>> auszuführen.
>> Mir ist aktuell nicht ganz klar, wie dermaßen schlecht dein Code sein 
>> muss, damit dieser Angriff funktioniert... Es sei denn der Code baut auf 
>> einer (ehemaligen) Sicherheitslücke in php auf...
> 
> 
> Meine Seite: www.silviosiefke.de

Was noch fehlt bei deiner Seite:
In den Headern von deinem Server steht:

Server:	Apache/1.3.34 (Debian) mod_perl/1.29 PHP/4.4.4-8+etch4
X-Powered-By:	PHP/4.4.4-8+etch4

Das sind natürlich Informationen, die für einen Angreifer sehr wichtig 
sind und du machst es ihnen sehr einfach daran zu kommen.
Gegen die erste Zeile kannst du etwas tun, in dem du in der httpd.conf
ServerTokens = Prod
einstellst.
Gegen die zweite Zeile kannst du etwas tun, indem du in der php.ini
expose_php = off
einstellst. Damit man die Serverversion hier:
http://www.silviosiefke.de/asdf
nichtmehr nachschauen kann, solltest du in der httpd.conf auch noch
ServerSignature Off
setzen.

Aber auch das ist eigentlich nur eine Erweiterung des Texts, den du 
verlinkt hast.
Es gibt noch ein paar wichtige sehr sehr grundlegende Regeln bei der 
Programmierung in php, die immer und immer wieder ignoriert werden.
Dazu gehört:
-- Variabeln vom User sind böse. --
include("php/$_REQUEST[inc].inc.php");
In $_REQUEST['inc'] kann ALLES drin stehen. Du hast keine Ahnung. Das 
musst du prüfen. Sonst geht's dir wie dem TV-Steinau:
http://www.handball-steinau.de/index.php?s=/../etc/passwd%00
Genauso verhält es sich bei mysql-queries:
mysql_query("SELECT * FROM blubb WHERE bla='$_REQUEST[foo]'");
In Request[foo] kann weiss Gott was drin stehen. Da muss man einmal 
mysql_real_escape() drauf anwenden. Es ist eine ganz simple grundlegende 
Regel einfach zu verstehen, dass in diesen Variabeln alles drin stehen 
kann. Du glaubst nicht, dass es Leute da draussen gibt, die so doof sind 
und die Regel nicht bedenken? Dann schau mal hier:
http://unit21.de/main_start.php?site2display=ausgabe&bereich='
Da bekommst du auch noch den Query angezeigt, damit du dir genau 
überlegen kannst, wie genau du es anstellst alle Datenbanken auf dem 
Server zu leeren oder was für ein Unheil du auch immer anrichten willst.

Es herscht übrigens dieses Gerücht im Internet, dass $_POST sicherer sei 
als $_REQUEST oder $_GET. Weil in $_REQUEST werden die post-daten auch 
mit get daten überschreiben, die du einfach im Browser in der 
Adresszeile ergänzt.
Die Sicherheit trügt. $_POST ist genauso unsicher. Man muss sich schon 
etwas auskennen um eine $_POST Variable zu überschreiben, aber wer 
soweit nicht denkt, der kommt auch nicht auf die Idee eine get-Variable 
zu überschreiben. Jeder, der möchte kann variabeln, die in $_GET, 
$_POST, $_COOKIE und $_REQUEST stehen einfach überschreiben. Rechne 
IMMER damit, dass dort Mist drin steht. Wenn Register globals 
eingeschaltet ist, trifft das auch noch auf jede andere Variable zu:
$a .='bla';
Funktioniert mit einer Notice, die möglicherweise abgeschalted ist, 
ohne, dass du $a jemals vorher etwas zugewiesen hast. Viele 
PHP-Programmierer schreiben sowas und gehen davon aus, dass $a vorher 
nicht existierte. Das ist in einer Schleife manchmal verlockend, weil 
man sich das initialisierende
$a='';
spart, aber das ist einfach sicherheitstechnisch ein Problem. In $a 
könnte bereits etwas drin stehen!

> MFG
> Silvio Siefke

Yannik

php::bar PHP Wiki   -   Listenarchive