Heim >Datenbank >MySQL-Tutorial >Teilen Sie ein Beispiel für die Verwendung einer SQL-Injection-Sicherheitsanfälligkeit zum Ziehen der Bibliothek
Die Verwendung von SQL-Injection-Schwachstellen zum Anmelden am Backend und die Verwendung von SQL-Injection-Schwachstellen zum Ziehen von Bibliotheken sind nur eine Zusammenfassung, nachdem ich den relevanten Inhalt gelernt habe, und es gibt keine Tiefe.
Ähnlich wie im vorherigen Artikel müssen wir eine Datentabelle erstellen und zu Testzwecken mehrere Daten in die Tabelle einfügen und daraus entfernen.
Erstellen Sie eine Tabelle in der Datenbank:
Der Code lautet wie folgt:
CREATE TABLE `article` ( `articleid` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '', `content` text CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`articleid`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
Ich werde den Code zum Einfügen von Daten in die Tabelle nicht veröffentlichen. Sie können ihn herunterladen und importieren es direkt in die Datenbank.
Als nächstes schreiben wir eine Seite, die Benutzeranfragen verarbeitet. Hier filtern wir bewusst nicht die vom Benutzer übermittelten Daten, sodass eine SQL-Injection-Schwachstelle zum Testen übrig bleibt.
Der Code lautet wie folgt:
Der Code lautet wie folgt:
<?php $servername = "localhost"; $dbusername = "root"; $dbpassword = ""; $dbname = "test"; $id=$_GET['id'];//id未经过滤 $conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败"); mysql_select_db($dbname,$conn); mysql_query('set names utf8'); $sql = "SELECT * FROM article WHERE articleid='$id'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_array($result); echo "<p>利用SQL注入漏洞拖库<p>"; if (!$row){ echo "该记录不存在"; exit; } echo "标题<br>".$row['title']."<p>"; echo "内容<br>".$row['content']."<p>"; ?>
Wir geben direkt im Browser ein:
127.0.0.1/marcofly/phpstudy /sqlinsert/showart. php?id=1
Sie können auf einen Datensatz mit der ID 1 in der Artikeltabelle zugreifen
Die Zugriffsergebnisse lauten wie folgt:
Als nächstes werden wir diese Schwachstelle ausnutzen (wenn Sie die Schwachstelle nicht kennen, können Sie nur Tools + manuelle Erkennung verwenden), um zu demonstrieren, wie die Artikeltabelle heruntergeladen wird.
Geben Sie in die Adressleiste ein: ' in outfile 'e:/sql.txt'%23
Analyse: %23 ist der ASCII-Code von #, da er sich nach der direkten Eingabe von # in das Datenbanksystem ändert Adressleiste. Wenn sie leer wird, müssen Sie %23 in die Adressleiste eingeben, dann wird sie zu # und dann kommentieren die folgende SQL-Anweisung.
Öffnen Sie nach dem Ausführen das Laufwerk E und suchen Sie nach einer zusätzlichen sql.txt-Datei. Nach dem Öffnen befindet sich ein Eintrag im Tabellenartikel.
Warum gibt es nur einen Datensatz? Enthält diese Datentabelle nur einen Datensatz? Dies ist nicht der Fall, da wir nur einen Datensatz mit der ID 1 abrufen. Können wir also alle Datensätze in der Artikeltabelle auf einmal herunterladen?
Die Antwort lautet „Ja“, solange Ihre konstruierte SQL-Anweisung flexibel genug ist (auch hier wird die Flexibilität konstruierter SQL-Anweisungen hervorgehoben).
Analyse: Wenn Sie „into outfile 'e:/sql.txt'%23“ in die URL-Adressleiste eingeben, wird es in die SQL-Abfrageanweisung eingefügt und wird zu:
SELECT * FROM Article WHERE Articleid='5 ' in die Ausgabedatei 'e:/whf.txt'#'
Nach sorgfältiger Analyse können wir die SQL-Anweisung wie folgt konstruieren:
SELECT * FROM Article WHERE Articleid='' oder 1=1 in die Ausgabedatei 'e: /whf.txt'#'
In diesem Fall ist die WHERE-Klausel immer wahr, egal was passiert. Mit anderen Worten, die SQL-Anweisung entspricht dem Folgenden:
SELECT * FROM Article in die Ausgabedatei „e:/whf.txt“ # „Exportieren Sie den Inhalt.
Wenn Sie es nicht glauben, können Sie es ausführen ...
Mithilfe von SQL-Injection-Schwachstellen können wir natürlich Tabellennamen, Spaltennamen, Benutzerkennwortlänge (LEFT-Funktion) usw. erraten, wenn Wir können der obigen Demonstration direkt folgen. Wenn Sie alle Daten in der Tabelle exportieren, müssen Sie den Tabellennamen, den Spaltennamen usw. nicht erraten.
Ich bin etwas müde, also schreibe ich es einfach hier.
Die Verwendung von SQL-Injection-Schwachstellen zum Anmelden am Backend und die Verwendung von SQL-Injection-Schwachstellen zum Ziehen von Bibliotheken sind eine Zusammenfassung, nachdem ich den relevanten Inhalt gelernt habe. Wie am Anfang des Artikels erwähnt, handelt es sich nur um eine Zusammenfassung und hat keine andere Bedeutung.
Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen
2.Wie kann man SQL-Injection verhindern? Stellen Sie 5 Möglichkeiten zur Verhinderung von SQL-Injection vor
3.Teilen Sie fünf bekannte Tools zum Scannen von SQL-Injection-Schwachstellen
Teilen Sie einen SQL-Injection-Instanzprozess
Das obige ist der detaillierte Inhalt vonTeilen Sie ein Beispiel für die Verwendung einer SQL-Injection-Sicherheitsanfälligkeit zum Ziehen der Bibliothek. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!