php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 21-05-2007, 20:20
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard Sql-Injection [gelingt nicht]

Hallo,

der Titel ist vlt etwas verwirrend, jedoch wollte ich einem Freund beweisen, dass man bei seinem Login reinkommt. Theoretisch müsste es auch klappen, aber praktisch bin ich einfach zu blöd dafür.

Folgendes Formular:
Code:
<form action="index.php" method="post">
<fieldset>
	<legend>Anmeldung</legend>
	<br />
	<ul>
	<li>Nutzername:</li><li><input type="text" name="username" /><br /></li>
	</ul>
	<ul>
	<li>Passwort:</li> <li><input type="password" name="password" /></li>
	</ul>
	<ul>
	</ul><br />

	<ul><li><input type="submit" value="Einloggen" name="submit" /></li></ul>
	</fieldset>
</form>
Sein Sql-Code sieht dabei so aus:
PHP-Code:


<?php
 $sql 
"SELECT nickname, password    
         FROM  members 
             WHERE `nickname` = '"
.$_POST['username']."'";  
  
$result mysql_query($sql) OR die(mysql_error()); 
 
?>
Ich habe nun versuch für "username" folgendes einzugeben:
Code:
Nick';UPDATE members SET password = 'md5_pw' WHERE nickname = 'Nick')#
Durch das ; wollte ich den Update-befehl mit dem Select verbinden, aber er updatet nicht. ..

Kann mir wer helfen?

mfg

Geändert von Blackgreetz (21-05-2007 um 20:22 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 21-05-2007, 20:34
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ganz so einfach ist das nicht, aus Sicherheitsgründen wird mit mysql_query nur die erste von mehreren Abfragen ausgeführt.

Du könntest sowas wie
Code:
' OR 1=1 --
probieren und auf eine aufschlussreiche Ausgabe hoffen...
__________________
ich glaube
Mit Zitat antworten
  #3 (permalink)  
Alt 21-05-2007, 20:40
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Achso - grml..
Hatte nen Freund gefragt, der sich bei dem ";" aber auch nicht sicher wahr, aber gut zu wissen(danke).

Ich kenne ja den kompletten Login-Code, jedoch holt er mit dem select das pw aus der db, hasht(mit t?..ka^^) das POST-pw und vergleichst es dann in einer if, sodass ich da nichts machen kann.

zu deinem Code:
Was wäre dieses -- ? ...das gleiche wie, oder?

Wüsstest du denn, wie ich einen 2. Query anhängen kann vlt mitm Befehl, oder muss ich dein Comm. so verstehen, dass es generell nicht geht?

mfg
Mit Zitat antworten
  #4 (permalink)  
Alt 21-05-2007, 20:50
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also mir ist nichts bekannt, wie man da ne weitere query anhängen kann (und das ist auch ganz gut so).

Zum --: mysql comment syntax
__________________
ich glaube
Mit Zitat antworten
  #5 (permalink)  
Alt 21-05-2007, 20:54
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja , danke^^... dummheit natürlich von mir mit dem -- ... hätte man auch drauf kommen können, wenn ich nachdenke^^

Hmm..
Also wäre das Formular, so wie es dann ausgewertet wird sicher?.. 'Schad Schad'

trotzdem danke
Mit Zitat antworten
  #6 (permalink)  
Alt 21-05-2007, 20:58
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Naja, einen mysql-error würdest du ja immerhin bekommen, da steht dann schonmal drin, wie die Tabelle heißt usw.

Wenn du die Datenbankstruktur nicht kennen würdest, wären das schonmal informationen, die keinen was angehen.

Ansonsten wüßte ich nichts weiter, was man damit anstellen kann. Vielleicht hat er ja eine ähnliche Struktur, da wo der user sein pw ändern kann oder so.
__________________
ich glaube
Mit Zitat antworten
  #7 (permalink)  
Alt 21-05-2007, 21:05
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ' OR 1=1 -- macht keinen Fehler (nebenbei gesagt^^)

Nja... Egal - danke zumindest für die Aufschlüsselung
Mit Zitat antworten
  #8 (permalink)  
Alt 21-05-2007, 21:08
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

... oder man versuch einfach als admin einzuloggen und die Seite anschliessend durcheinander bringt oder die Datenbank löschen oder ... Es gibt viele Möglichkeiten. Fazit: wenn du so lässt, dann dürfte es nicht lange dauern, bis die Seite gehackt ist.
Mit Zitat antworten
  #9 (permalink)  
Alt 21-05-2007, 22:19
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von asp2php
... oder man versuch einfach als admin einzuloggen
Aber du kommst ja nicht als Admin rein.
Ich habe ja versucht, den Query z.b. mit ') OR 1=1 zu knacken, aber durch die if mit dem password, kommt immer falsches pw als fehler..
ich werd ich zwar noch sagen, dass er die post "validieren" muss, aber nja..

Oder weißt du, wie er reinkommt?
Code ist ungefähr so:
PHP-Code:
 $sql "SELECT nickname, password    
         FROM  members 
             WHERE `nickname` = '"
.$_POST['username']."'";  
 
$result mysql_query($sql) OR die(mysql_error()); 
 
$row mysql_fetch_assoc($result); 
 
$pass $row["password"]; 
 
$password  md5($_POST['password']); 
  
 if(
$password != $pass) { 
Wäre interessant zu wissen, wie du so reinkommen möchtest (jetzt mal keine ironie^^)

Edit: Vlt noch interessant: das ist der login zum acp der seite^^...gibt nur 1 admin bis jetzt und somit kein weiteren user

mfg
Mit Zitat antworten
  #10 (permalink)  
Alt 21-05-2007, 22:42
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du hast den Code im Vergleich zum ursprünglichen geändert/modifiziert, warum fragst du dann? Ich antworte nicht, wenn du die Bedingungen während der Diskussion änderst. Finde selbst heraus, wie sicher dein Code ist.
Mit Zitat antworten
  #11 (permalink)  
Alt 21-05-2007, 23:03
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Oben hatte ich bereits erklärt, dass post-pw gehasht wird und das andere aus der db geholt wird beim selecten...und die if hab ich auch angesprochen..
-> wüsste nicht, wo ich ihn modifiziert habe(hab ihn ja nur in code ausgedrückt)^^..

Ich selber kenne keine weitere Möglichkeit, da noch das PW zu ändern bzw. die if zu überlisten.
Fazit: sicher(...oder doch nicht?)

Tut mir leid, wenn es falsch rübergekommen ist.

mfg
Mit Zitat antworten
  #12 (permalink)  
Alt 21-05-2007, 23:05
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Sieh es mal so: Selbst wenn ein direkter Einbruch nicht möglich ist (was ich nicht ausschließe!), dann senkt das unbesehene Einbauen der POST-Daten in die Query die Gesamtsicherheit des Logins. Den durch obigen Trick mit OR 1=1 greift die WHERE-Klausel nicht mehr. Nun muß man nur noch ein richtiges Passwort erraten.

Somit erhöht jeder zusätzliche Benutzer das Risiko, gehackt zu werden. Denn es werden immer mehr Passwörter benutzt und damit steigt die Chance, eines zu erraten.
Du kannst leicht selbst ausrechnen wieviele Versuche notwendig sind, wenn du Zeichenraum und Mindestlänge von Benutzername und Passwort kennst. Das wird deinen Freund überzeugen.

Geändert von onemorenerd (21-05-2007 um 23:08 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 21-05-2007, 23:23
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hmh. Okay, stimmt schon.

Danke dann an alle beteiligten^^..

mfg
Mit Zitat antworten
  #14 (permalink)  
Alt 21-05-2007, 23:24
zerni
 Member
Links : Onlinestatus : zerni ist offline
Registriert seit: Oct 2006
Beiträge: 268
zerni ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Macht man das nicht eher so?

Abgesehen davon, dass man noch die Usereingaben prüfen müsste wg, SQL Injection
PHP-Code:
$sql "SELECT COUNT(*)    
         FROM  members 
             WHERE `nickname` = '"
.$_POST['username']." AND `password` = MD5(".$_POST['password'].")'";  

 
$result mysql_query($sql) OR die(mysql_error()); 

// oder so ähnlich weiss grad nicht genau wie man es schreibt
 
if(mysql_affected_rows()) { ...komm rein!...} 
__________________
Killerspiele sollten in der Größenordnung von Kinderpornografie eingeordnet werden.(G. Beckstein)
- ...und solche Behauptungen in "falsches Resourcenmanagement"

Geändert von zerni (21-05-2007 um 23:55 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 21-05-2007, 23:27
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hehe - cool, ein ähnliches(vom typ her) hab ich ihm auch gezeigt.
Mir war seine Variante, um ehrlich zu sein, nicht bekannt, aber jeder machts ja eh so, wie er will..

mfg
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:04 Uhr.