[์‚ฌ์ด๋ฒ„ ํƒํ—˜ : ๋ณด์•ˆ์˜ ์ฒซ๊ฑธ์Œ] OWASP Juice-Shop์„ ํ†ตํ•ด ์•Œ์•„๋ณด๋Š” SQL Injection

๐Ÿ’กOWASP Juice-Shop์ด๋ž€?

โ€˜OWASP Juice-Shopโ€™์ด๋ž€ OWASP(Open Web Application Security Project)์—์„œ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ์ทจ์•ฝ์  ์‹ค์Šต์šฉ ํ”„๋กœ์ ํŠธ์˜ˆ์š”. ์ฃผ์š” ์›น ์ทจ์•ฝ์ ์ธ OWASP Top 10 ์ทจ์•ฝ์ ๋“ค์ด ์‹ค์ œ ์ ์šฉ๋˜์–ด ์žˆ์–ด, ์ด ์ทจ์•ฝ์ ๋“ค์„ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ต๋‹ˆ๋‹ค.

Juice-Shop์„ ํ†ตํ•ด ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, Burp Suite๋‚˜ Foxy Proxy ๊ฐ™์€ ํ”„๋ก์‹œ ํˆด์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐ŸงƒJuice-Shop ์„ค์น˜ํ•˜๊ธฐ

๋ณธ๊ฒฉ์ ์ธ ๋‚ด์šฉ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ๋จผ์ € Juice-Shop์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ• ๊ฒŒ์š”.
Juice-Shop์„ ๋ฆฌ๋ˆ…์Šค์— ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ •๋ง ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์ €๋Š” ๊ทธ์ค‘ Docker๋กœ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ !
(โš ๏ธํ•ด๋‹น ์„ค๋ช…์€ ์นผ๋ฆฌ ๋ฆฌ๋ˆ…์Šค ๊ธฐ์ค€์œผ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค!)

์šฐ์„  docker --version ๋ช…๋ น์–ด๋กœ ์นผ๋ฆฌ ๋ฆฌ๋ˆ…์Šค์— ๋„์ปค๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด,

sudo apt update
sudo apt install docker.io -y

๋ฅผ ์ฐจ๋ก€๋กœ ์ž…๋ ฅํ•ด ๋„์ปค๋ฅผ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.

๋‹ค์Œ์€ ๋„์ปค ์„œ๋น„์Šค ์‹œ์ž‘ ๋ฐ ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์ž…๋‹ˆ๋‹ค.

sudo systemctl start docker
sudo systemctl enable docker

๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.

์ด์ œ ์„ค์น˜๊ฐ€ ๊ฑฐ์˜ ๋๋‚˜๊ฐ‘๋‹ˆ๋‹ค!!

sudo docker pull bkimminich/juice-shop

๋ช…๋ น์–ด๋กœ Juice-Shop ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด ์ฃผ์„ธ์š”.

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๋„์ปค๋ฅผ ์ด์šฉํ•œ Juice-Shop์˜ ์„ค์น˜ ๊ณผ์ •์ด์—ˆ์Šต๋‹ˆ๋‹ค! ๊ฐ„๋‹จํ•˜์ฃ ~?๐Ÿ˜‰
์ด์ œ sudo docker run --rm -p 42000:3000 bkimminich/juice-shop ๋ช…๋ น์–ด๋กœ Juice-Shop ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋กœ์ปฌ์˜ 42000ํฌํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 3000ํฌํŠธ๋กœ ์—ฐ๊ฒฐ๋  ๊ฑฐ์˜ˆ์š”. ์ดํ›„ https://127.0.0.1:42000 ๊ฐ™์€ URL์ด ๋œจ๋ฉด ์ ‘์†ํ•ด ์ฃผ์„ธ์š”!

Juice-Shop์— ์„ฑ๊ณต์ ์œผ๋กœ ์ง„์ž…ํ•˜๋ฉด,

๊ทธ๋ฆผ 1. [Juice-Shop ๋ฉ”์ธํ™”๋ฉด]

๊ทธ๋ฆผ 1. [Juice-Shop ๋ฉ”์ธํ™”๋ฉด]

์ด๋Ÿฐ ๋ฉ”์ธ ํ™”๋ฉด์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์ฃผ์Šค๋ฅผ ํŒ๋งคํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์ดํŠธ ๊ฐ™์ง€ ์•Š๋‚˜์š”?
์ด ํŽ˜์ด์ง€๋ฅผ ์‹œ์ž‘์œผ๋กœ, ์‹ค์ œ ์›นํŽ˜์ด์ง€์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธ ํ™”๋ฉด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ์ƒํ’ˆ ์„ค๋ช… ๋“ฑ๋„ ์ž˜ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋‹ˆ ํ•œ ๋ฒˆ์”ฉ ์‚ดํŽด๋ณด๋Š” ์žฌ๋ฏธ๊ฐ€ ์ ์ ํ•˜๋‹ต๋‹ˆ๋‹ค!

์ด๋ฒˆ 9์›” ํ˜ธ์—์„œ๋Š” SQL Injection์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”, Juice-Shop์—๋Š” SQL Injection์— ๊ด€๋ จํ•œ ์ฑŒ๋ฆฐ์ง€๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์–ด Juice-Shop์„ ์ด์šฉํ•˜๋ฉด ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋งŽ์€ ์ง€์‹์„ ์–ป์„ ์ˆ˜ ์žˆ๊ณ , ์‹œ๊ฐ์ ์ธ ์ดํ•ด๋„ ๊ฐ€๋Šฅํ•ด์š”!

๊ทธ๋Ÿผ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ SQL Injection์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณธ ๋’ค, Juice-Shop์˜ ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค-!๐Ÿš€



๐Ÿ’กSQL Injection


๐Ÿ”ŽSQL Injection์ด๋ž€?

๊ทธ๋ฆผ 2. [SQL์ธ์ ์…˜]

๊ทธ๋ฆผ 2. [SQL์ธ์ ์…˜]

SQL Injection์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์ ์„ ์•…์šฉํ•ด ์•…์˜์ ์ธ SQL ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ถˆ๋ฒ•์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ ์˜๋ฏธํ•ด์š”.

์—ฌ๊ธฐ์„œ SQL ์ด๋ž€ โ€˜Structured Query Languageโ€™์˜ ์•ฝ์ž๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๋“ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ ์–ธ์–ด์˜ˆ์š”. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ช…๋ น์„ ๋‚ด๋ ค ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์“ฐ์ด๋Š” ์–ธ์–ด๋ž๋‹ˆ๋‹ค.
SELECT name, age
FROM users
WHERE age > 20
ORDER BY age DESC;
์ด ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•œ SQL ์ฝ”๋“œ ์˜ˆ์‹œ์ธ๋ฐ์š”, ์ฝ”๋“œ์—์„œ SELECT name, age๋ผ๋Š” ๋ถ€๋ถ„์€ users ํ…Œ์ด๋ธ”์—์„œ name๊ณผ age ์†์„ฑ์„ ์„ ํƒํ•ด ์กฐํšŒํ•œ๋‹ค๋Š” ๋œป์ด์—์š”. FROM users๋Š” ์กฐํšŒ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์ด users์ž„์„ ์ง€์ •ํ•˜๊ณ , WHERE age > 20์€ age๊ฐ€ 20๋ณด๋‹ค ํฐ ํ–‰๋งŒ ํ•„ํ„ฐ๋งํ•ด ์„ ํƒํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ORDER BY age DESC๋Š” ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ age ์†์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ(DESC)์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

id name age email
1 Alice 25 alice@example.com
2 Bob 19 bob@example.com
3 Charlie 30 charlie@example.com
4 Diana 22 diana@example.com

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ”์—์„œ SQL์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด age๊ฐ€ 20๋ณด๋‹ค ํฐ Alice, Charlie, Diana๊ฐ€ ์„ ํƒ๋˜๋ฉฐ, age๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค๊ณ  ํ•˜์˜€์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” Charlie(30), Alice(25), Diana(22)์ˆœ์„œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
์š”์•ฝํ•ด ๋ณด๋ฉด, SQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด ์ง‘ํ•ฉ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์–ด์š”!

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

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์˜ ๊ฒฐ๊ณผ๋กœ ๊ฐœ์ธ ์ •๋ณด ํƒˆ์ทจ, ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ ๋ณ€์กฐ, ๊ถŒ๋ฆฌ์ž ๊ถŒํ•œ ํƒˆ์ทจ ๋“ฑ์˜ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.


๐Ÿ”ฅSQL Injection์˜ ๊ณต๊ฒฉ ์œ ํ˜•

1. Error Based SQL Injection
์ฒซ ๋ฒˆ์งธ ์œ ํ˜•์€ Error Based SQL Injection์ž…๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” Injection์œผ๋กœ, ๊ณต๊ฒฉ์ž๊ฐ€ SQL ์ฟผ๋ฆฌ์—์„œ ์˜๋„์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€์— ๋‚˜ํƒ€๋‚˜๋Š” ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋‚˜ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ ์˜๋ฏธํ•ด์š”. ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณผ๊นŒ์š”?
SELECT * FROM users WHERE id = '1' OR 1=1; ์€ ์ทจ์•ฝํ•œ ์ฟผ๋ฆฌ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ, ' AND (SELECT 1/0 FROM users)-- ๋ช…๋ น์–ด๋Š” 1/0์€ 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•ด์š”. ๋”ฐ๋ผ์„œ ๊ทธ ๋‚ด์šฉ์œผ๋กœ ํ…Œ์ด๋ธ” ๋ฐ ์ปฌ๋Ÿผ ์ •๋ณด๊ฐ€ ์œ ์ถ”๋  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

2. Union SQL Injection
๋‘ ๋ฒˆ์งธ ์œ ํ˜•์€ Union SQL Injection์ž…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ SQL์˜ UNION ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์›๋ณธ ์ฟผ๋ฆฌ์™€ ๋™์ผํ•œ ํ˜•ํƒœ์˜ ์•…์„ฑ ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด, ์‚ฌ์šฉ์ž ์ •๋ณด, ๋กœ๊ทธ์ธ ๊ณ„์ • ๋ฐ ์‹œ์Šคํ…œ ์ •๋ณด ๋“ฑ์„ ํƒˆ์ทจํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ UNION ๋ช…๋ น์–ด๋ž€, SQL์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ
SELECT name FROM students
UNION
SELECT name FROM teachers;
๋ผ๋Š” ์ฟผ๋ฆฌ๋Š” students์™€ teachers ํ…Œ์ด๋ธ”์—์„œ name ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ชจ์•„ ํ•œ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ UNION SQL Injection์˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”.
SELECT id, name FROM users WHERE id = '$input';์€ ์ทจ์•ฝํ•œ ์ฟผ๋ฆฌ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
์ด๋•Œ UNION Injection์ด ๊ตฌํ˜„๋œ ' UNION SELECT username, password FROM users--๋ช…๋ น์–ด๋Š” id ์ž…๋ ฅ๊ฐ’ ๋Œ€์‹  UNION SELECT ๊ตฌ๋ฌธ์„ ์‚ฝ์ž…ํ•ด, users ํ…Œ์ด๋ธ”์˜ username๊ณผ password ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด ์กฐํšŒํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

3. Blind SQL Injection
์„ธ ๋ฒˆ์งธ ์œ ํ˜•์œผ๋กœ๋Š” Blind SQL Injection์ด ์žˆ๋Š”๋ฐ์š”, ์ด ๊ณต๊ฒฉ์—์„œ ๊ณต๊ฒฉ์ž๋Š” SQL ์ฟผ๋ฆฌ์— ์กฐ๊ฑด์„ ์‚ฝ์ž…ํ•˜๊ณ , ์„œ๋ฒ„ ์‘๋‹ต ๊ฒฐ๊ณผ๋‚˜ ์‘๋‹ต ์‹œ๊ฐ„์„ ํ†ตํ•ด ์กฐ๊ฑด์˜ ์ฐธ/๊ฑฐ์ง“์„ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์ ์ง„์ ์œผ๋กœ ํƒˆ์ทจํ•˜๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด,
์ฐธ/๊ฑฐ์ง“ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋™์ž‘์„ ์œ ๋„ํ•˜๋Š”
' AND 1=1-- -- (TRUE, ์ •์ƒ ๋™์ž‘)
' AND 1=2-- -- (FALSE, ๊ฒฐ๊ณผ ์—†์Œ)
๋ช…๋ น์–ด๊ฐ€ ์žˆ์„ ๋•Œ,
' AND (SELECT CASE WHEN (SUBSTRING((SELECT password FROM users WHERE username='admin'),1,1)='a') THEN 1/0 ELSE 1 END)--๋Š” ์„œ๋ฒ„์˜ ์‘๋‹ต ์ฐจ์ด๋‚˜ ์‹œ๊ฐ„ ์ง€์—ฐ ๋“ฑ์œผ๋กœ ์ฐธ/๊ฑฐ์ง“์„ ํŒ๋‹จํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ฒŒ ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

4. Stored Procedure SQL Injection
๋งˆ์ง€๋ง‰ ์œ ํ˜•์€ Stored Procedure SQL Injection์ž…๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์œผ๋กœ, ๊ณต๊ฒฉ์ž๋Š” ์ €์žฅ ํ”„๋กœ์‹œ์ €์— ์•…์„ฑ SQL ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ๊ถŒํ•œ์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด๋ฅผ ์žฅ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์œ„ํ—˜ํ•œ ์œ ํ˜•์ด๋ผ๊ณ  ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ทจ์•ฝํ•œ ํ”„๋กœ์‹œ์ €๊ฐ€
CREATE PROCEDURE sp_login (@loginid NVARCHAR(25), @password NVARCHAR(25))
AS
BEGIN
DECLARE @sql VARCHAR(500)
SET @sql = 'SELECT * FROM users WHERE loginid = ''' + @loginid + ''' AND password = ''' + @password + ''''
EXEC (@sql)
END
๋ผ๋ฉด, ๋™์  ์ฟผ๋ฆฌ๋กœ ์ž…๋ ฅ๊ฐ’์„ ์ง์ ‘ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์น˜๊ฒŒ ๋˜์–ด,
loginid = ' OR 1=1--
password = anything
์ด๋Ÿฌํ•œ Injection ์ž…๋ ฅ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด SQL Injection์— ์ทจ์•ฝํ•ด์ง‘๋‹ˆ๋‹ค.



โœ…Login Admin

๊ทธ๋ฆผ 3. [Login Admin]

๊ทธ๋ฆผ 3. [Login Admin]

์ฑŒ๋ฆฐ์ง€๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด, score board๋ผ๋Š” ํŽ˜์ด์ง€์— ์šฐ์„  ์ ‘์†ํ•ด์•ผ ํ•ด์š”. ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ฑŒ๋ฆฐ์ง€๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

์‚ฌ์ง„์— ๋ณด์ด๋Š” ๊ฑด Login Admin์ด๋ผ๋Š” ์ฑŒ๋ฆฐ์ง€์—์š”. Juice-Shop์˜ ๊ฑฐ์˜ ๋ชจ๋“  ์ฑŒ๋ฆฐ์ง€์—๋Š” โ€˜Hintโ€™๋ผ๋Š” ์•„์ด์ฝ˜์ด ๋“ฑ์žฅํ•˜๋Š”๋ฐ, ์ด ํžŒํŠธ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ฑŒ๋ฆฐ์ง€์— ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ œ๊ณตํ•ด ์ค๋‹ˆ๋‹ค!

๊ทธ๋ฆผ 4. [Login Admin-Hint]

๊ทธ๋ฆผ 4. [Login Admin-Hint]

ํžŒํŠธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๋งจ ์ฒซ ์ค„์— โ€˜์ด ์ฑŒ๋ฆฐ์ง€ ์„ค๋ช…์—์„œ ์–ด๋–ค ํ˜•ํƒœ๋กœ ๊ณต๊ฒฉํ•ด์•ผ ํ•˜๋Š”์ง€๊ฐ€ ์ด๋ฏธ ํžŒํŠธ๋กœ ์ฃผ์–ด์กŒ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹คโ€™๋ผ๋Š” ์–ธ๊ธ‰์ด ์žˆ๋„ค์š”. ๋˜ํ•œ ๋งˆ์ง€๋ง‰ ์ค„์— SQL Injectionโ€™์ด๋ผ๋Š” ์–ธ๊ธ‰์ด ์žˆ๋Š” ๊ฒŒ ๋ณด์ด์‹œ๋‚˜์š”?
ํžŒํŠธ๋ฅผ ํ†ตํ•ด ์ด๊ฒŒ ๋ฐ”๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์‹ค๋งˆ๋ฆฌ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๊ทธ๋Ÿผ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ•ด๊ฒฐํ•ด๋ณผ๊นŒ์š”~?๐Ÿš€

๊ทธ๋ฆผ 5. [Login]

๊ทธ๋ฆผ 5. [Login]

์šฐ์„ , Admin(๊ด€๋ฆฌ์ž)๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผํ•˜๋Š” ์ฑŒ๋ฆฐ์ง€์ด๋‹ˆ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐ€ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 6. [Login page]

๊ทธ๋ฆผ 6. [Login page]

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ ๋’ค, ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์ด ๋‚˜์˜ค๋Š”๋ฐ์š”, ์ด์ œ ์ด ํŽ˜์ด์ง€์—์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ SQL Injection์„ ์‹ค์Šตํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ์„ , SQL Injection์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ํฌ์ธํŠธ๋Š” ์ด๋ฉ”์ผ ํ•„๋“œ์— ํฐ๋”ฐ์˜ดํ‘œ(โ€œ) ๋‚˜ ์ž‘์€ ๋”ฐ์˜ดํ‘œ(โ€˜) ๊ฐ™์€ ์ธ์šฉ ๋ฌธ๊ตฌ๋ฅผ ์‚ฝ์ž…ํ•ด ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7. ['error]

๊ทธ๋ฆผ 7. ['error]

ํ•˜์ง€๋งŒ ์œ„ ์‚ฌ์ง„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ, [object Object] ๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋ฉฐ SQL Injection์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ ์‹œ๋„๋ฅผ ํ•ด๋ณด๊ธฐ ์ „์— ์—ฌ๊ธฐ์„œ ์ž ๊น! [object Object]๋Š” ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—๋Ÿฌ์˜€์„๊นŒ์š”?๐Ÿ”Ž

SQL์—์„œ ์ž‘์€ ๋”ฐ์˜ดํ‘œ(')๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ •ํ™•ํ•œ ๋ฌธ๋ฒ•์€ 'swing'๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด์„ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ„์—์„œ์™€ ๊ฐ™์ด'๋งŒ ์ ๋Š”๋‹ค๋ฉด SQL ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๋ก ์ ์œผ๋กœ [object Object] ์˜ค๋ฅ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ‘œ์‹œํ•˜๋ ค ํ•  ๋•Œ์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์ด ๋˜๋Š” ๊ฒƒ์ด์ง€์š”.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ SQL Injection์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 8. [' OR true]

๊ทธ๋ฆผ 8. [' OR true]

์œ„์˜ ์‚ฌ์ง„์—์„œ์™€ ๊ฐ™์ด ' OR true๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?๐Ÿ”Ž
๋ฐ”๋กœ SQL์—์„œ OR true๋Š” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์—์„œ ์ฐธ(True)์„ ์˜๋ฏธํ•˜๋Š” ์กฐ๊ฑด์„ ๊ฐ•์ œ๋กœ ๋„ฃ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ OR์€ โ€˜๋˜๋Š”โ€™์ด๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์ด๋ฉฐ, true๋Š” SQL์—์„œ ํ•ญ์ƒ ์ฐธ์„ ๋œปํ•˜๋Š” ์˜ˆ์•ฝ์–ด์ด์ง€์š”.
์ฆ‰, ์กฐ๊ฑด๋ฌธ์„ ํ•ญ์ƒ ์ฐธ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ฟผ๋ฆฌ๊ฐ€ ์กฐ๊ฑด์— ์ƒ๊ด€์—†์ด ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 9. [' OR true ์‹คํŒจ]

๊ทธ๋ฆผ 9. [' OR true ์‹คํŒจ]

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ๋„ SQL Injection์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ•ด๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ ์•„๊นŒ์™€ ๊ฐ™์€ [object Object]๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ผ๊นŒ์š”?๐Ÿ”Ž
์•ž์„œ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ, SQL์—์„œ ๋ฌธ์ž์—ด์€ ๋ฐ˜๋“œ์‹œ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ' OR true์—์„œ OR์•ž์˜'๋ฅผ ์„œ๋ฒ„๊ฐ€ ๋ฌธ์ž์—ด์„ ์‹œ์ž‘ํ•˜๋Š” ์˜๋ฏธ๋กœ ๋ฐ›์•„๋“ค์ด๊ฒŒ ๋œ๋‹ค๋ฉด, ๊ฒฐ๊ตญ ' OR true๋Š” ์™„์ „ํ•˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์ด ๋˜๋ฉฐ, ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ๋Š” ์–ด๋– ํ•œ ๋ฌธ์ž์—ด์ด ์ œ๋Œ€๋กœ ๋‹ซํžˆ๊ธฐ ์ „์— ๊ทธ๊ฒƒ์ด ํ•ญ์ƒ ์ฐธ์ด๋ผ๋Š” ์กฐ๊ฑด์„ ๋„ฃ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ง€์š”.

์ž, ๊ทธ๋Ÿผ ์ด์ œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ SQL Injection์— ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?
๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด, ์ด๋ฉ”์ผ ํ•„๋“œ์— ๋‹จ์ˆœํžˆ 'ํ˜น์€ ' OR true๊ฐ™์ด ๋ฏธ์™„์„ฑ์˜ ๋ฌธ์ž์—ด๋งŒ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ' OR true --๋ผ๋Š” ์™„์„ฑ๋œ SQL ๋ฌธ๋ฒ•์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ๋ฌธ์ž์—ด์„ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 10. [' OR true-- ]

๊ทธ๋ฆผ 10. [' OR true-- ]

์ด๋ ‡๊ฒŒ ๋ง์ด์ฃ !

--๋Š” SQL์—์„œ ์ฃผ์„ ํ‘œ์‹œ๋กœ, ์ดํ›„์˜ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ' OR true --๋Š” ๋ฌธ์ž์—ด ๊ฒฝ๊ณ„๋ฅผ ๋‹ซ๊ณ , ์กฐ๊ฑด์„ ์ฐธ์œผ๋กœ ๋งŒ๋“ค๋ฉฐ ๋’ค์˜ ๋ฌธ์žฅ์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ณ€์กฐํ•˜๋Š” ์ธ์ ์…˜ ๊ธฐ๋ฒ•์ด ๋ฉ๋‹ˆ๋‹ค!

๊ทธ๋ฆผ 11. [๊ด€๋ฆฌ์ž ๊ณ„์ •]

๊ทธ๋ฆผ 11. [๊ด€๋ฆฌ์ž ๊ณ„์ •]

์„ฑ๊ณต์ ์œผ๋กœ ๊ด€๋ฆฌ์ž ๊ณ„์ •์— ๋กœ๊ทธ์ธํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๐ŸŽ‰



โœ…Login Jim

๊ทธ๋ฆผ 12. [Login Jim]

๊ทธ๋ฆผ 12. [Login Jim]

์ด๋ฒˆ์—๋Š” Jim์ด๋ผ๋Š” ์‚ฌ๋žŒ์˜ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” SQL Injection์„ ์‹œ๋„ํ•ด ๋ณด๋ ค๊ณ ํ•ด์š”.
์ฑŒ๋ฆฐ์ง€ ํ•ด๊ฒฐ์˜ ์‹œ์ž‘์€ ํ•ญ์ƒ Hint์™€ ํ•จ๊ป˜ ํ•ฉ๋‹ˆ๋‹ค-!๐Ÿš€

๊ทธ๋ฆผ 13. [hint]

๊ทธ๋ฆผ 13. [hint]

์˜ค, ์ด๋ฒˆ ํžŒํŠธ์—์„œ๋„ ์—ญ์‹œ๋‚˜ ์ฑŒ๋ฆฐ์ง€ ์„ค๋ช…์—์„œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ธ€๊ณผ โ€˜SQL Injectionโ€™ ์ด๋ผ๋Š” ์–ธ๊ธ‰์ด ์žˆ๊ตฐ์š”!
๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ ์ฑŒ๋ฆฐ์ง€๋„ โ€˜Login Adminโ€™ ๊ณผ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ ์ „์—, ๋จผ์ € ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์–ด์š”. ๋ฐ”๋กœ โ€œ์ด๋ฉ”์ผ ํ•„๋“œ์— ๋ฌด์—‡์„ ๋จผ์ € ์ ์–ด์•ผ ํ•˜๋Š”๊ฐ€?โ€์ธ๋ฐ์š”, ๋งŒ์•ฝ ์•ž์„  ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง„ํ–‰ํ•œ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ์‹œ๋„ํ•œ๋‹ค๋ฉด ์„ฑ๊ณตํ•ด๋„ ๋ถ„๋ช… Jim์˜ ๊ณ„์ •์ด ์•„๋‹Œ Admin๊ณ„์ •์— ๋กœ๊ทธ์ธ์ด ๋  ๊ฑฐ์˜ˆ์š”.
๋”ฐ๋ผ์„œ Jim์˜ ๊ณ„์ •์— ๋Œ€ํ•œ ํžŒํŠธ๊ฐ€ ๋ ๋งŒํ•œ ๊ฒŒ ์žˆ๋Š”์ง€ Juice-Shop์„ ๋จผ์ € ๋‘˜๋Ÿฌ๋ณด๋„๋ก ํ• ๊ฒŒ์š”.๐Ÿš€

๊ทธ๋ฆผ 14. [jim email]

๊ทธ๋ฆผ 14. [jim email]

์—‡! ๋ฉ”์ธํ™”๋ฉด์„ ๋‘˜๋Ÿฌ๋ณด๋‹ค ๋ณด๋‹ˆ, Jim์ด๋ผ๋Š” ์‚ฌ๋žŒ์ด ์ƒํ’ˆ์— ๋Œ€ํ•œ ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๋„ค์š”! ๊ทธ๋ ‡๋‹ค๋ฉด jim@juice-sh.op์ด ๋ฐ”๋กœ Jim์˜ ์ด๋ฉ”์ผ์ด๊ฒ ๊ตฐ์š”!
์šฐ์„  Jim์˜ ์ด๋ฉ”์ผ์„ ์•Œ์•„๋ƒˆ์œผ๋‹ˆ, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 15. [jim ๋กœ๊ทธ์ธ ์‹œ๋„]

๊ทธ๋ฆผ 15. [jim ๋กœ๊ทธ์ธ ์‹œ๋„]

์—ญ์‹œ..๋‹น์—ฐํ•˜๊ฒŒ๋„ Jim์˜ ์ด๋ฉ”์ผ์€ ์•Œ์•„๋‚ด๋„ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ด์ง€ ๋ชปํ•˜๋ฉด ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.๐Ÿคฆโ€โ™€๏ธ
ํ•˜์ง€๋งŒ hint์—์„œ๋„ ์–ธ๊ธ‰๋˜์—ˆ๋“ฏ, ์ด๋ฒˆ ์ฑŒ๋ฆฐ์ง€ ๋˜ํ•œ SQL Injection์„ ์ด์šฉํ•˜๋Š” ์ฑŒ๋ฆฐ์ง€์ด๋‹ˆ ์•ž์„  ์ฑŒ๋ฆฐ์ง€์™€ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ๋˜๊ฒ ๊ตฐ์š”!

๊ทธ ์ „์—, ์•ž์„  ์ฑŒ๋ฆฐ์ง€์—์„œ ์‚ฌ์šฉํ•œ '--ํ˜•ํƒœ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์šฐ์„  ์ž‘์€ ๋”ฐ์˜ดํ‘œ(โ€˜)๋Š” ๋ฌธ์ž์—ด์„ ๋‹ซ๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, -- ๋Š” ์ฃผ์„์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด, '--๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ์˜๋ฏธ๋กœ ํ•ด์„๋ ๊นŒ์š”?

์˜ˆ๋ฅผ ๋“ค์–ด, โ€˜swing33@gmail.comโ€˜ ์ด๋ผ๋Š” ์ด๋ฉ”์ผ์ด ์žˆ๊ณ , ์ด ์ด๋ฉ”์ผ์„ swing33@gmail.com'-- ๋กœ ์ ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.
์ด๋Ÿฐ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ํ•ด์„๋˜์–ด ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์€ swing33@gmail.com๊นŒ์ง€์ด๋ฉฐ, '-- ๋’ค์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ์ฃผ์„ ์ฒ˜๋ฆฌ๋˜์–ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
์™œ๋ƒํ•˜๋ฉด ๋กœ๊ทธ์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด๋ฉ”์ผ๊ณผ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด
SELECT * FROM users WHERE email = 'swing33@gmail.com' AND password = 'mypassword';
์™€ ๊ฐ™์€ ์กฐ๊ฑด์ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ, ์ด ๋ช…๋ น์–ด๋ฅผ ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด๊ณ  ๊ฐˆ๊นŒ์š”~?

์šฐ์„  SELECT *๋Š” users ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์†์„ฑ์„ ์กฐํšŒํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. FROM users๋Š” ์กฐํšŒํ•  ๋Œ€์ƒ ํ…Œ์ด๋ธ”์ด users์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ WHERE email = 'swing33@gmail.com' AND password = 'mypassword';๋Š” email ์†์„ฑ๊ฐ’์ด โ€˜swing33@gmail.comโ€˜ ๊ทธ๋ฆฌ๊ณ  password ์†์„ฑ ๊ฐ’์ด โ€˜mypasswordโ€™์ธ ํ–‰๋งŒ ์กฐํšŒํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. AND๋Š” ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ฐธ์ผ ๋•Œ๋งŒ ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ช…๋ น์–ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ users ํ…Œ์ด๋ธ”์—์„œ email ๊ฐ’์ด โ€˜swing33@gmail.comโ€˜์ด๊ณ , password ๊ฐ’์ด โ€˜mypasswordโ€™์ธ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋ผ๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค!

๊ทธ๋ฆผ 16. ['-- ์›๋ฆฌ]

๊ทธ๋ฆผ 16. ['-- ์›๋ฆฌ]

๋‹ค์‹œ '-- ์ด์•ผ๊ธฐ๋กœ ๋Œ์•„๊ฐ€ ๋ณด๋ฉด, SELECT * FROM users WHERE email = 'swing33@gmail.com' AND password = 'mypassword';๊ฐ™์€ ์กฐ๊ฑด์€ ์œ„์˜ ์‚ฌ์ง„์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ ์ด๋ฉ”์ผ ๋ถ€๋ถ„๊นŒ์ง€๋Š” ์ •์ƒ์ ์œผ๋กœ ํ•ด์„๋˜์ง€๋งŒ, ์ด๋ฉ”์ผ ๋ฐ”๋กœ ๋’ค์— '--๋ฅผ ๋ถ™์ด๊ฒŒ ๋˜๋ฉด AND๋ถ€ํ„ฐ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ์ฃผ์„ ์ฒ˜๋ฆฌ๋˜์–ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด, ๊ตณ์ด Jim์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์ง€ ๋ชปํ•ด๋„ Jim์˜ ์ด๋ฉ”์ผ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค!

๊ทธ๋ฆผ 17. [jim ๋กœ๊ทธ์ธ]

๊ทธ๋ฆผ 17. [jim ๋กœ๊ทธ์ธ]

๋‹ค์‹œ Jim์˜ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋Œ์•„์™€, ์•ž์„œ ์•Œ์•„๋‚ธ ์‚ฌ์‹ค๋“ค์„ ํ† ๋Œ€๋กœ jim@juice-sh.op'-- ์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 18. [jim ๋กœ๊ทธ์ธ ์„ฑ๊ณต]

๊ทธ๋ฆผ 18. [jim ๋กœ๊ทธ์ธ ์„ฑ๊ณต]

์—ญ์‹œ๋‚˜ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•ด Jim์˜ ๊ณ„์ •์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!๐ŸŽ‰

์ด์ œ ์ฑŒ๋ฆฐ์ง€๋ฅผ ๋ชจ๋‘ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ, ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ ์ด ๋‚จ์Šต๋‹ˆ๋‹ค. ์™œ Admin ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•  ๋•Œ๋Š” ๊ตฌ์ฒด์ ์ธ ์ด๋ฉ”์ผ ์ •๋ณด ์—†์ด๋„ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด, Jim ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ ค๋ฉด Jim์˜ ์ด๋ฉ”์ผ์„ ์ •ํ™•ํžˆ ์•Œ์•„์•ผ ํ–ˆ์„๊นŒ์š”?๐Ÿ”Ž

๋ฐ”๋กœ ๊ด€๋ฆฌ์ž ๊ณ„์ •์— ๋กœ๊ทธ์ธํ•  ๋•Œ๋Š” ' OR true-- ๊ฐ™์€ ๋‹จ์ˆœ ์กฐ๊ฑด์„ ์จ์„œ ๋กœ๊ทธ์ธ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ์ฟผ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ์ž๋ช… ๊ฒ€์ฆ๋งŒ ํ•˜๊ฑฐ๋‚˜ ์ฒซ ๋ฒˆ์งธ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ์ฆ‰, OR true ์กฐ๊ฑด์ด ์ฐธ์ด ๋˜์–ด ๊ฒฐ๊ตญ ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž, ๋ณดํ†ต ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Jim ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•  ๋•Œ jim@juice-shop'--์ฒ˜๋Ÿผ ์ •ํ™•ํ•œ ์ด๋ฉ”์ผ์„ ์ฐพ์•„์•ผํ–ˆ๋˜ ์ด์œ ๋Š”, ์ฟผ๋ฆฌ๊ฐ€ ์ด๋ฉ”์ผ ๊ฐ™์€ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์—„๊ฒฉํžˆ ๊ฒ€์‚ฌํ•˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ๋‹จ์ˆœ OR true๋งŒ์œผ๋กœ๋Š” ํŠน์ • ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์—†๊ณ , ํŠน์ • ์‚ฌ์šฉ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ์ด๋‚˜ ์•„์ด๋””๋ฅผ ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์š”์ปจ๋Œ€, OR true๋Š” ๋ฌด์ฐจ๋ณ„์ ์ธ ๋กœ๊ทธ์ธ ์šฐํšŒ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , jim@juice-shop'-- ๊ฐ™์€ ํŒจํ„ด์€ ํŠน์ • ์‚ฌ์šฉ์ž๋ฅผ ํƒ€๊ฒŸํŒ…ํ•˜๋Š” ๋ฐฉ์‹์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์šฐํšŒ๋Š” ์กฐ๊ฑด์„ ํ•ญ์ƒ ์ฐธ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ฒซ ์‚ฌ์šฉ์ž๋ฅผ ๋ฝ‘๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•ด ๋น„๊ต์  ์‰ฝ์ง€๋งŒ, ํŠน์ • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์šฐํšŒ๋Š” ๋Œ€์ƒ ์ด๋ฉ”์ผ์ด๋‚˜ ์ด๋ฆ„ ๊ฐ™์€ ์ •ํ™•ํ•œ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ ๋” ๋ณต์žกํ•ด์š”.



๐Ÿ’กSQL Injection ๊ด€๋ จ ํˆด ์†Œ๊ฐœ

์ง€๊ธˆ๊นŒ์ง€ Juice-Shop์„ ํ†ตํ•ด SQL Injection ๊ณต๊ฒฉ์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ด๋ค„์ง€๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์œผ๋‹ˆ, ์ด์ œ SQL Injection๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.

1. SQL Fiddle

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

2. Pentest Monkey

Pentest Monkey๋Š” ๋Œ€ํ‘œ์ ์ธ Cheat Sheet ์‚ฌ์ดํŠธ์˜ˆ์š”. ๋ฐ์ดํ„ฐ๋ณ„ Cheat Sheet๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ๊ณ ํ•˜๊ธฐ ์ข‹์•„์š”. ํ•˜์ง€๋งŒ ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ ํŽ˜์ด๋กœ๋“œ์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ดํ•ด ํ›„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

3. sqlmap

sqlmap์€ SQL Injection ์ทจ์•ฝ์ ์„ ํƒ์ง€/์ง„๋‹จํ•˜๊ณ  ์ž๋™ํ™”ํ•ด ๊ณต๊ฒฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ์นจํˆฌ ํ…Œ์ŠคํŠธ ๋„๊ตฌ์˜ˆ์š”. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ํŒŒ์•…๊ณผ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๋“ฑ์„ ์ž๋™ํ™”ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณผ๋„ํ•œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์œ ๋ฐœํ•ด ์„œ๋ฒ„์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ค๋ฌด์—์„œ๋Š” ์ž˜ ์“ฐ์ด์ง€ ์•Š์œผ๋ฉฐ, ๊ฐœ์ธ์šฉ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์—์„œ์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค๊ณ  ํ•ด์š”.



๐Ÿ’กSQL Injection ๋Œ€์‘ ๋ฐฉ์•ˆ

์—ฌ๊ธฐ๊นŒ์ง€ ์—ด์‹ฌํžˆ SQL Injection์˜ ๊ณต๊ฒฉ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์œผ๋‹ˆ, ์ด์ œ ์–ด๋–ค ์‹์œผ๋กœ ๋ฐฉ์–ดํ•ด์•ผ ํ•˜๋Š”์ง€๋„ ์‚ดํŽด๋ด์•ผ๊ฒ ์ง€์š”~?

1. ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„
์šฐ์„  ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋Œ€์‘ ๋ฐฉ์•ˆ์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„์ด ์žˆ์–ด์š”. SQL Injection ์ทจ์•ฝ์ ์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์— ์ž„์˜์˜ SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•ด ๊ณต๊ฒฉ์ž ์˜๋„์— ๋งž๊ฒŒ SQL์ฟผ๋ฆฌ ๋ฌธ์ด ์™„์„ฑ๋˜๋Š” ์•ฝ์ ์„ ์ด์šฉํ•œ ๊ฒƒ์ด์ฃ . ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SQL ์ฟผ๋ฆฌ๋ฌธ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์— SQL ์ฟผ๋ฆฌ๋ฌธ์„ ๊ตฌ์„ฑํ•˜๋Š” ํŠน์ˆ˜๋ฌธ์ž, SQL ๊ตฌ๋ฌธ, ํ•จ์ˆ˜ ๋“ฑ์˜ ๋ฌธ์ž๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค!
SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์„ฑ๋ฆฝํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€ํ‘œ์ ์ธ ํŠน์ˆ˜๋ฌธ์ž๋กœ๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ('), ํฐ ๋”ฐ์˜ดํ‘œ("), ์„ธ๋ฏธ์ฝœ๋ก (;), ์ฃผ์„ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ(--,#) ๋“ฑ์ด ์žˆ์–ด์š”.

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

3. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ๋ฐฉ์ง€
๋งˆ์ง€๋ง‰์œผ๋กœ ์†Œ๊ฐœํ•  ๋ฐฉ์•ˆ์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ๋ฐฉ์ง€์˜ˆ์š”. SQL Injection๊ณต๊ฒฉ ์ค‘ Error Based SQL Injection ๊ณต๊ฒฉ์ด ์กด์žฌํ•˜๋Š”๋ฐ์š”, ํ•ด๋‹น ๊ณต๊ฒฉ์€ DBMS ์—๋Ÿฌ๋ฅผ ์˜๋„์ ์œผ๋กœ ์œ ๋ฐœํ•ด ์ถœ๋ ฅ๋˜๋Š” DBMS ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋‚ด์— ์›ํ•˜๋Š” SQL ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ . ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ถœ๋ ฅ๋˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ž์ฒด๋ฅผ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ Juice-Shop์„ ์ด์šฉํ•œ SQL Injection์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์•˜๋Š”๋ฐ์š”, ๋‹ค๋“ค ์–ด๋– ์…จ๋‚˜์š”~?

๋‹จ์ˆœํžˆ SQL Injection์ด๋ผ๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•๋งŒ ๋ณธ๋‹ค๋ฉด ๋‹ค์†Œ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์–ด๋ ต๊ฒŒ ๋А๊ปด์ง€์ง€๋งŒ ์œ ์šฉํ•œ ํˆด๋“ค์„ ์ด์šฉํ•ด ๊ณต๋ถ€ํ•˜๋ฉด ํ›จ์”ฌ ๋นจ๋ฆฌ, ์†์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค!๐Ÿ‘

OWASP Juice-Shop์—๋Š” SQL Injection๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ •๋ง ๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ ๊ธฐ๋ฒ•๋“ค์„ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ฑŒ๋ฆฐ์ง€๊ฐ€ ๊ฐ€๋“ํ•˜๋‹ˆ๊นŒ ์›น ํ•ดํ‚น์„ ์ฒ˜์Œ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด์‹œ๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”~?๐Ÿ˜Š

๊ทธ๋Ÿผ ์•„์‰ฝ์ง€๋งŒ ์˜ค๋Š˜์˜ ์ฃผ์ œ๋Š” ์—ฌ๊ธฐ์„œ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ๋‹ค์Œ์—๋Š” ์ƒˆ๋กญ๊ณ  ์žฌ๋ฐŒ๋Š” ์ฃผ์ œ๋กœ ์ฐพ์•„์˜ฌ๊ฒŒ์š”!๐Ÿค—


์ฐธ๊ณ ์ž๋ฃŒ

  • Wallarm. (2025, June 18). What is Structured Query Language Injection (SQLi)? Part 1. Wallarm. https://www.wallarm.com/what/structured-query-language-injection-sqli-part-1

  • SK์‰ด๋”์Šค. (2025, February 19). XSS ๊ณต๊ฒฉ vs SQL ์ธ์ ์…˜, ์ฐจ์ด์ ๊ณผ ์˜ˆ๋ฐฉ ๊ฐ€์ด๋“œ. SKshieldus. https://www.skshieldus.com/blog-security/security-trend-idx-45

  • ํ•ดํ‚น์Šคํ„ฐ๋””ํŒจ๋“œ. (n.d.). ๋ณด์•ˆ๋งจ. HackingStudypad. https://hackingstudypad.tistory.com/206

  • SecurityHacker. (n.d.). [Web Application-๋ชจ์˜ํ•ดํ‚น] SQL Injection : ๋Œ€์‘ ๋ฐฉ์•ˆ #3-1. SecurityHacker. https://securityhacker.tistory.com/entry/Web-Application-%EB%AA%A8%EC%9D%98%ED%95%B4%ED%82%B9-%EC%8B%9C%ED%81%90%EC%96%B4%EC%BD%94%EB%94%A9-SQL-Injection-3-1

  • Invicti. (n.d.). SQL Injection Cheat Sheet. Invicti. https://www.invicti.com/blog/web-security/sql-injection-cheat-sheet/

  • PortSwigger. (n.d.). What is SQL Injection? Tutorial & Examples. Web Security Academy. https://portswigger.net/web-security/sql-injection