SQL Injection์ด๋ž€?

gyubยท2025๋…„ 5์›” 4์ผ
0

๋ชจ์˜ํ•ดํ‚น ์Šคํ„ฐ๋””

๋ชฉ๋ก ๋ณด๊ธฐ
10/31

๐Ÿ’ก SQL Injection

๐Ÿ‘‰ SQL Injection์€ ๋ง ๊ทธ๋Œ€๋กœ ์ทจ์•ฝํ•œ SQL๋ฌธ์— ์ธ์ฆ ์šฐํšŒ์™€ ๊ฐ™์€ ์ผ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” SQL๋ฌธ์„ ๋ผ์›Œ๋„ฃ๋Š” ๊ณต๊ฒฉ์ž…๋‹ˆ๋‹ค

์˜ˆ๋ฅผ ๋“ค์–ด ์•Œ์•„๋ณผ๊นŒ์š”?


ํšŒ์› ์•„์ด๋””๋ฅผ ์กฐํšŒํ•˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค

๊ทธ๋ ‡๋‹ค๋ฉด WAS์—๋Š” SELECT * FROM member WHERE id = '์กฐํšŒํ•˜๋ ค๋Š” ์•„์ด๋””' ์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์•„์ด๋”” ์กฐํšŒ๋ž€์— normaltic' ์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

SQL๋ฌธ์ด SELECT * FROM member WHERE id = 'normaltic'' ๋กœ ์ž‘์„ฑ๋˜๋ฉด์„œ ๋ฌธ๋ฒ• ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

์ด๋Ÿฐ ์ ์„ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ํšŒ์›์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์กฐํšŒํ•˜๋ ค๋Š” ์•„์ด๋”” ๋ถ€๋ถ„์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋งŒ์•ฝ ์กฐํšŒํ•˜๋ ค๋Š” ์•„์ด๋”” ๋ถ€๋ถ„์— normaltic' or '1'='1 ์„ ๋„ฃ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

SELECT * FROM member WHERE id = 'normaltic' or '1'='1' ์ด ๋˜๋ฉด์„œ ์กฐ๊ฑด๋ฌธ์ด ํ•ญ์ƒ ์ฐธ์ด ๋˜๊ณ ,

๋ชจ๋“  ํšŒ์›์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค

์ด๋ ‡๊ฒŒ ์œ ์ €์˜ ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š์•„ ์•…์˜์ ์ธ SQL๋ฌธ์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์„ SQL injection์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค


๊ทธ๋Ÿผ SQL injection์„ ๋กœ๊ทธ์ธ์— ์ ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ์ •๋ณด(์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ)๋ฅผ ๋ชฐ๋ผ๋„, ํ˜น์€ ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š์•„๋„ ์ธ์ฆ์ด ํ•„์š”ํ•œ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋Š” ์ผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค

์ด๋Ÿฐ๊ฒƒ์„ ์ธ์ฆ ์šฐํšŒ ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

๐Ÿ’ก ์ธ์ฆ ์šฐํšŒ๋ž€?

์ธ์ฆ์ด ํ•„์š”ํ•œ ๊ณต๊ฐ„์— ์ธ์ฆ์„ ์ œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ ‘์†ํ•  ๊ถŒํ•œ์„ ํš๋“ํ•˜๋Š” ๊ฒƒ์„ ์ธ์ฆ ์šฐํšŒ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค


์ธ์ฆ ์šฐํšŒ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์ฆ์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š”์ง€, ์–ด๋–ค ๋กœ์ง์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์ง€ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ธ์ฆ ์šฐํšŒ๋ฅผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊นŒ์š”?

  • brute force : ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋ฌด์ž‘์œ„๋กœ ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•. ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ๋Œ€์ž…ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง„๋‹ค
  • ์‚ฌ์ „ ๋Œ€์ž… ๊ณต๊ฒฉ : ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์“ฐ์ผ๋งŒํ•œ ๋‹จ์–ด๋ฅผ ๋ชจ์•„์„œ ๋Œ€์ž…ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•
  • Jump : ์ธ์ฆ์„ ์•„์˜ˆ ๊ฑด๋„ˆ๋›ฐ๋Š” ๋ฐฉ๋ฒ•

SQL injection์„ ํ™œ์šฉํ•˜๋ฉด ์ธ์ฆ ์šฐํšŒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

๋กœ๊ทธ์ธ์—์„œ SQL injection์„ ์‹œ๋„ํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ์•Œ์•„๋ณผ๊นŒ์š”?

๋งŒ์•ฝ ๋กœ๊ทธ์ธ ๊ณผ์ •์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

SELECT * FROM member WHERE id = '์ž…๋ ฅ๋ฐ›์€ ์•„์ด๋””' and pass = '์ž…๋ ฅ๋ฐ›์€ ๋น„๋ฐ€๋ฒˆํ˜ธ'

์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ค‘ ์•„์ด๋””๋งŒ ์•Œ๊ณ  ์žˆ๊ณ , ์ด ์•„์ด๋””๊ฐ€ normaltic ์ด๋ผ๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

์•„์ด๋””์— normaltic' # ์„ ๋„ฃ์œผ๋ฉด

SELECT * FROM member WHERE id ='nomaltic' # and pass = '์ž…๋ ฅ๋ฐ›์€ ๋น„๋ฐ€๋ฒˆํ˜ธ' ๊ฐ€ ๋˜์–ด,

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ถ€๋ถ„์ด ์ฃผ์„์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค

ํ˜น์€ ์•„์ด๋””์— normaltic' or '1'='1 ์„ ๋„ฃ์„ ๊ฒฝ์šฐ,

SELECT * FROM member WHERE id ='normaltic' or '1'='1 and pass = '์ž…๋ ฅ๋ฐ›์€ ๋น„๋ฐ€๋ฒˆํ˜ธ' ๊ฐ€ ๋˜์–ด

๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งž์ง€ ์•Š์•„๋„ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•œ ์ธ์ฆ ์šฐํšŒ์— ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค


์ง€๊ธˆ๊นŒ์ง€ SQL injection์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€