아래는 서버 코드이다.
upload.php만 보자
<?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>";
}
}t
}else {
echo "File is not selected";
}
?>
코드를 보니 확장자명이 php와 관련 되어 있는 것은 다 필터링 하는 것을 볼 수 있다.
웹쉘을 업로드 하지 못하게 하려고 그러는 것 같다.
하지만 운이 좋게도 강의에서 배운 내용이 떠올랐다.
apache에서 .htaccess라는 설정 파일이 존재하고 그 파일 내에 jpg같은 확장자도 php로 인식하게 해준다는 설정이 있었던 것 같았다.
그래서 다시 공부한 내용을 보고 .htaccess를 내 로컬에서 생성했다.
그리고 그 설정 내용은 앞서 공부한 내용에서 알아왔다.
위와 같이 설정하면 이제 .txt파일로 업로드 되는 파일은 php파일로 인식해준다,
아래처럼 파일을 세팅하고
아래와 같이 업로드한다.
그럼 이제 .htaccess 설정파일로 인해서 아파치 서버에서는 .txt파일의 확장자 명으로 업로드 된 파일을 php로 인식하게 된다.
이제 아래의 저번에 만들어 놨던 웹쉘 파일을 가져와서 업로드 해보자
.txt파일로 아래처럼 파일을 만들고
업로드에 성공한다.
그럼 아래와 같이 apache서버에서 .txt파일 .php파일로 인식해서 웹 쉘이 성공적으로 실행된다.
이번에 역시 flag는 파일이므로 flag를 실행시켜서 flag를 얻을 수 있다.