1.웹 셸 업로드
게시판에서 웹 셸을 올리는데 php는 필터링이 되어 png파일 내부에 스크립트를 작성하여 업로드
확장자와 시그니처를 png로 하고 내부에 웹 셸 코드 작성
2. 파일 업로드 경로 찾기
경로는 파라미터가 "/사용자id/파일이름" 형태로 보이는데 두가지 케이스가 있을 듯
- 경로 그대로 사용
- back단에서 앞의 prefix를 추가하여 사용
위의 주석을보니 ./files/12 라는 것을 확인 files/12로 들어가보자
ps. 주석이 없다면 어떻게 찾아야하지?????
-> 파일이 다운로드가 가능하다면 path traversal로 다운로드하는 소스를 확인 해보자 다운로드 소스에는 prefix를 찾을 수 있을 것이다.
빙고
3. 웹 셸 실행
업로드한 png 파일을 실행하기 위해 .htaccess 파일을 업로드 후 게시판에서 .htaccess를다운로드해보자.
정상적으로 업로드 확인 뒤 /files/12/shell.png를 접속해보
png가 실행되도록 세팅
다운로드 결과
정상적으로 웹셸을 확인
4. flag 찾기
"grep -r segfault{ ../"로 경로를 올라가며 플래그 찾기
여기서 끝내도 되지만 해당 index 파일을 다운받아보자.
"cp ../../index.php ./index.txt"로 해당 파일을 내 다운로드 디렉토리로 이동
게시판의 다운로드에서 파일명을 변경하여 다운로
grep 검색 결과
게시판의 다운로드 파일명을 index.txt로 변경
flag 확인
download.php를 받아보니 path traversal을 방지하기위해 "../" replace 하고 있었다.