Heim Datenbank MySQL-Tutorial Gängige SQL-Injection-Methoden

Gängige SQL-Injection-Methoden

May 30, 2020 am 11:28 AM
sql注入

Gängige SQL-Injection-Methoden

Gemeinsame SQL-Injection-Methoden

SQL-Injection für WEB-Sicherheit

Einführung:

Bei der Entwicklung einer Website ist es aus Sicherheitsgründen notwendig, die von der Seite übergebenen Zeichen zu filtern. Normalerweise können Benutzer den Inhalt der Datenbank über die folgenden Schnittstellen aufrufen: URL-Adressleiste, Anmeldeschnittstelle, Message Board, Suchfeld usw. Dies bietet Hackern häufig Möglichkeiten, diese auszunutzen. Im schlimmsten Fall kann es zu Datenlecks und im schlimmsten Fall zum Ausfall des Servers kommen.

1. SQL-Injection-Schritte

a) Finden Sie den Injektionspunkt und erstellen Sie eine spezielle Anweisung

Die steuerbaren Parameter der eingehenden SQL-Anweisung werden unterteilt in zwei Kategorien
1. Bei numerischen Typen müssen Parameter nicht in Anführungszeichen gesetzt werden, z. B. ?id=1
2. Bei anderen Typen müssen Parameter in Anführungszeichen eingeschlossen werden, z. B.?name ="phone"

b) Der Benutzer erstellt eine SQL-Anweisung (z. B.: 'oder 1=1#;admin'# (diese Injektion wird auch als universelles Passwort von PHP bezeichnet, das die Eingabe des Passworts umgehen kann, wenn die Benutzername ist bekannt). und führt die notwendigen Operationen aus

e) DBMS Akzeptieren Sie das zurückgegebene Ergebnis, verarbeiten Sie es und geben Sie es an den Benutzer zurück

Da der Benutzer eine spezielle SQL-Anweisung erstellt, müssen spezielle Ergebnisse zurückgegeben werden (wie solange Ihre SQL-Anweisung flexibel genug ist)

Nachfolgend übergebe ich Beispiele, um die SQL-Injection im Detail zu demonstrieren

2. Detaillierte Erläuterung der SQL-Injection-Beispiele (bei den obigen Tests wird davon ausgegangen, dass magic_quote_gpc dies nicht ist auf dem Server aktiviert)


1) Vorbereitende Vorbereitungen Lassen Sie uns die erste SQL-Injection-Schwachstelle demonstrieren, melden Sie sich bei der Backend-Administratorschnittstelle an Erstellen Sie zunächst eine Datentabelle zum Testen:

CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(64) NOT NULL,
`password` varchar(64) NOT NULL,
`email` varchar(64) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
Nach dem Login kopieren

Fügen Sie einen Datensatz zum Testen hinzu:

INSERT INTO users (username,password,email)VALUES('MarcoFly',md5('test'),'marcofly@test.com');
Nach dem Login kopieren

Fügen Sie als Nächstes die Anmeldung ein. Der Quellcode der Schnittstelle

<html>
 <head> 
  <title>Sql注入演示</title> 
  <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
 </head> 
 <body> 
  <form action="validate.php" method="post"> 
   <fieldset> 
    <legend>Sql注入演示</legend> 
    <table> 
     <tbody>
      <tr> 
       <td>用户名:</td>
       <td><input type="text" name="username" /></td> 
      </tr> 
      <tr> 
       <td>密 码:</td>
       <td><input type="text" name="password" /></td> 
      </tr> 
      <tr> 
       <td><input type="submit" value="提交" /></td>
       <td><input type="reset" value="重置" /></td> 
      </tr> 
     </tbody>
    </table> 
   </fieldset> 
  </form>   
 </body>
</html>
Nach dem Login kopieren

Im Anhang finden Sie das Rendering:

Wenn der Benutzer auf die Schaltfläche „Senden“ klickt, werden die Formulardaten an die Seite „validate.php“ übermittelt. Die Seite „validate.php“ wird verwendet, um zu bestimmen, ob der vom Benutzer eingegebene Benutzername und das Passwort die Anforderungen erfüllen (dies Schritt ist sehr wichtig und darin liegen oft SQL-Schwachstellen)

!                                         <!--前台和后台对接-->
<html>
<head>
<title>登录验证</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<?php
$conn=@mysql_connect("localhost",&#39;root&#39;,&#39;&#39;) or die("数据库连接失败!");;
mysql_select_db("injection",$conn) or die("您要选择的数据库不存在");
$name=$_POST[&#39;username&#39;];
$pwd=$_POST[&#39;password&#39;];
$sql="select * from users where username=&#39;$name&#39; and password=&#39;$pwd&#39;";
$query=mysql_query($sql);
$arr=mysql_fetch_array($query);
if(is_array($arr)){
header("Location:manager.php");
}else{
echo "您的用户名或密码输入有误,<a href=\"Login.php\">请重新登录!</a>";
}
?>
</body>
</html>
Nach dem Login kopieren
Gängige SQL-Injection-Methoden Haben Sie es bemerkt? Die Daten (Benutzername und Passwort) werden direkt ausgeführt, eine Sonderzeichenfilterung jedoch nicht Später werden Sie verstehen, dass dies fatal ist.

Code-Analyse: Wenn Benutzername und Passwort erfolgreich übereinstimmen, wird zur Administrator-Bedienoberfläche (manager.php) gesprungen. Wenn dies fehlschlägt, wird eine freundliche Eingabeaufforderung angezeigt.

Schnittstelle für erfolgreiche Anmeldung:



Abfrage bei fehlgeschlagener Anmeldung:

Gängige SQL-Injection-Methoden

Bis hierher die vorläufige Die Arbeit ist erledigt. Okay, als nächstes beginnen wir mit unserem Highlight: SQL-Injection

Gängige SQL-Injection-Methoden 2) Erstellen Sie die SQL-Anweisung

Nachdem Sie den richtigen Benutzernamen (marcofly) und das richtige Passwort (test) eingegeben haben, klicken Sie auf „Senden“ und Es wird an unsere „Welcome Administrator“-Schnittstelle zurückgegeben.

Da der von uns übermittelte Benutzername und das Passwort wie folgt in die SQL-Abfrageanweisung synthetisiert werden:

select * from users where username=&#39;marcofly&#39; and password=md5(&#39;test&#39;)
Nach dem Login kopieren


Natürlich sind der Benutzername und das Passwort die gleichen wie zuvor, das werden Sie tun Ich kann mich auf jeden Fall erfolgreich anmelden. Was aber, wenn wir einen falschen Benutzernamen oder ein falsches Passwort eingeben? Offensichtlich kann ich mich definitiv nicht anmelden. Nun, das ist unter normalen Umständen der Fall, aber bei Websites mit SQL-Injection-Schwachstellen können Sie sich trotzdem erfolgreich anmelden, solange eine spezielle „Zeichenfolge“ erstellt wird.

Zum Beispiel: Geben Sie „ oder 1=1#“ in das Eingabefeld für den Benutzernamen ein, geben Sie das gewünschte Passwort ein, dann lautet die synthetisierte SQL-Abfrageanweisung:

select * from users where username=&#39;&#39; or 1=1#&#39; and password=md5(&#39;&#39;)
Nach dem Login kopieren
Nach dem Login kopieren

Semantische Analyse: „#“ ist ein Kommentarzeichen in MySQL, daher wird der Inhalt nach dem Nummernzeichen von MySQL als Kommentarinhalt betrachtet und daher nicht ausgeführt usw. Valenz:

select * from users where username=&#39;&#39; or 1=1#&#39; and password=md5(&#39;&#39;)
Nach dem Login kopieren
Nach dem Login kopieren

ist äquivalent zu

select* from users where usrername=&#39;&#39; or 1=1
Nach dem Login kopieren

, weil 1=1 immer wahr ist, das heißt, die where-Klausel ist immer wahr. Nach weiterer Vereinfachung der SQL usw . Es entspricht der folgenden Select-Anweisung:

select * from users
Nach dem Login kopieren

Ja, die Funktion dieser SQL-Anweisung besteht darin, alle Felder in der Benutzertabelle abzurufen

Das Obige ist eine Eingabemethode. Hier ist eine weitere Injektionsmethode. Diese Methode wird auch als universelles Passwort von PHP bezeichnet.


Wir können uns ohne Passwort anmelden, wenn wir den Benutzernamen bereits kennen: admin

Konstruktionsanweisung :

select * from users where username=&#39;admin&#39;#&#39; and password=md5(&#39;&#39;)
Nach dem Login kopieren

entspricht

select * from users where username=&#39;admin&#39;
Nach dem Login kopieren

, Sie können sich also anmelden, ohne ein Passwort einzugeben.

Die Datenbank geht fälschlicherweise davon aus, dass Sie sich ohne Benutzernamen anmelden können, wodurch die Hintergrundüberprüfung umgangen wird und der Zweck der Injektion erreicht wird.

nutzt auch Schwachstellen in der SQL-Syntax aus.

Sehen Sie, eine konstruierte SQL-Anweisung kann solch eine schreckliche Zerstörungskraft haben. Ich glaube, dass Sie, nachdem Sie dies gesehen haben, anfangen werden, ein rationales Verständnis der SQL-Injection zu entwickeln~
Ja, SQL-Injection. So einfach ist das. Allerdings ist es nicht so einfach, flexible SQL-Anweisungen entsprechend der tatsächlichen Situation zu erstellen. Nachdem Sie die Grundlagen verstanden haben, können Sie es langsam auf eigene Faust erkunden.
Haben Sie jemals darüber nachgedacht, was passiert, wenn die über das Hintergrund-Anmeldefenster übermittelten Daten vom Administrator mit Sonderzeichen herausgefiltert werden? In diesem Fall kann unser universeller Benutzername oder 1=1# nicht verwendet werden. Dies bedeutet jedoch nicht, dass wir keine Gegenmaßnahmen haben. Wir müssen wissen, dass es für Benutzer mehr als eine Möglichkeit gibt, mit der Datenbank zu interagieren.

Empfohlen: „MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonGängige SQL-Injection-Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Nginx-Grundkenntnisse zur Sicherheit: Verhindern von SQL-Injection-Angriffen Nginx-Grundkenntnisse zur Sicherheit: Verhindern von SQL-Injection-Angriffen Jun 10, 2023 pm 12:31 PM

Nginx ist ein schneller, leistungsstarker und skalierbarer Webserver, und seine Sicherheit ist ein Problem, das bei der Entwicklung von Webanwendungen nicht ignoriert werden darf. Insbesondere SQL-Injection-Angriffe, die Webanwendungen großen Schaden zufügen können. In diesem Artikel besprechen wir, wie man mit Nginx SQL-Injection-Angriffe verhindert und so die Sicherheit von Webanwendungen schützt. Was ist ein SQL-Injection-Angriff? Der SQL-Injection-Angriff ist eine Angriffsmethode, die Schwachstellen in Webanwendungen ausnutzt. Angreifer können Schadcode in Webanwendungen einschleusen

So verwenden Sie exp für die SQL-Fehlerinjektion So verwenden Sie exp für die SQL-Fehlerinjektion May 12, 2023 am 10:16 AM

0x01 Vorwort Übersicht Der Herausgeber hat einen weiteren doppelten Datenüberlauf in MySQL entdeckt. Wenn wir die Funktionen in MySQL erhalten, interessiert sich der Editor mehr für die mathematischen Funktionen. Sie sollten auch einige Datentypen zum Speichern von Werten enthalten. Daher führte der Editor einen Test durch, um festzustellen, welche Funktionen Überlauffehler verursachen würden. Dann stellte der Editor fest, dass die Funktion exp() einen Überlauffehler verursacht, wenn ein Wert größer als 709 übergeben wird. mysql>selectexp(709);+---------+|exp(709)|+---------- - -----------+|8.218407461554972

Laravel-Entwicklungshinweise: Methoden und Techniken zur Verhinderung von SQL-Injection Laravel-Entwicklungshinweise: Methoden und Techniken zur Verhinderung von SQL-Injection Nov 22, 2023 pm 04:56 PM

Hinweise zur Laravel-Entwicklung: Methoden und Techniken zur Verhinderung von SQL-Injection Mit der Entwicklung des Internets und der kontinuierlichen Weiterentwicklung der Computertechnologie ist die Entwicklung von Webanwendungen immer häufiger geworden. Während des Entwicklungsprozesses war Sicherheit schon immer ein wichtiges Thema, das Entwickler nicht ignorieren können. Unter anderem ist die Verhinderung von SQL-Injection-Angriffen eines der Sicherheitsprobleme, das während des Entwicklungsprozesses besondere Aufmerksamkeit erfordert. In diesem Artikel werden verschiedene Methoden und Techniken vorgestellt, die häufig in der Laravel-Entwicklung verwendet werden, um Entwicklern dabei zu helfen, SQL-Injection wirksam zu verhindern. Parameterbindung verwenden Die Parameterbindung ist Lar

Erkennung und Reparatur von PHP-SQL-Injection-Schwachstellen Erkennung und Reparatur von PHP-SQL-Injection-Schwachstellen Aug 08, 2023 pm 02:04 PM

Überblick über die Erkennung und Behebung von PHP-SQL-Injection-Schwachstellen: SQL-Injection bezeichnet eine Angriffsmethode, bei der Angreifer Webanwendungen verwenden, um böswillig SQL-Code in die Eingabe einzuschleusen. PHP ist eine in der Webentwicklung weit verbreitete Skriptsprache und wird häufig zur Entwicklung dynamischer Websites und Anwendungen verwendet. Aufgrund der Flexibilität und Benutzerfreundlichkeit von PHP ignorieren Entwickler jedoch häufig die Sicherheit, was zur Entstehung von SQL-Injection-Schwachstellen führt. In diesem Artikel wird beschrieben, wie SQL-Injection-Schwachstellen in PHP erkannt und behoben werden, und es werden relevante Codebeispiele bereitgestellt. überprüfen

PHP-Programmiertipps: So verhindern Sie SQL-Injection-Angriffe PHP-Programmiertipps: So verhindern Sie SQL-Injection-Angriffe Aug 17, 2023 pm 01:49 PM

PHP-Programmiertipps: So verhindern Sie SQL-Injection-Angriffe Sicherheit ist bei der Durchführung von Datenbankoperationen von entscheidender Bedeutung. SQL-Injection-Angriffe sind ein häufiger Netzwerkangriff, der die unsachgemäße Verarbeitung von Benutzereingaben durch eine Anwendung ausnutzt, was dazu führt, dass bösartiger SQL-Code eingefügt und ausgeführt wird. Um unsere Anwendung vor SQL-Injection-Angriffen zu schützen, müssen wir einige Vorsichtsmaßnahmen treffen. Verwenden Sie parametrisierte Abfragen. Parametrisierte Abfragen sind die einfachste und effektivste Möglichkeit, SQL-Injection-Angriffe zu verhindern. Es funktioniert durch den Vergleich vom Benutzer eingegebener Werte mit einer SQL-Abfrage

So verhindern Sie SQL-Injection-Angriffe mit PHP So verhindern Sie SQL-Injection-Angriffe mit PHP Jun 24, 2023 am 10:31 AM

Im Bereich der Netzwerksicherheit sind SQL-Injection-Angriffe eine gängige Angriffsmethode. Es nutzt von böswilligen Benutzern übermittelten Schadcode aus, um das Verhalten einer Anwendung zu ändern und unsichere Vorgänge auszuführen. Zu den gängigen SQL-Injection-Angriffen gehören Abfragevorgänge, Einfügevorgänge und Löschvorgänge. Unter diesen werden Abfrageoperationen am häufigsten angegriffen, und eine gängige Methode zur Verhinderung von SQL-Injection-Angriffen ist die Verwendung von PHP. PHP ist eine häufig verwendete serverseitige Skriptsprache, die häufig in Webanwendungen verwendet wird. PHP kann mit MySQL usw. zusammenhängen.

PHP-Formularfilterung: Verhinderung und Filterung von SQL-Injections PHP-Formularfilterung: Verhinderung und Filterung von SQL-Injections Aug 07, 2023 pm 03:49 PM

PHP-Formularfilterung: Verhinderung und Filterung von SQL-Injections Einführung: Mit der rasanten Entwicklung des Internets ist die Entwicklung von Webanwendungen immer häufiger geworden. In der Webentwicklung sind Formulare eine der häufigsten Formen der Benutzerinteraktion. Allerdings bestehen bei der Verarbeitung der Daten zur Formularübermittlung Sicherheitsrisiken. Eines der häufigsten Risiken sind SQL-Injection-Angriffe. Ein SQL-Injection-Angriff ist eine Angriffsmethode, bei der eine Webanwendung dazu verwendet wird, Benutzereingabedaten falsch zu verarbeiten, sodass der Angreifer nicht autorisierte Datenbankabfragen durchführen kann. Der Angreifer passiert die

Systemsicherheit verbessern: MyBatis-Tipps zur Verhinderung von SQL-Injection-Angriffen Systemsicherheit verbessern: MyBatis-Tipps zur Verhinderung von SQL-Injection-Angriffen Feb 21, 2024 pm 09:12 PM

Systemsicherheit verbessern: MyBatis-Tipps zur Abwehr von SQL-Injection-Angriffen Mit der kontinuierlichen Weiterentwicklung der Informationstechnologie sind Datenbankanwendungen zu einem unverzichtbaren Bestandteil moderner Softwaresysteme geworden. Was jedoch folgt, sind Datenbanksicherheitsprobleme, von denen das häufigste und schwerwiegendste wahrscheinlich SQL-Injection-Angriffe sind. Bei SQL-Injection-Angriffen fügen Angreifer bösartigen SQL-Code in Eingabefelder ein, um illegal an Informationen in der Datenbank zu gelangen oder die Integrität der Datenbank zu zerstören. Zum Schutz vor SQL

See all articles