SQL Injection
SQL ์ธ์ ์ ์ด๋?
โข
SQL ์ธ์ ์
์ ์น ์ฌ์ดํธ์ ๋ณด์์ ํ์ ์ ์ด์ฉํด ํน์ SQL ์ฟผ๋ฆฌ ๋ฌธ์ ์ ์กํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์ํ๋ DB์ ์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ํดํน ๊ธฐ๋ฒ์ด๋ค.
โข
๋๋ถ๋ถ ํด๋ผ์ด์ธํธ๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ํํฐ๋งํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค.
โข
๊ณต๊ฒฉ ๋์ด๋๊ฐ ์ฝ๊ณ , ํผํด ๊ท๋ชจ๊ฐ ์๋คํ๊ธฐ ๋๋ฌธ์ ๋ณด์ ์ํ 1์์๋ก ๋ถ๋ฆด ๋งํผ ์ค์ํ ๊ธฐ๋ฒ์ด๋ค.
SQL ์ธ์ ์ ์์
โข
๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์๊ฒฉ์ฆ ๋ฒํธ๋ฅผ ์กฐํํ ์ ์๋ ์์คํ
โข
SQL ์งํ์ anjinma ํด๋ผ์ด์ธํธ๊ฐ โ์๊ฒฉ์ฆ ๋ฒํธ ์กฐํโ๋ฅผ ํด๋ฆญํ์ฌ anjinma๋ผ๋ ์ด๋ฆ์ด ์น์๋ฒ์ ์ ์ก๋๊ณ , DB์ ์
๋ ฅํ ๊ฐ๊ณผ ์ผ์นํ๋ฉด ์๊ฒฉ์ฆ DB๋ฅผ ์ถ๋ ฅํด์ค๋ค.
โข
blackhat ํด๋ผ์ด์ธํธ๋ anjinma ํด๋ผ์ด์ธํธ์ ์๊ฒฉ์ฆ ๋ฒํธ๋ฅผ ์กฐํํ๊ธฐ ์ํด์, SQL๋ฌธ์ ์์ ํ์ง๋ง ๊ถํ์ด ์์ด์ ์๊ฒฉ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
โข
http://license12345.com/mysearch?=anjinma url์ ์ ์กํ ๋ anjinma๊ฐ ๋ก๊ทธ์ธ ๋์ด ์์ผ๋ฉด, ์ ์์ ์ผ๋ก ์๊ฒฉ์ฆ ๋ฒํธ๋ฅผ ์กฐํํ ์ ์์ง๋ง, blackhat์ด ๋ก๊ทธ์ธ ๋์ด ์์ผ๋ฉด ์๊ฒฉ์ฆ ๋ฒํธ๋ฅผ ์กฐํํ ์ ์๋ค.
โข
๊ณต๊ฒฉ์์ธ blackhat์ url ๋ค์ โ or โ โ1โ = โ1โ์ ๋ฃ์ด์ค์ ํญ์ ์ฐธ์ด ๋๊ฒ ๋ง๋ค์ด์ ์๊ฒฉ์ฆ ๋ฒํธ๋ฅผ ์กฐํํด ์จ๋ค.
SQL ์ธ์ ์ ์ ์ข ๋ฅ
1.
Error based SQL Injection - ๋
ผ๋ฆฌ์ ์๋ฌ๋ฅผ ์ด์ฉํ SQL Injection
โข
์์ ์๋ฅผ ๋ค์ด ์ค๋ช
ํ ๊ธฐ๋ฒ์ผ๋ก, ํด๋น ๊ธฐ๋ฒ์ผ๋ก SQL ์ธ์ ์
์ ๋ํ ๊ธฐ๋ณธ์ ์ค๋ช
ํ๋๊ฒ ์ผ๋ฐ์ ์ด๋ค.
2.
UNION based SQL Injection = UNION ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ SQL Injection
โข
SQL UNION์ด๋?
โฆ
์ฌ๋ฌ๊ฐ์ SQL๋ฌธ์ ํฉ์ณ ํ๋์ SQL๋ฌธ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
โฆ
UNION๊ณผ UNION ALL๋ก ๋๋๋๋ฐ, ์ค๋ณต ๊ฐ์ ์ ์ธํ๊ณ ์ํ๊ณ ์ ์ฐจ์ด์ด๋ค.
SELECT name FROM classa
UNION
SELECT name FROM classb;
SQL
๋ณต์ฌ
ํ๊ฒ ๋๋ฉด, ํด๋์ค A์ ํด๋์ค B ์ด๋ฆ๋ค์ด ํฉ์ณ์ ธ์ ์ถ๋ ฅ๋๋ค.
โฆ
UNION์ผ๋ก ํฉ์ณ์ง๋ ๋ ํ
์ด๋ธ์ ์ปฌ๋ผ ๊ฐฏ์๊ฐ ์ผ์นํด์ผ๋ง ์ค๋ฅ๊ฐ ๋์ง ์๋๋ค.
โฆ
[์ธ๋ถ ์
๋ ฅ]
โฆ
ID: testโ UNION SELECT 1, 1 โ
โฆ
PW: anything
โฆ
[์คํ ์ฟผ๋ฆฌ]
select * from users where id='test' UNION select 1,1 -- and PW='anything'
SQL
๋ณต์ฌ
โฆ
์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด users ํ
์ด๋ธ์ ๋ฑ๋ก๋ Id์ pw ๋ชฉ๋ก์ ์ ๋ถ ์กฐํํ ์ ์๊ฒ ๋๋ค.
3.
Blind SQL Injection - Boolean based Blind SQL Injection
โข
Blind SQL Injection์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ํน์ ํ ๊ฐ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ง ์๊ณ , ๋จ์ํ ์ฐธ๊ณผ ๊ฑฐ์ง์ ์ ๋ณด๋ง ์ ์ ์์ ๋ ์ฌ์ฉํ๋ค.
โข
๋ก๊ทธ์ธ ํผ์ SQL Injection์ด ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์ ํ์ ๋, ์๋ฒ๊ฐ ์๋ตํ๋ ๋ก๊ทธ์ธ ์ฑ๊ณต๊ณผ ๋ก๊ทธ์ธ ์คํจ ๋ฉ์์ง๋ฅผ ์ด์ฉํ์ฌ, DB์ ํ
์ด๋ธ ์ ๋ณด ๋ฑ์ ์ถ์ถํด ๋ผ ์ ์๋ค.
4.
Blind SQL Injection - Time based SQL
โข
Time Based SQL Injedction ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฒ๋ก๋ถํฐ ํน์ ํ ์๋ต ๋์ ์ ์ฐธ ํน์ ๊ฑฐ์ง์ ์๋ต์ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ ์ถํ๋ ๊ธฐ๋ฒ์ด๋ค.
โข
์ฌ์ฉ๋๋ ํจ์๋ MySQL ๊ธฐ์ค์ผ๋ก SLEEP ๊ณผ BENCHMARK์ด๋ค.
SQL ์ธ์ ์ ๋์
1.
์
๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ
โข
SQL Injection์์ ์ฌ์๋๋ ๊ธฐ๋ฒ๊ณผ ํค์๋๋ ๋งค์ฐ ๋ง๋ค.
โข
์ฌ์ฉ์์ ์
๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ์ด ํ์ํ๋ฐ, ์๋ฒ ๋จ์์ ํ์ดํธ๋ฆฌ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํด์ผ ํ๋ค.
โข
๋ธ๋๋ฆฌ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํ๊ฒ ๋๋ฉด, ์๋ง์ ์ฐจ๋จ๋ฆฌ์คํธ๋ฅผ ๋ฑ๋กํด์ผ ํ๊ณ , ํ๋๋ผ๋ ๋น ์ง๋ฉด ๊ณต๊ฒฉ์ ๊ฒ
๊ณตํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
โข
๊ณต๋ฐฑ์ผ๋ก ์นํํ๋ ๋ฐฉ๋ฒ๋ ๋ง์ด ์ฐ์ด๋๋ฐ, ์ฌ์ค ์ด ๋ฐฉ๋ฒ๋ ์ทจ์ฝํ ๋ฐฉ๋ฒ์ด๋ค. ์๋ฅผ๋ค์ด, ๊ณต๊ฒฉ์๊ฐ SESELCTLECT๋ผ๊ณ ์
๋ ฅ ์ ์ค๊ฐ์ SELECT๊ฐ ๊ณต๋ฐฑ์ผ๋ก ์นํ์ด ๋๋ฉด SELECT๋ผ๋ ํค์๋๊ฐ ์์ฑ๋๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๊ณต๋ฐฑ ๋์ ๊ณต๊ฒฉ ํค์๋์๋ ์๋ฏธ์๋ ๋จ์ด๋ก ์นํ๋์ด์ผ ํ๋ค.
2.
Prepared Statement ๊ตฌ๋ฌธ ์ฌ์ฉ
โข
์์ฆ์ ์ฐ์ด๋ ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ์ ์ ์
๋ ฅ์ด ์๋์น ์์ ๋์์ ํ๋ ๊ฑธ ๋ฐฉ์งํ๋ escape ํจ์์ prepared statement๋ฅผ ์ ๊ณตํ๋ค.
โข
prepared statement๋ ๋ณ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ผ ์์ ํ๋ค.
โข
Prepared Statement ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์ฌ์ฉ์์ ์
๋ ฅ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ DBMS๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ ์คํํ์ง ์๊ณ , ๋๊ธฐํ๋ค.
โข
๊ทธ ํ, ์ฌ์ฉ์์ ์
๋ ฅ ๊ฐ์ ๋ฌธ์์ด๋ก ์ธ์ํ๊ฒ ํ์ฌ, ๊ณต๊ฒฉ ์ฟผ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๋ค๊ณ ํ๋๋ผ๋, ์ฌ์ฉ์์ ์
๋ ฅ์ ์ด๋ฏธ ์๋ฏธ ์๋ ๋จ์ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ฟผ๋ฆฌ๋ฌธ๋ ๊ณต๊ฒฉ์์ ์๋๋๋ก ์๋ํ์ง ์๋๋ค.
3.
Error Message ๋
ธ์ถ ๊ธ์ง
โข
๊ณต๊ฒฉ์๊ฐ SQL Injection์ ์ํํ๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด(ํ
์ด๋ธ๋ช
, ์ปฌ๋ผ๋ช
๋ฑ)๊ฐ ํ์ํ๋ค.
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฌ ๋ฐ์ ์, ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ค๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ํจ๊ป ์๋ฌ์ ๊ดํ ๋ด์ฉ์ ๋ฐํํด ์ค๋ค.
โข
์ฌ๊ธฐ์ ํ
์ด๋ธ ๋ช
๋ฐ ์ปฌ๋ผ๋ช
๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๋ฌธ์ด ๋
ธ์ถ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ค๋ฅ ๋ฐ์ ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ ์๋ ํ์ด์ง๋ฅผ ์ ์ ํน์ ๋ฉ์์ง ๋ฐ์ค๋ฅผ ๋์ฐ๋๋ก ํด์ผํ๋ค.
4.
์น ๋ฐฉํ๋ฒฝ ์ฌ์ฉ
โข
์น ๊ณต๊ฒฉ ๋ฐฉ์ด์ ํนํ๋์ด ์๋ ์น ๋ฐฉํ๋ฒฝ์ ์ฌ์ฉํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ
โข
์น ๋ฐฉํ๋ฒฝ์ ์ํํธ์จ์ด ํ, ํ๋์จ์ด ํ, ํ๋ก์ ํ ์ด๋ ๊ฒ ์ธ๊ฐ์ง ์ข
๋ฅ๋ก ๋๋ ์ ์๋๋ฐ,
โข
์ํํธ์จ์ด ํ์ ์๋ฒ ๋ด์ ์ง์ ์ค์นํ๋ ๋ฐฉ์
โข
ํ๋์จ์ด ํ์ ๋คํธ์ํฌ ์์์ ์๋ฒ ์ ๋จ์ ์ง์ ํ๋์จ์ด ์ฅ๋น๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด๋ฉฐ,
โข
ํ๋ก์ ํ์ DNS ์๋ฒ ์ฃผ์๋ฅผ ์น ๋ฐฉํ๋ฒฝ์ผ๋ก ๋ฐ๊พธ๊ณ ์๋ฒ๋ก ๊ฐ๋ ํธ๋ํฝ์ด ์น ๋ฐฉํ๋ฒฝ์ ๋จผ์ ๊ฑฐ์น๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค.