๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

IT@Security ๋ณด์•ˆ์ปจ์„คํŒ… #4 ์ฃผํ†ต๊ธฐ ์‹ค์Šต 5. SQL ์ธ์ ์…˜

by ๋น„์†Œ์•ผ 2023. 6. 30.
728x90

5. SQL ์ธ์ ์…˜

<๊ฐœ์š”>

 

โ–  SQL ์ธ์ ์…˜์ด๋ž€?

SQL ์‚ฝ์ž…(์˜์–ด: SQL Injection, SQL ์ธ์ ์…˜, SQL ์ฃผ์ž…)์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ณด์•ˆ ์ƒ์˜ ํ—ˆ์ ์„ ์˜๋„์ ์œผ๋กœ ์ด์šฉํ•ด, ์•…์˜์ ์ธ SQL๋ฌธ์„ ์‹คํ–‰๋˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์ •์ƒ์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๋Š” ์ฝ”๋“œ ์ธ์ ์…˜ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ์›น ์‚ฌ์ดํŠธ SQL ์ฟผ๋ฆฌ๊ฐ€ ์™„์„ฑ๋˜๋Š” ์•ฝ์ ์„ ์ด์šฉํ•˜๋ฉฐ, ์ž…๋ ฅ ๊ฐ’์„ ๋ณ€์กฐํ•˜์—ฌ ๋น„์ •์ƒ์ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์กฐํ•ฉํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜๋Š” ๊ณต๊ฒฉ์ด๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒ๊ฐ์ง€ ๋ชปํ•œ SQL๋ฌธ์„ ์‹คํ–‰๋˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์ •์ƒ์ ์œผ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

 

์˜ˆ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž์˜ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ผ์น˜ํ•˜๋ฉด ๋กœ๊ทธ์ธ์„ ํ•˜๋Š” PHP ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž.

$username = $_POST["username"];
$password = $_POST["password"];

$mysqli->query("SELECT * FROM users WHERE username='{$username}' AND password='{$password}'");

์œ„์˜ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ผ์น˜ํ•˜๋Š” ํ–‰์„ ์„ ํƒํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๊ฒฉ์ž๊ฐ€ ๋งŒ์•ฝ ์œ ์ €๋„ค์ž„์— admin, ํŒจ์Šค์›Œ๋“œ์— password' OR 1=1 -- ์„ ์ž…๋ ฅํ•˜๋ฉด ์ฟผ๋ฆฌ๋ฌธ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

SELECT * FROM users WHERE username='admin' and password='password' OR 1=1 --'

1=1์€ ํ•ญ์ƒ ์ฐธ์ด๋ฏ€๋กœ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต๊ฒฉ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์ถœ์ฒ˜ [์œ„ํ‚ค๋ฐฑ๊ณผ] 

https://ko.wikipedia.org/wiki/SQL_%EC%82%BD%EC%9E%85

 

โ–  ์ ๊ฒ€๋‚ด์šฉ

์›นํŽ˜์ด์ง€ ๋‚ด SQL ์ธ์ ์…˜ ์ทจ์•ฝ์  ์กด์žฌ ์—ฌ๋ถ€ ์ ๊ฒ€

 

โ–  ์ ๊ฒ€๋ชฉ์ 

๋Œ€ํ™”ํ˜• ์›น ์‚ฌ์ดํŠธ์— ๋น„์ •์ƒ์ ์ธ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ํ—ˆ์šฉ์„ ์ฐจ๋‹จํ•˜์—ฌ ์•…์˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋ฐ ์กฐ์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ

 

โ–  ๋ณด์•ˆ์œ„ํ˜‘

ํ•ด๋‹น ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋น„์ •์ƒ์ ์ธ SQL ์ฟผ๋ฆฌ๋กœ DBMS ๋ฐ ๋ฐ์ดํ„ฐ(Data)๋ฅผ ์—ด๋žŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•˜์—ฌ์•ผ ํ•จ

 

<์ ๊ฒ€๋Œ€์ƒ ๋ฐ ํŒ๋‹จ๊ธฐ์ค€>

 

โ–  ๋Œ€์ƒ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค์ฝ”๋“œ, ์›น ๋ฐฉํ™”๋ฒฝ

 

โ–  ํŒ๋‹จ๊ธฐ์ค€

์–‘ํ˜ธ : ์ž„์˜๋กœ ์ž‘์„ฑ๋œ SQL ์ฟผ๋ฆฌ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ

์ทจ์•ฝ : ์ž„์˜๋กœ ์ž‘์„ฑ๋œ SQL ์ฟผ๋ฆฌ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

 

โ–  ์กฐ์น˜๋ฐฉ๋ฒ•

์†Œ์Šค์ฝ”๋“œ์— SQL ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋‚˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ž„์˜์˜ SQL ์ฟผ๋ฆฌ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๊ฒ€์ฆ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ ์„œ๋ฒ„์— ๊ฒ€์ฆ๋˜์ง€ ์•Š๋Š” SQL ์ฟผ๋ฆฌ ์š”์ฒญ ์‹œ ์—๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ ์ •์ƒ ํŽ˜์ด์ง€๊ฐ€ ๋ฐ˜ํ™˜๋˜๋„๋ก ํ•„ํ„ฐ๋ง ์ฒ˜๋ฆฌํ•˜๊ณ  ์›น ๋ฐฉํ™”๋ฒฝ์— SQL ์ธ์ ์…˜ ๊ด€๋ จ ๋ฃฐ์…‹์„ ์ ์šฉํ•˜์—ฌ SQL ์ธ์ ์…˜ ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•จ

 

<์ ๊ฒ€ ๋ฐ ์กฐ์น˜ ์‚ฌ๋ก€>

 

โ–  ์ ๊ฒ€๋ฐฉ๋ฒ•

Step 1) ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์— ํŠน์ˆ˜๋ฌธ์ž๋‚˜ ์ž„์˜์˜ SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ DB ์—๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š”์ง€ ํ™•์ธ // ์–‘ํ˜ธ

 

 

Step 2) ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์— ์ž„์˜์˜ SQL ์ฐธ, ๊ฑฐ์ง“ ์ฟผ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ฐธ, ๊ฑฐ์ง“ ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜๋˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋‹ค๋ฅธ์ง€ ํ™•์ธ // ์–‘ํ˜ธ

 

 

Step 3) ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— ์ฐธ์ด ๋˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋กœ๊ทธ์ธ๋˜๋Š”์ง€ ํ™•์ธ // ์–‘ํ˜ธ

 

728x90