[root-me]File upload - double extensions
삽질
문제에서 PHP 코드를 업로드하라고 한다.
그런데 게시판에는 이미지 파일만 업로드 할 수 있도록 png,jpg등의 확장자 파일만 올릴 수 있도록 필터링을 해둔 것 같다.
문제 제목에서 유추할 수 있듯이, double extention을 이용한다.
file_name.php.png 와 같이 확장자를 두 번 쓰게 되면 우회가 가능하다.
그렇다면 php 코드를 노트패드에 작성해서 확장자를 .php.png로 저장하고 업로드하면 될 것으로 보인다.
간단하게
<?php
alert("이게 되나?");
?>
로 작성해서 업로드한다. 파일 경로를 따라 들어가보면, php코드가 정상적으로 실행이 됨을 알 수 있다.
이제 비슷한 방법으로 웹 쉘 코드를 작성해서 .passwd파일이 어디에 있는지를 찾아서 읽어내면 된다.
Command Injection을 이용해 문제를 풀었다.
먼저,
echo exec('cd..;ls -al .passwd'); 로 코드를 작성한다.
ls명령어의 옵션인 -a는 숨긴 파일을 찾아내는 역할을 한다.
.passwd의 경우에는 숨겨진 파일이다.
.file_name < 이런 형태의 파일은 숨김파일이라고 한다.
ls명령어에서 -l옵션은 리스트 형태로 출력해주는 옵션이다.
ls -al 로만 명령어를 입력하면 해당 파일이 보이지 않기 때문에, ls -al .passwd로 특정해주도록 한다.
댓글
댓글 쓰기