Richtlinien

Injektionen für Einsteiger

Zu den bekanntesten Schwachstellenklassen gehören Injection-Schwachstellen, allen voran – wenig überraschend – der unangefochtene Klassiker: SQL-Injection. Da man in der Tech-Welt kaum an SQL-Injection vorbeikommt, werden wir uns genau damit befassen. 

Bei einer SQL-Injection ist es möglich, das Verhalten einer SQL-Abfrage so zu manipulieren, dass sie die Befehle eines Angreifers ausführt. 

Es gibt viele weitere Arten von Injections, die sich zwar oberflächlich unterscheiden, aber alle auf demselben Prinzip basieren. 

Zur Wiederholung: Hier sind einige der häufigsten Injection-Arten:

  • SQL-Injection
  • Cross-Site Scripting (HTML/Javascript-Injection)
  • Path Traversal (Pfad-/URL-Injection)
  • Command-Injection
  • Code-Injection 

Ein wenig Injection 101

Betrachtet man die obige Liste der Injection-Arten, so haben sie alle eines gemeinsam: Sie basieren auf einer Zeichenfolge, die von einem Interpreter verarbeitet wird, welcher dann genau das ausführt, was die Zeichenfolge vorgibt. Wir haben die „Benutzereingaben“ in geschweifte Klammern gesetzt.     

Type Example input How it’s interpreted
SQL SELECT name FROM users WHERE username = '{admin}' Selects the "Name" column from all rows from the users table where the username is 'admin'
HTML {John Smith} Shows the name "John Smith" in bold letters
Path /var/www/app/documents/{privacy-policy.pdf} Points at the file `privacy-policy.pdf` in the `/var/www/app/documents/` folder
Command ping {8.8.8.8} Sends a series of ICMP pings to the IP `8.8.8.8`
Code const name = '{John Smith}'; Sets the constant variable `name` to the value `John Smith

Was passiert also, wenn die Einfügung von Benutzereingaben unsicher ist? Was könnte ein Angreifer tun? Auch hier gilt: Alles in den geschweiften Klammern wird in diesem Szenario als „Benutzereingabe“ betrachtet.

Type Example input How it’s interpreted
SQL - Injected SELECT name FROM users WHERE username = '{1' UNION SELECT passwordhash from users WHERE username = 'admin}' Selects the "Name" from all rows from the users table where the username is 'admin', and the password hash for the users where the username is 'admin'
HTML - Injected {} Show the name "John Smith" in bold letters
Path - Injected /var/www/app/documents/{../../../../../etc/shadow} Points at the file `shadow` in the `/etc/` folder
Command - Injected ping {8.8.8.8 && ls . } Sends a series of ICMP pings to the IP `8.8.8.8`, and prints the contents of the current directory with `ls`
Code - Injected const name = '{John Smith'; exec('ls .'); # }'; Sets the constant variable `name` to the value `John Smith`, and then executes the system command `ls .

Achten Sie in diesen Beispielen darauf, wie die Eingabe genutzt werden kann, um das Ergebnis der Benutzereingabe zu beeinflussen. 

Das ist der Kern einer Injection. Es geht darum, die Daten zu beeinflussen, die an den Interpreter übergeben werden, um ihn dazu zu bringen, etwas anderes zu tun, als vom ursprünglichen Programmierer beabsichtigt.

Das sind nur die Grundlagen. Wir haben einige der verschiedenen Injection-Arten auf eigene Seiten ausgelagert, da sie etwas mehr Aufmerksamkeit verdienen. 

Sie finden sie hier:

Command-Injection‍

Path Traversal‍

SQL-Injection‍

Cross-Site Scripting

Slogan

Sichere Programmierung in der Praxis

Entdecken Sie Richtlinien für sicheres Programmieren, um Schwachstellen wie die OWASP Top 10 zu verstehen und zu beheben, und tauchen Sie in geführte Trainingsmissionen ein, um diese in realistischen Anwendungssimulationen zu üben.

Weitere Richtlinien
Demo buchen