1. 문제분석 & 풀이
힌트를 먼저보니 무슨 종류의 DB인지 파악하고 user name 과의 연관성을 파악하라는 것 같다.
문제에 접속하니 user name을 입력하고 로그인하는 페이지가 나온다.
guest라는 user name으로 로그인을 해보니 글을 쓸 수 있는 부분과 guest라는 닉네임으로 글을 썼던 흔적들이 보인다.
다시 로그인 전으로 돌아가서 이번에는 admin으로 로그인을 시도해봤다.
admin의 경우 로그인이 제한된 것을 확인할 수 있고 힌트에서도 user name이 언급이 됐기 때문에
admin으로 로그인하는 것이 이번 문제의 목표라는 것을 알 수 있다.
개발자도구로 소스를 확인해보니 javascript 소스로 admin으로 로그인하는 것이 막혀있는 것을 확인했고 소스를 바꿔서 우회해보려고 하는 등 시도를 해봤지만 아쉽게도 우회에 실패했다.
솔직히 이후로 감이 안잡혀서 여러가지 값들을 무작위로 대입해봤다.
여러값을 대입하던 중 에러가 뜨는 경우가 발생했다.
어떤 값을 넣었을 때 에러가 뜨는지 확인해보니 "/" 이 들어가는 경우 에러가 발생한다.
왜 "/" 가 들어갈때 에러가 발생하는지 확인해보자.
에러 내용을 보면 open() 부분이 노출되는 것을 확인 할 수 있는데, open() 함수의 인자로 경로가 들어있는 것을 확인 할 수 있다.
인자의 경로를 보면 "./db/wkrm_/.db" 로 나와있는데 경로가 뭔가 어색하다는 것을 알 수 있다.
보통 경로는 "/" 를 기준으로 나눠지는데, 원래는 ./db 디렉토리의 wkrm_[user name].db 파일에 접근하는게 목표였을테지만 user name 으로 "/" 를 입력함으로써 ./db/wkrm_/ 디렉토리에 .db 파일에 접근한다는 말도 안되는 형태가 됐기 때문에 에러가 발생한 것 같다.
결론적으로 에러를 통해 파일에 접근하는 경로가 노출이 됐고 "./db/wkrm_[user name].db" 에 접근한다는 것을 알아냈기 때문에 admin의 DB 파일 경로도 유추할 수 있다.
"./db/wkrm_admin.db"
admin의 DB 파일 경로를 유추하면 위와 같이 될 것이다.
이제 유추한 경로로 직접 이동해보자!
경로로 직접 이동해보니 admin의 db 파일이 다운로드 되는 것을 확인 할 수 있다.
db 확장자 상태로는 파일을 읽을 수 없기 때문에 확장자를 txt로 바꿔서 파일 내용을 읽어봤다.
읽어보니 위와 같은 내용이 나왔으며 flag값이 있는 php 파일의 경로를 알려주고 있다.
php 파일 경로에 직접 접속해보니...?
flag값이 나온다!
클리어!!