Dear visitor, welcome to Coder Forum.
If this is your first visit here, please read the Help. It explains in detail how this page works.
To use all features of this page, you should consider registering.
Please use the registration form, to register here or read more information about the registration process.
If you are already registered, please login here.
Paris Hilton Bug
Hier geht es um die Dummheit der Benutzer. Angefangen vom dummen User über ein CMS mit schlecht kommunizierten Benutzerrechten, bis hin zum Payment Anbieter der wichtige Felder vom Hashen ausnimmt.
XSS
Falls dem Benutzer ermöglicht wird an irgendeiner Stelle der Domain HTML Code einzuschleusen ist der Weg für Cross Site Scripting geebnet.
Damit können Cookies ausgelesen und damit fremde Identitäten übernommen werden.
SQL Injections
Mit SQL Injections lassen sich Daten manipulieren oder in Erfahrung bringen.
Session Stealing
Wird die Session nach Login/Registrierung nicht erneuert kann ein Angreifer dem Opfer seine Session unterjubeln.
File Inclusion
Ein Dateiupload ist ein potentielles Sicherheitsrisiko, wenn man die Dateien nicht aufs Genauste prüft.
Technikausblick
Andere Techniken wie Phising und E-Mail Manipulation erklärt.
Literatur zum weiter arbeiten.
Beispielcodes
Zugriffsschutz auf ein Bild ausgehebelt.
PHP Quellcode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?phpheader('Content-Type: image/png');
$watch_permission = true;
if($watch_permission){include'connect.php';
$res = mysql_query('SELECT image_path FROM user WHERE id = 1');
$row = mysql_fetch_array($res);
$row['image_path'] = "icq"; // Original Daten (1)$row['image_path'] = "../../../../../../../../etc/passwd\0"; // manipulierte Daten (2)echofile_get_contents('images/'.$row['image_path'].'.jpg');
}else{echofile_get_contents('no-permissions.png');
}?>
Newsletter abbestellen für alle
PHP Quellcode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html><body>
<?phpif(count($_REQUEST)){include'connect.php';
mysql_query('UPDATE user SET newsletter = '.$_REQUEST['news'].' WHERE userid = 10');
}?>
<form method="post">
<select name="news">
<option value="0">bestellen</option>
<option value="1">abbestellen</option>
</select>
<input type="submit"/>
</form>
</body></html>
Produktkatalog mit Zugangsdaten
PHP Quellcode
1
2
3
4
5
6
7
8
9
<html><body>
<?phpinclude'connect.php';
$res = mysql_query('SELECT titel FROM category WHERE id = '.$_GET['id']);
while($row = mysql_fetch_array($res)){printf("<li>%s</li>", $row['titel']);
}?>
</body></html>
So einfach geht Cross Site Scripting
search.php
PHP Quellcode
1
2
3
4
5
6
7
8
9
10
11
12
<?phpinclude'connect.php';
session_start();
$_SESSION['user'] = md5(rand(1,99));
?>
<html><body>
Ihre Suche nach <?=$_REQUEST['q']?>:
<ol>
<li><a href="searchhack.php">searchhack.php</a></li>
</ol>
</body></html>
Wobei bei dem Script welches die PHP Datei versendet, welche durch das nullbyte nicht erkannt werden soll bin ich der Meinung das dieser Weg gar nicht mehr funktioniert.
Ich hab soetwas auch mal geschrieben, das nullbyte wurde zwar gesendet, doch hat PHP bereits im $_FILES array alles hinter dem nullbyte abgehackt. Kp ob ich da villeicht doch einen Fehler drinne hatte.
Aber nette Scripts und Infos
Und du hast vollkommen Recht, viele Seiten validieren mangelhaft, z.B. webspell: hier kann man dein php-file script sofort anwenden(nicht nur das :x)
Wirklich interessant dein Vortrag. Und auch sehr lehrreich für mich. Nur dieses Nullbyte das versteh ich noch nicht so ganz.
Hier wird es ja dargestellt, dass es eine schwerwiegende Sicherheitslücke ist. Was hat es damit auf sich?
Hier wird es ja dargestellt, dass es eine schwerwiegende Sicherheitslücke ist. Was hat es damit auf sich?
Wenn du ein Uploadscript hast, dann kannst du in den Dateinamen ein Nullbytezeichen unterbringen.
Quoted
filename.php%00.jpg
Vorrausgesetzt, es wird nur die Dateiendung gecheckt.
Serverseitig wird erkannt, dass es sich um ein .jpg handelt.
Doch ein Unix System (der Server) würde alles nach dem Nullbyte zeichen ignorieren und eine Datei mit diesem Namen speichern:
Quoted
filename.php
So einfach könntest du deine eigenen Scripte schreiben und hochladen, wenn es nur eine Prüfung auf die Dateiendung gäbe und das Nullbyte Zeichen nicht entfernt wird.
Oh, das stimmt.. das habe ich nicht erwähnt.
Ich konnte den Nullbyte Hack auf aktuellem Apache2 mit aktuellem PHP5 leider auch nicht mehr nachvollziehen.
Andere Hacks sind zum Teil auch nicht möglich wenn Magic Quotes aktiviert sind.
Wobei die eigentlich meist irrelevant sind, da der Programmierer früher oder später stripslashes anwenden wird.
Wie in der Präsentation verwiesen: Ausführliches Material gibt es unter http://www.erich-kachel.de/
Auch wenn nicht alle Hacks auf das eigene System angewendet werden können, so muss man gerade bei irgendwelchen Produkten die auch auf alten Systemen installiert werden können, doppelte Vorsicht wahren.
Oha dann kann dieses kleine Nullbyte ja doch erheblichen Schaden anrichten. Sehr gut zu wissen. Auch wenn er nicht mehr bei neueren Versionen anwendbar ist. Danke für die Erklärung
Das Bild ist dadurch natürlich ungültig und kann auch von einem Browser o.ä. nicht mehr interpretiert werden.
Aber wenn es zu so einem schwerwiegenden Fehler kommt:
... dann wird das fehlerhafte Bild includet und auch interpretiert und in diesem Fall "test" ausgegeben.
Ich habe das grade bei einer recht großen Community ausprobiert und beim hochladen eines beschädigten Bildes gab es überhaupt keine Probleme.
Wenn ich jetzt noch eine include Sicherheitslücke finden würde, dann hätte ich eine viertel Mio. persönliche Daten.
Als minimum für die Absicherung kann man immer mit getimagesize() das Bild auf die Größenverhältnisse prüfen.
Bei einem defekten Bild funktioniert das natürlich nicht.
Sehr erstaunlich und auch sehr gefährlich. Ich denke, dass das den wenigsten PH-Programmierern bekannt sein wird. Ich werde in Zukunft auf jeden Fall darauf achten, erst alle Bilder mit getimagesize() zu prüfen.
Ebenfalls beliebt ist, das Bild mit GD zu öffnen, (vll. nen pixel zu setzen) und dann wieder speichern. (am besten sogar noch in einem anderen Format).
Dann sollte das Bild wirklich frei sein.
Bei nicht-bild-dateien kann man z.B. durch Manipulation der Datei den PHP Code außer Kraft setzen.
In dem man die Datei base64 codiert oder zipped sorgt man dafür das bei einer Include-Lücke nichts mehr passieren kann.
ber ein Download script werden die Daten dann erst wieder decodiert und zum Client gesendet.
Auf welche Attacke zielst du mit deiner Frage ab?
Kann man PHP Code ausführen geht das natürlich. Mit JavaScript/XSS kannst du die Session Daten aber nicht manipulieren. Korrekt. Diese Arten der Attacken zielen auf den Benutzer - nicht auf das System.
mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a.
Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, bevor sie per Query an MySQL übermittelt werden.
Ich weiss nicht wie Up-To-Date das ist, aber afaik werden da einige Zeichen nicht berücksichtigt.
Wenn du die mysqli ext installiert hast (was schon auf vielen Servern zum std. geworden ist) ist die bind_param Funktion noch besser. http://de3.php.net/manual/de/mysqli-stmt.bind-param.php
Dort werden die Daten abgeschirmt an die DB versandt.
Heisst, dass einmal der Query mit den Platzhaltern an die DB geht sowie die Parameter und die DB sich dann um den Rest kümmert.
Ein weiterer Vorteil ist, dass du gleich den Typ mit angeben kannst so, dass wenn du einen INTEGER festlegst, man keinen String draus basteln kann. (Wobei man niemals nie sagen soll *g)