2011-01-16 11 views
0

Ok, vorne beginnen>PHP mit SQL Injection

Für unsere erste Aufgabe in einer Klasse Systemsicherheit, haben wir in die Professoren „billig organisiert“ SQL-Datenbank hacken. Ich weiß, dass der einzige Benutzer „admin“ und ein zufälliges Passwort Kommissionierung, die select-Anweisung in der php erzeugt wird:

select user_id from user where user_username = 'admin' AND user_password = md5('noob') 

Nun, ich gehe für die Grundausgangspunkt der Versuch, die beschissene Login mit „admin zu hacken ‚-“

select user_id from user where user_username = 'admin'--' AND user_password = md5('noob') 

aber der tatsächliche Wert in die Datenbank ist

select user_id from user where user_username = 'admin\'--' AND user_password = md5('noob') 

geschoben wird, die hilft nicht. Der Server verwendet POST, um die Werte aus dem Formular abzurufen. Ich habe bereits irgendeine Wertverarbeitung auf meiner Seite des Sendens umgangen, indem ich Javascript deaktiviert habe.

Es scheint nichts im php zu sein, das den Eingang in irgendeiner Weise verändert.

+3

Debian hat nichts damit zu tun ... –

+1

ich eine vollständige Antwort auf die Forschung keine Zeit haben, aber sie magic quotes gedreht haben könnte on (http://stackoverflow.com/questions/2735749/successful-sql-injection-despite-php-magic-quotes) –

+0

Das Betriebssystem ist in keiner davon beteiligt. – BoltClock

Antwort

0

Versuchen Sie ' OR 1; -- als Benutzername. Stellen Sie sich vor, wie die SQL-Abfrage von einem solchen Benutzernamen aussieht.

+0

, die wird \ 'oder 1; - –

2

die select-Anweisung Unter der Annahme, ist Teil eines Anmeldeformulars, dann am ehesten so etwas wie diese generiert wird:

$user = $_POST['username']; 
$pwd = $_POST['password']; 

$query = "SELECT .... WHERE user_username='$user' AND user_password=md5('$pwd')"; 

was bedeutet, Sie durch Eingabe hacken könnte:

noob') or ('a'='a 

für die Passwort, geben Sie

SELECT .... AND user_password=md5('noob') or ('a'='a') 
            ^^^^^^^^^^^^^^^^^-- your contribution 

Das tatsächliche Passwort stimmt möglicherweise nicht überein, aber 'a' wird immer gleich selbst, so dass die where-Klausel erfolgreich ist und einem Datensatz entspricht, der nur auf dem Benutzernamen basiert und die Benutzer-ID des Admin-Benutzers zurückgibt.

+0

Wie ich bereits erwähnt habe, erstellt das System immer noch Escape-Sequenzen auf der Serverseite, und nach meinem besten Wissen scheint es das Betriebssystem zu sein, das es tut. Das wurde ausgewertet, um user_id vom Benutzer where user_username = 'admin' UND user_password = md5 ('nooboraa') zu wählen –

+1

Debian wird es nicht tun. Apache könnte sein. –

+0

Was ändert den Wert, wie würde ich das umgehen? –

0

Dies hat nichts mit dem Betriebssystem zu tun. Das Betriebssystem führt einfach das PHP-Paket aus. PHP ist, was sanitization tut usw.

Haben Sie versucht, die folgende Zeichenfolge für user_username einreichen ?:

admin' OR 1=1-- #assuming mysql 

Würde eine Abfrage ergeben:

select user_id from user where user_username = 'admin' OR 1=1 --' AND user_password = md5('noob') 

In mysql (vorausgesetzt, die Datenbanktyp) , - ist ein Kommentar, also wird alles nach 1 = 1 ignoriert. Als Ergebnis haben Sie erfolgreich Zugriff erhalten.

Wenn php magischen Anführungszeichen eingeschaltet sind, wird dies jedoch etwas schwieriger. Sie müssen Zeichen außerhalb von utf-8 eingeben oder Überläufe oder das Senden von Nullbytes versuchen.

+0

yeilds die Abfrage> wähle user_id von Benutzer wo user_username = 'admin \' 'ODER 1 = 1 - 'UND user_password = md5 (' noob ') –

1

Wie andere erwähnt haben, ist das Entkommen, das Sie sehen, nicht das Betriebssystem, aber eine Form der Kodierung in PHP (wahrscheinlich magischen Anführungszeichen, könnte aber ein direkter Aufruf von addslashes() sein).

Im Grunde, was Sie tun müssen, ist in einer Form von Angebot senden, die nicht maskiert werden.Sie sollten erforschen, warum man mysql_escape_string() statt addslashes() und/oder check this out verwenden würde: http://forums.hackthissite.org/viewtopic.php?f=37&t=4295&p=30747

0

Sie auch ein bisschen googeln nach einer Zeichenfolge eingeben versuchen könnte, die das Admin werden Fehler aus und ein Teil der Nachricht verwenden das kommt als Schlüsselworte zurück.

Sie könnten auch die http://gray.cs.uni.edu/moodle/mod/forum/discuss.php?d=106 fourm verwenden, um Fragen zu stellen, damit die ganze Klasse profitieren kann!

Wenn Sie herausfinden können, wie man Dateien hochlädt, wäre großartig! Ich möchte c99.php erhalten um wirklich etwas Schaden anzurichten!

könnten Sie auch einige „hash“ Vers „Strich Strich“ versuchen