2017년 8월 3일 목요일

H3X0R CTF3 - sihpc (1000pt)

WEB - sihpc (1000pt)

made by munsiwoo




(프로그래밍 대회 컨셉)


설명
우선 문제 설명의 "flag is in the db"와 힌트의 "sqlite"로
sqlite injection 이란걸 추측할 수 있다.
원래 sqlite라는 힌트가 없었지만 풀이자가 적어서 추가했다.
처음 힌트는 query error로 sqlite인걸 알 수 있게 해놨다가
다시 수정해서 그냥 hint에 sqlite를 써놨다.

출제자가 의도한건 comment로 dbms를 판별하여
그 dbms에 맞게 인젝션하는 것 이었다.

풀이
가입 후 로그인을 하면 로그인 세션과 uname이란 쿠키가 생성된다.
uname은 ID를 base64 -> hex -> base64 -> hex 순으로 인코딩 한 것이다.
"admin"을 base64 -> hex -> base64 -> hex 순으로 인코딩하면
admin으로 로그인이 가능하다.
(uname=4e546b314e7a55794e7a51324d5455334d7a517a5a413d3d)

* 사이트의 관리자 권한을 얻으면 문의 관리가 가능하다.

이제, SQL Injection 취약점을 찾으면 되는데
문의 페이지의 이메일 부분에서 SQL Injection 취약점이 발생한다.
인젝션 포인트 : insert into table_name values ('ip', '[여기]', 'contents');

hint에서 dbms가 sqlite인걸 알았으니 dbms에 알맞게 인젝션해주면 된다.

 * mysql는 information_schema에 스키마 정보를 담고있지만
sqlite는 sqlite_master에 모든 정보를 담고있다.

(sqlite_master 구조)


', (select group_concat(sql) from sqlite_master));
(문의 페이지)


iamFLAG 테이블, flag 필드 확인
(문의 관리 페이지)


'; (select flag from iamFLAG limit 1));
(문의 페이지)


(문의 관리 페이지)



payload
테이블, 필트명 확인 : ', (select group_concat(sql) from sqlite_master));
플래그 : ', (select flag from iamFLAG limit 1));

FLAG : H3X0R{mY_NamE-IS_MUNSIWOO}





댓글 없음:

댓글 쓰기