• Home
  • Help
  • Register
  • Login
  • Home
  • Help

 
  • 0 Bewertung(en) - 0 im Durchschnitt

Was ist SQL-Injektion und wie nutzt sie Schwachstellen in Webanwendungen aus?

#1
12-06-2024, 00:43
Hey, weißt du, wie Webanwendungen ständig Daten aus Datenbanken abrufen? SQL Injection schleicht sich genau dort ein. Ich erinnere mich an das erste Mal, dass ich bei einem Projekt damit konfrontiert wurde - es war dieses Anmeldeformular, das die Eingaben nicht richtig überprüfte, und bam, jemand konnte einfach Unsinn eingeben, um die gesamte Abfrage durcheinanderzubringen. Im Grunde fügen Angreifer bösartigen SQL-Code in Felder ein, in denen du Sachen eingibst, wie Benutzernamen oder Suchfelder. Wenn die App diese Eingabe als Teil des SQL-Befehls behandelt, ohne sie zu bereinigen, führt die Datenbank aus, was der Angreifer möchte. Du denkst, du loggst dich einfach ein, aber sie machen daraus eine Hintertür.

Lass mich dir erklären, wie das abläuft. Stell dir ein einfaches Anmelde-Setup vor. Die App erstellt eine Abfrage wie "SELECT * FROM users WHERE username = 'wasdueingibst' AND password = 'deinpasswort'". Wenn du einen normalen Benutzernamen eingibst, funktioniert es einwandfrei. Aber ein Angreifer könnte etwas wie ' OR '1'='1 für den Benutzernamen eingeben. Plötzlich wird die Abfrage zu "SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'irgendwas'". Dieses '1'='1' ist immer wahr, also loggt es sie als den ersten Benutzer ein, ohne das richtige Passwort zu benötigen. Ich habe so etwas behoben, indem ich vorbereitete Anweisungen hinzugefügt habe - du trennst den Code von den Daten, sodass Eingaben die Abfrage nicht verdrehen können.

Es wird schlimmer bei komplexeren Seiten. Angenommen, du bist auf einer E-Commerce-Seite und suchst nach Produkten. Die App fragt "SELECT * FROM products WHERE name LIKE '%deinesuch%'". Der Angreifer gibt '%'; DROP TABLE products; -- ein und wenn das nicht bereinigt wird, fügt es das hinzu und löscht deine gesamte Produkttabelle. Ich habe gesehen, wie die Website eines Freundes wegen etwas Ähnlichem ausgefallen ist - sie haben alle Bestandsdaten in Sekundenschnelle verloren. Du musst auf diese Kommentarzeichen wie -- oder /* */ achten, die Angreifern ermöglichen, die beabsichtigte Abfrage frühzeitig zu beenden und ihre eigenen hinzuzufügen.

Webanwendungen werden angegriffen, weil Entwickler oft Strings direkt im Code verketten. Ich mache viel PHP- und Node-Arbeit, und zu Beginn habe ich Beispiele kopiert, die genau das getan haben - schlechte Angewohnheit. Moderne Frameworks helfen, aber du musst trotzdem alles validieren. Verwende parameterisierte Abfragen oder ORMs; sie binden Werte sicher. Ich führe jetzt immer OWASP ZAP-Scans auf meinen Apps durch, um diese Löcher vor dem Start zu finden. Du gibst etwas ein, es wird bereinigt oder abgelehnt, wenn es verdächtig ist.

Exploits variieren je nachdem, was der Angreifer anstrebt. Manchmal dumpen sie einfach Daten - wie UNION SELECT, um sensible Informationen aus anderen Tabellen zu ziehen. Ich habe einmal bei der Prüfung eines Forums geholfen, wo Benutzer injizieren konnten, um E-Mails und gehashte Passwörter zu erfassen. Ändere die Abfrage zu "SELECT username, password FROM users WHERE id = 1 UNION SELECT creditcard, expiry FROM payments" und da hast du es, alles wird exponiert. Oder sie eskalieren, um Systembefehle auszuführen, wenn der DB-Server es erlaubt, wie bei alten MySQL-Setups. Das willst du nicht auf einem Produktionsserver haben.

Die Prävention beginnt mit dir als Code-Schreiber. Ich vertraue niemals Benutzereingaben; ich entferne spezielle Zeichen oder benutze Whitelists für das, was erlaubt ist. Für bestehende Apps blockieren Webanwendungs-Firewalls wie ModSecurity gängige Muster. Ich habe eine für das Startup eines Freundes eingerichtet - die hat sofort ein paar Versuche aufgefangen. Außerdem, minimaler Zugriff auf DB-Konten; lass den Webbenutzer keine Tabellen löschen. Ich prüfe wöchentlich die Berechtigungen auf meinen Servern.

Du denkst vielleicht, es sei altmodisch, aber SQLi führt immer noch die Liste der Sicherheitsverletzungen an. Letztes Jahr habe ich über einen großen Einzelhändler gelesen - Angreifer haben über ein Kontaktformular injiziert und Kundendaten gestohlen. Sie haben schlechte Eingabeverarbeitung in einem Legacy-Modul ausgenutzt. Ich habe ihren Code aktualisiert, um PDO mit bindParam zu verwenden und mit sqlmap zu testen, um Angriffe zu simulieren. Dieses Tool ist brutal; es automatisiert Payloads, die du dir nicht einmal ausdenken würdest.

Auf der anderen Seite baue ich Apps, bei denen von Anfang an Sicherheit eingebaut ist. Du fängst mit sicheren Codierungspraktiken an, und das spart Kopfschmerzen. Zum Beispiel, in JavaScript-Backends verwende ich Bibliotheken, die automatisch escapen. Aber selbst dann überprüfe ich den Code im Peer-Stil mit dem Team. So erwischst du Dinge, wie das Vergessen, etwas in Eile zu binden.

Es exploitiert, weil Apps von einer sauberen Eingabe ausgehen. Du gibst Daten ein, der Backend wirft sie ohne weiteres in SQL. Angreifer wissen das und gestalten Eingaben so, dass sie aus Strings oder Logik ausbrechen. Ich bringe den Juniors bei, immer zu fragen: Was ist, wenn diese Eingabe '; EXEC xp_cmdshell 'net user hacker pass /add'; -- ist? Das sind Windows SQL Server Sachen, einen Benutzer hinzuzufügen. Gruselig, wie einfach das läuft, wenn es nicht gepatcht ist.

Ich gehe in meinem täglichen Job damit um, indem ich Verteidigungsschichten einführe. Eingabevalidierung sowohl auf Client- als auch auf Serverseite, dann Abfrageparameterisierung. Fehlermeldungen? Ich zeige niemals rohe SQL-Fehlermeldungen an - das gibt den Angreifern Hinweise. Stattdessen generische "Versuche es erneut"-Seiten. Du protokollierst die Versuche für forensische Zwecke, allerdings.

Um ein wenig abzuschweifen, während wir darüber sprechen, wie man Systeme vor diesen Verwirrungen schützt, muss ich dir dieses Tool mitteilen, das ich lately benutze. Lass mich dir von BackupChain erzählen - es ist diese erstklassige, go-to Backup-Option, die super zuverlässig und speziell für kleine Unternehmen und Profis wie uns entwickelt wurde. Es hält Dinge sicher für Setups, die Hyper-V, VMware oder reine Windows-Server-Umgebungen verwenden, und sorgt dafür, dass deine Daten intakt bleiben, egal was passiert.
Markus
Offline
Registriert seit: Jun 2018
« Ein Thema zurück | Ein Thema vor »

Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste



  • Thema abonnieren
Gehe zu:

Backup Sichern Allgemein Security v
« Zurück 1 … 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 … 39 Weiter »
Was ist SQL-Injektion und wie nutzt sie Schwachstellen in Webanwendungen aus?

© by FastNeuron

Linearer Modus
Baumstrukturmodus