๐ŸŒนย ์ •๋ฆฌ by ์žฅ๋ฏธ(https://velog.io/@newbiekim/)

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

SQL Injection์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ด๋ฆ„ / ์‚ฌ์šฉ์ž ID์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ์š”์ฒญํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

userId = getRequestString("userId");
sql = "SELECT * FROM Users WHERE userId = " + userId;

1 = 1์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” SQL Injection์€ ํ•ญ์ƒ ์ฐธ์ด๋‹ค.

๋งŒ์•ฝ userId ๋ฅผ 105 OR 1=1๋กœ ์ž…๋ ฅํ•œ๋‹ค๋ฉด SQL๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋  ๊ฒƒ์ด๋‹ค.

SELECT * FROM Users WHERE userId = 105 OR 1=1;

์œ„์˜ SQL๋ฌธ์€ ์œ ํšจํ•˜๋ฉฐ, OR 1=1์ด ํ•ญ์ƒ ์ฐธ์ด๊ธฐ ๋•Œ๋ฌธ์— Users ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  rows๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด ๋•Œ Users ํ…Œ์ด๋ธ”์— ์ด๋ฆ„๊ณผ ์•”ํ˜ธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•”ํ˜ธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

โ€œโ€=โ€โ€์— ๊ธฐ๋ฐ˜ํ•œ SQL Injection์€ ํ•ญ์ƒ ์ฐธ์ด๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์˜ˆ์‹œ๊ฐ€ ์žˆ๋‹ค.

Username: Jangmi Password: myPass