SQL Injection
์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณด์์์ ํ์ ์ ์ ์ฉํด ์์์ SQL๋ฌธ์ ์คํ์ํค๋ ์ธ์ ์ ๊ณต๊ฒฉ ๊ธฐ๋ฒ
์ธ์ ์
๊ณต๊ฒฉ
์ ์์ ์ด์ง ์์ ์ ๋ ฅ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ฃผ์ ํ์ฌ ์ธํฐํ๋ฆฌํฐ๊ฐ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ค. ์ธ์ ์ ๊ณต๊ฒฉ์ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ธ ์คํ์ ๋ฐฉํดํ๋ค.
์ธ์ ์ ๊ณต๊ฒฉ์ ๊ณ ์ ์ ์ธ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ค ํ๋๋ก ์ด ๊ณต๊ฒฉ์ผ๋ก ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ด๊ฑฐ๋ ์ญ์ ํ๊ณ Integrity ์ ํ, DOS ๊น์ง ๊ฐ๋ฅํ๋ค.
Code Injection
XSS (Cross-site Scripting)
SQL Injection
โฆ
SQL ์ธ์ ์
์์์ ๋งํ๋ฐ์ ๊ฐ์ด SQL ์ธ์ ์ ์ ์ ์์ ์ธ SQL ๋ฌธ์ ์คํ์ํฌ ์ ์๋ ์ธ์ ์ ๊ณต๊ฒฉ์ ํ ์ข ๋ฅ์ด๋ค. ์ด ๊ณต๊ฒฉ๋ฐฉ์์ ํตํด ํด์ปค๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ ๋๋จธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์กฐ์ข ๋ค. ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ ๋ฑ์ ๋ณด์ ์ค์ ์ ์ฐํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ CRUD ์์ ์ ์ํํ ์ ์๋ค.
In-band SQL ์ธ์ ์
๊ณ ์ ์ ์ธ SQL ์ธ์ ์ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ผ๋ก ๊ณต๊ฒฉ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ์ฑ๋์์ ๋ฐ์๋ณผ ์ ์๋ ๊ณต๊ฒฉ ๋ฐฉ์์ด๋ค. ๊ณต๊ฒฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๊ณต๊ฒฉํ๋ฉด ๊ฒฐ๊ณผ ๋ํ ์น ๋ธ๋ผ์ฐ์ ์ ์ถ๋ ฅ๋๋ค.
์๋ฅผ ๋ค์ด ๋ฐฑ์๋ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์ธํ์ ๋ฐ์ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๋ด๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ๋ฟ๋ ค์ค๋ค๊ณ ํด๋ณด์.
๋ง์ฝ ํด์ปค๊ฐ current_user ์๋ฆฌ์ %'โ
๋ฅผ ์ง์ด๋ฃ๊ณ ์๋ฒ์ ์์ฒญํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
mysql์์ โโโ (๋๋ธ ๋์ฌ) ๋ ์ฃผ์์ด๊ณ โ%โ ๋ ์์ผ๋์นด๋๋ฅผ ์๋ฏธํ๋ฏ๋ก ์ ์ฒด ์ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
Error-based SQL ์ธ์ ์
In-band SQL ์ธ์ ์ ๊ธฐ๋ฒ ์ค ํ๋๋ก ์ผ๋ถ๋ฌ SQL ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ค.
๋ง์ฝ ํด์ปค๊ฐ 1โ
์ ์ง์ด๋ฃ๊ณ ์์ฒญํ๋ค๋ฉด ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๋ด์ง๋ SQL์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
๋ค์ ๋ฐ์ดํ๊ฐ ํ๋ ๋ ๋ถ์ด์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ๋ฉด์ ๋ณด์ฌ์ง๋ค. ์ด ์ค๋ฅ ๋ฉ์์ง์๋ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ค ์ข ๋ฅ์ธ์ง (MySQL์ธ์ง Oracle์ธ์ง) ๋ฑ์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋์ด ์๋ค. ํด์ปค๋ ์ด ์ ๋ณด๋ฅผ ์ด์ฉํด ๋ ๊ตฌ์ฒด์ ์ธ ๋ค๋ฅธ ๊ณต๊ฒฉ ๋ฐฉ์์ ์๋ํด๋ณผ ์ ์๋ค.
Union-based SQL ์ธ์ ์
In-band SQL ์ธ์ ์ ๊ธฐ๋ฒ ์ค ํ๋๋ก ๊ธฐ์กด ์ฟผ๋ฆฌ์ union ๋ช ๋ น์ด๋ฅผ ๋ํด ์ ์ฑ ์ฟผ๋ฆฌ์์ ํฉ์งํฉ์ ์ถ๋ ฅํ์ฌ ์ ๋ณด๋ฅผ ํ๋ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ค.
๋ง์ฝ ํด์ปค๊ฐ 1' UNION SELECT version(),current_user()--โ
์ ์
๋ ฅํ๋ค๋ฉด ์ค์ ๋ก ๋ณด๋ด์ง๋ SQL์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ์ฟผ๋ฆฌ์ ์ํ ๊ฒฐ๊ณผ๋ ํ์ฌ MySQL์ ๋ฒ์ ๊ณผ ๋ก๊ทธ์ธํ ๊ณ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๋ค. ๋จ union ์ํค๊ธฐ ์ํด์๋ ๊ธฐ์กด ์ฟผ๋ฆฌ์ ์ปฌ๋ผ ์์ ์ถ๊ฐํ ์ฟผ๋ฆฌ์ ์ปฌ๋ผ ์๊ฐ ์ผ์นํด์ผ ํ๋ค.
Blind SQL ์ธ์ ์
In-band SQLi ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ๊ณต๊ฒฉ์ ๊ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ์ ๋ณด๋ฅผ ํ์ทจํ๋ ๋์ SQL ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์์ ๊ด์ฐฐํ๋ ๋ฐฉ์์ด๋ค. In-based SQLi์ ๋นํด ์๊ฐ์ ์ข ๋ ๊ฑธ๋ฆฌ์ง๋ง ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ป๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๊ณ ๋ค๋ฅธ SQL ์ธ์ ์ ๊ธฐ๋ฒ์ ์ ์ฉํ ์ ์์์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.
Boolean-based SQL ์ธ์ ์
Blind SQL ์ธ์ ์ ๊ธฐ๋ฒ ์ค ํ๋๋ก boolean ์ฐ์ฐ์๋ฅผ ์ฃผ์ ์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ค. ์ฃผ์ ๊ฒฐ๊ณผ์ ๋ํ ์ฐธ/๊ฑฐ์ง ํจํด์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์น ์๋ฒ๊ฐ ์ฐธ/๊ฑฐ์ง์ ๋ฆฌํดํด์ค๋ค๊ณ ํด๋ณด์.
์ ์ฟผ๋ฆฌ์ 1=1
๋ถ๋ถ๊ณผ 1=0
๋ถ๋ถ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ์ ์ฒด ์ฟผ๋ฆฌ์ ์ฐธ/๊ฑฐ์ง ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋๋ค. ์ด ๋ถ๋ถ์ ์ํ๋ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ๋ฃ์ผ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ธ์ง ๊ฑฐ์ง์ธ์ง๋ฅผ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ ์ถํ ์ ์๋ค.
์ด ์๋ธ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฒซ ๋ฒ์งธ ํ
์ด๋ธ์ด a
๋ก ์์ํ๋์ง๋ฅผ ํ์ํ๋ค. ๋ง์ฝ ์ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฐธ์ด๋ผ๋ฉด AND 1=1
๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค. ์ด ์์
์ ์๋์ผ๋ก ํ์ง ์๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ๊ฒ์ํ๋ค๋ฉด ์์ฃผ ์ฝ๊ฒ ๋ชจ๋ ํ
์ด๋ธ ์ด๋ฆ ์๋ฆฟ์์ ๋ํ์ฌ ๋ชจ๋ ์ํ๋ฒณ์ ๋ํด ๋ธ๋ฃจํธ ํฌ์ค ๊ณต๊ฒฉ์ ๊ฐํ ์ ์๋ค.
Time-based SQL ์ธ์ ์
Blind SQL ์ธ์ ์ ๊ธฐ๋ฒ ์ค ํ๋๋ก ์๊ฐ ๋๋ ์ด๋ฅผ ์ผ์ผํค๋ ์ฟผ๋ฆฌ๋ฅผ ์ฃผ์ ์์ผ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์๋ฅผ ๋ค์ด
์ ์ฟผ๋ฆฌ์ ์ฌ์ฉ์๊ฐ 12; WAITFOR DELAY '0:0:10โ
๋ฅผ ์ฃผ์
ํ๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ ์ฒด ์ฟผ๋ฆฌ๋
์ด ์ฟผ๋ฆฌ๋ 5์ด ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์๋ค. ์๊น ์ดํด๋ณธ Boolean-based SQLi ์ฒ๋ผ
์กฐ๊ฑด๋ฌธ๊ณผ ์กฐํฉํ๋ฉด ํ ์ด๋ธ์ด a๋ก ์์ํ ๋ 5์ด ํ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ธฐ๊น์ง ๋๋ ์ด ๋๋ ์๊ฐ์ด ์ผ๋ง์ธ์ง๋ฅผ ๋ณด๊ณ ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ด์๋์ง ๊ฑฐ์ง์ด์๋์ง๋ฅผ ์ ์ถํ ์ ์๋ค.
SQL ์ธ์ ์
๋ฐฉ์ด
๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๊ฐ์ SQL์ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค. ์์์ ์ดํด๋ณด์๋ ์์ ๋ค์ ๋จ์ํ๊ฒ ๋ฌธ์์ด concatenation ์ฐ์ฐ์ ํตํด SQL๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ธ์ ์ ๊ณต๊ฒฉ์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค.
Input ๊ฒ์ฆ
ํด๋ผ์ด์ธํธ ์ธก, ์๋ฒ ์ธก ๋ชจ๋์์ ์ ๋ ฅ๊ฐ์ด ํ์ฉ๋ ๋ฒ์ ๋ด์ ๊ฐ์ธ์ง ๊ฒ์ฆํ๋ ๋ก์ง์ ์ถ๊ฐํ๋ค.
Prepared Statement ์ฌ์ฉ
Prepared Statement๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ์ ํ ํ๋ฆฟ์ด ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง๊ณ ์ฌ์ฉ์์ ์ ๋ ฅ์ ํ ํ๋ฆฟ ์์ ์์ ๊ฐ ํํ๋ก ๊ฐ์ด ์ง์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์๊ฐ ๊ณต๊ฒฉ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅํ๋ค๊ณ ํ๋๋ผ๋ ๋จ๋ฌธ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ SQL๋ก ์ธ์๋์ง ์๋๋ค.
Last updated