Heim  >  Artikel  >  Datenbank  >  Teilen Sie ein Beispiel für die Verwendung einer SQL-Injection-Sicherheitsanfälligkeit zum Ziehen der Bibliothek

Teilen Sie ein Beispiel für die Verwendung einer SQL-Injection-Sicherheitsanfälligkeit zum Ziehen der Bibliothek

零下一度
零下一度Original
2017-05-17 15:56:398410Durchsuche

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[&#39;id&#39;];//id未经过滤 
$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败"); 
mysql_select_db($dbname,$conn); 
mysql_query(&#39;set names utf8&#39;); 
$sql = "SELECT * FROM article WHERE articleid=&#39;$id&#39;"; 
$result = mysql_query($sql,$conn); 
$row = mysql_fetch_array($result); 
echo "<p>利用SQL注入漏洞拖库<p>"; 
if (!$row){ 
echo "该记录不存在"; 
exit; 
} 
echo "标题<br>".$row[&#39;title&#39;]."<p>"; 
echo "内容<br>".$row[&#39;content&#39;]."<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.

【Verwandte Empfehlungen】


1.

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!

Stellungnahme:
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