Problem-5
문제의 내용을 보면 커뮤니티 사이트 내에 게시판이 존재하며 게시글에 대한 첨부파일을 다운로드 받을 수 있다. 라는 내용이 있다.
문제 페이지의 Board 카테고리로 이동하면 아래 페이지를 볼 수 있다.
파일 다운로드 취약점을 이용하여 "/temp/hacktory.txt"를 다운로드 받아라. 라고 적혀있다.
게시글을 확인하려 하면 권한으로 확인이 불가능하다.
패킷을 잡아보면 권한을 확인하는 스크립트가 존재한다.
해당 script 부분을 삭제하고 패킷을 보내보았다.
게시글 확인이 가능해졌다.
게시글을 들어가보면 아래와 같이 다운로드가 보인다.
이번에는 파일 다운로드 부분을 확인하니 아래와 같이 되어있다.
파일 다운로드를 누르면 권한이 없다고 뜬다.
위에서 본 javascript:DenyAlert() 때문이다.
소스코드를 보면 의심이 가는 코드가 보이는 부분을 찾았다.
var DownloadAccessPerm = "N";
해당 부분을 Y로 수정하고 다운로드를 눌러보았다.
그래도 권한이 없다고 뜬다.
소스코드를 더 살펴보니 Util.js 라는 파일을 찾았다.
해당 파일 소스코드를 보면 아래와 같은 내용이 보인다.
앞에서 보았던 DownloadAccessPerm 의 값이 N일 경우, DenyAlert() 함수 실행 시 파일 다운로드 권한이 없다고 한다.
FileDownload(FileName) 함수를 호출해서 파일을 다운 받으면 될 것 같다.
앞에서 풀었던 문제에 사용했던 구문을 가져왔다.
HackDownAct.php?FileName=%2E%2E%2E%2E%2F%2Ftemp/hacktory.txt
HackDownAct.php?FileName=....//temp/hacktory.txt
HackDownAct.php?FileName=....//....//temp/hacktory.txt
HackDownAct.php?FileName=.../...//.../...//temp/hacktory.txt
HackDownAct.php?FileName=..././..././temp/hacktory.txt
FileDownload('..././..././temp/hacktory.txt')
<form name="frm" action="" method="">
<input type="hidden" name="FileName" value="">
</form>
<a href="javascript:FileDownload('.../...//.../...//temp/hacktory.txt')">다운로드</a>
아래와 같이 수정해주었다.
history.back(-1); 만 없애줘야한다…..
안그러면 공격문 실패 시 되돌아간다…
아래 코드를 추가해주어 FileDownload 함수를 실행시킨다.
그럼 아래와 같이 추가한 코드의 다운로드 링크가 생긴다.
파일을 얻었다.
플래그를 얻었다!