# sql-injection testpage proggen?, wieviele "Steine" noch liegen



## pointhi (7. Juni 2012)

Um es gleich zu sagen, ich will nicht professioneller hacker(eigentlich cracker, hacker sind ja die guten) werden, etc. . Es geht mir hackermethoden praktisch zu testen um eigene programme sicherer zu gestalten und auch selber testen zu können.

Mir geht es nur darum mal zu probieren wie eine SQL-Injection im allgemeinen funktioniert, und hab daher auf einem Freehoster auf dem ich früher war eine komplett unsicheres Login-Skript hinaufgeladen.
Der erste Test war komplett ernüchternd, ich hab das ganze als GET-Übergabe design um auch händisch im url die übergabeparameter zu editieren, aber die eingabe eines ' machte keinen unterschied. Nach einer Anleitung für so eine Attacke sollte eigentlich eine Fehlermeldung vom server wegen einem falschen übergabestrings kommen.

Auch das Hinzufügen von
	
	
	



```
php_flag display_errors on
```
 sorgte nicht dafür. Wie ich später herausgefunden habe wird von PHP ein ' automatisch durch ein \' ersetzt, wodurch so eine Attake schon abgewehrt werden würde oder?, zumindestens hab ich durch 
	
	
	



```
stripslashes($_GET["username"]);
```
 dieses "Problem" wegbekommen, was aber trotzdem nichts geholfen hat.

Und hier noch mal zu der Frage: Ist es überhaubt noch möglich eine SQL-Injection der einfachsten art auf eine absichtlich unsichere Seite zu starten ohne zusätzliche Maßnahmen zu ergreifen dass diese auch weitergegebenwerden und was muss ich machen um endlich ein skript zu schreiben was eine SQL-Injection prinzipell ermöglicht, oder bin ich am komplett falschen pfad und oder könnte der freehoster geeignete maßnahmen dagegen getroffen haben.

Hier noch der code der unsicheren Seite, ist nur schnell zusammengeproggt worden:


```
<?php

define('_SQL_INJECTION_EXAMPLE', 1);

include("php/mysql.php");

$login['username'] 	= stripslashes($_GET["username"]);
$login['passwort']	= stripslashes($_GET["passwort"]);
?>

<html>
<meta>
	<title>SQL-Injection-Example by eap</title>
</meta>
<body>
<h1>SQL-Injection-Example by eap</h1>
<?php
if($login['username'] == NULL && $login['passwort'] == NULL)
	{
	echo "<p>Das ist ein ungeschützter Login-Zugang!<br>Schaffst du es dich anzumelden?</p>";
	}
else
	{
	$abfrage = stripslashes("SELECT ID FROM login WHERE USERNAME='".$login['username']."' AND PASSWORD='".$login['passwort']."'");
	echo $abfrage;
	$ergebnis = mysql_query($abfrage);
	$row = mysql_fetch_object($ergebnis);

	if($row->ID == NULL)
		{
		echo "</br></br>Anmeldung nicht erfolgreich!</br></br>";
		}
	else
		{
		echo "</br></br>Erhaltene ID der Abfrage:".$row->ID."</br>Du hast es geschafft!</br></br>";
		}
	}
?>

<form method="GET" action="http://eap.lima-city.de/index.php" AUTOCOMPLETE="off">
  Username: <input type="text" name="username" size="15"/><br />
  Password: <input type="password" name="passwort" size="15"/><br />
	<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>
```

Info: die Testseite ist unter http://eap.lima-city.de/ erreichbar. Ihr könnt gerne selber versuchen eine erfolgreiche SQL-Injection zu machen. Das funktonierende passwort und der username dieses Logins ist der einfachste der mir eingefallen ist , aber es soll ja um die SQL-Injection gehen

INFO: Wenn nötig das Thema ins PHP-forum verschieben

mfg. pointhi


----------



## hendl (29. Juni 2012)

Bin drinnen als Benutzername und PW einfach:
    ' OR 1='1   da ich den usernamen nicht kenne.
;-)
Lg hendl


----------



## pointhi (29. Juni 2012)

wieviele versuche brauchtest du dafür?, dachte schon das ist schon zu illegal, obwohl es ein absichtlich unsicheres skript ist.

Hab ganz übersehen dass ja noch ein ' nach dem aufruf angehängt wird , bin einfach ein anfänger in SQL, und weiß ich gar nicht was überhaupt alles damit möglich ist.

Jetzt eine Frage dazu, wie viel Zugriff auf die Datenbank wäre über das skipt möglich?, Benutzer hinzufügen und löschen sollte meinem gefühl nach möglich sein. Bei Passwörter ausgeben hab ich keine ahnung ob das möglich ist, da ja nur die ID zurückgegeben wird. Welche türen würde ich mit so einem skript einem angreifer öffnen?.

Und als info , außer dem beispiel befindet sich nichts auf der datenbank. Wenn ihr es schafft dürft ihr einen neuen Benutzer anlegen. Ich könnte auch eine Table machen wo man sich verewigen kann wenn man sich bis dorthin reinhackt. Aber dafür müsste ich mal wissen was alles möglich wäre.

mfg. pointhi


----------



## Lime (29. Juni 2012)

Mit etwas Pech hast du jetzt eine Tabelle mit meinem Namen in deiner Datenbank... 

Was ist theoretisch möglich:
- neue Tabellen anlegen
- bestehende Tabellen löschen
- Einträge löschen und sabotieren (dazu braucht man aber eventuell Spaltennamen)


----------



## pointhi (29. Juni 2012)

da muss ich dich entäuschen, ich seh nur die tabelle login und diese auch nur mit 1. Eintrag wie vorher schon. Ich schau mal nach einen Skript dass alle Tabellen anzeigt, aber diese nicht einsehen bzw. ändern kann. Sozusagen als erfolgskontrolle 

mfg. pointhi


----------



## hendl (30. Juni 2012)

Kann es sein dass die Seite down weil komm gar nicht mehr drauf?
Lg hendl


----------



## pointhi (30. Juni 2012)

http://lima-status.de/ Server ist down, das ist unter anderem der grund weshalb ich auf eigene server, bzw. kostenpflichtige webhostingangebote umgestiegen bin.

Meine selbstgehosteten Seiten hatten bisher keine probleme, aber das skript weist immerhin teilweise unklare sicherheitslücken auf weshalb ich es nicht in die nähe meines servers, etc. gebe. Free-hostingsservices müssen zwangsläufig sichere systeme bereitstellen weil sich sonst jeder hacker anmelden kann und dann böswillige software installiert, etc.

mfg. pointhi


----------



## hendl (30. Juni 2012)

So die die verwendete Datenbank ist: MySql 5.0.11, Database heißt db_174048_1 die tabelle heißt login und der einzige Benutzername ist admin das Passwort admin.
[3 columns]
+----------+----------+
| Column   | Type          |
+----------+----------+
| ID           | int(11)       |
| PASSWORD | tinytext |
| USERNAME | tinytext  |
+----------+----------+

Herausgefunden über Befehl: passwort=123' || (SELECT 3099 FROM DUAL WHERE 8115=8115 AND SLEEP(1) ) || '


----------



## pointhi (30. Juni 2012)

?, die ergebnisse von dir sollten stimmen , wo hast du das genau eingegeben. Ich sehe keine ausgabe bei mir egal ob ich das in username, password oder in den url (http://eap.lima-city.de/index.php?passwort=123' || (SELECT 3099 FROM DUAL WHERE 8115=8115 AND SLEEP(1) ) || ' ) reinschreibe.

mfg. pointhi


----------



## hendl (30. Juni 2012)

Habs ca. 20 min im Browser versucht da sich dann nichts getan hat habe ich sqlmap verwendet.
Jetzt wird ich noch probiern dass ich einen User adde.
Lg hendl


----------



## pointhi (30. Juni 2012)

dann wünsch ich dir mal viel glück. Testen ob der user geaddet ist kannst du ja selber.

mfg. pointhi


----------

