728x90
<?php
include "../../config.php";
include "./inc.php";
if($_GET['view_source']) view_source();
error_reporting(E_ALL);
ini_set("display_errors", 1);
?><html>
<head>
<title>Challenge 41</title>
</head>
<body>
<?php
if(isset($_FILES['up']) && $_FILES['up']){
$fn = $_FILES['up']['name'];
$fn = str_replace(".","",$fn);
$fn = str_replace("<","",$fn);
$fn = str_replace(">","",$fn);
$fn = str_replace("/","",$fn);
$cp = $_FILES['up']['tmp_name'];
copy($cp,"./{$upload_dir}/{$fn}");
$f = @fopen("./{$upload_dir}/{$fn}","w");
@fwrite($f,$flag);
@fclose($f);
echo("Done~");
}
?>
파일 선택창이 up, 업로드 버튼이 upload이다
내가 파일을 올리면 fopen() 읽기 모드로 열려서 그곳에 flag가 적히고 다시 닫히는 행위가 이루어진다
중요한 곳은 $f = @fopen("./{$upload_dir}/{$fn}","w"); 이 부분으로,
그 파일이 어느 경로 {$upload_dir}에 copy되는지 알아야 flag가 적힌 파일로 이동할 수 있는 것이다
먼저 파일을 선택해서 upload 할 수 있길래 txt 파일을 만들어서 올려봤다
파일명, 내용 모두 영문자다
Done~이 뜨고 끝났다
그 외 제목, 내용 모두 영문자/숫자/한글/공백으로 된 txt 파일을 업로드 해봤으나 아무일도 없었다.
라업을 찾아보니 파일명을 특정 글자수 이상으로 설정해서 업로드하면 뜨는 에러가 힌트라고 한다
파일명을 길게 설정하고 업로드해보니 copy함수에 에러가 뜨면서
우리가 알고 싶어했던 {$upload_dir}가 어디인지 알 수 있게 되었다
{$upload_dir}가 어디인지 알 수 있게 되었다 = 4b0e87fef7b5e8ba83894970c9806042e5d6ec9a
파일이 카피되는 경로를 알아냈으니 아까 업로드했던 eild.txt을 해당 경로를 통해 찾아보자
.은 필터링되므로 eild.txt가 아닌 eildtxt!
다른 문제에서와는 다르게 에러를 출력해주는 함수를 추가되었다는 점이 힌트였고
파일명 최대 길이는 255까지라고 한다
728x90
'Wargame > webhacking.kr' 카테고리의 다른 글
*Challenge old 52 (400) (0) | 2020.02.21 |
---|---|
Challenge old 50 (450) (0) | 2020.02.21 |
Challenge old 42 (200) (0) | 2020.02.18 |
Challenge old 61 (200) (0) | 2020.02.18 |
Challenge old 60 (300) (0) | 2020.02.18 |