WebHacking

[root-me] File upload - double extensions

BIGFROG 2020. 1. 6. 17:48

삽질

 

문제에서 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로 특정해주도록 한다.

 

 

몇 번의 삽질 끝에, passwd파일이 있는 디렉토리를 찾았다. 

 

 

 

 

이를 cat 명령어를 이용해서 읽어낼 수 있다.

 

이를 업로드하고 다시 경로를 따라 들어가면 passwd파일을 읽어 flag를 얻을 수 있다.

'WebHacking' 카테고리의 다른 글

[root-me] PHP filters  (0) 2020.01.06
[root-me] File upload - null byte  (0) 2020.01.06
[root-me] CRLF  (0) 2020.01.06
[root-me] HTTP verb tampering  (0) 2020.01.06
[root-me] Directory traversal  (0) 2020.01.06