파일을 올릴 수 있는것으로 보이며 밑에 소스보기가 있다.
<?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~");
}
?>
<form method=post enctype="multipart/form-data">
<input type=file name=up><input type=submit value='upload'>
</form>
<a href=./?view_source=1>view-source</a>
</body>
</html>
파일을 올릴 수 있는것으로 보이며 밑에 소스보기가 있다.
파일명을 필터링하고 cp에 담아
파일명을 공백으로 보내면 에러메세지가 뜬다.
Warning: copy(): Filename cannot be empty in /var/www/html/challenge/web-19/index.php on line 21
index.php의 경로가 나온다. 내가 올린 파일 경로 즉 upload_dir을 알아내야할거같다.
copy에서 오류를 띄워 오류를 보면 경로를 알수있을거같다.
파일명에 사용할수 없는 문자(ex ? , " , : , | 등)을 보내주어도 Done~이라는 성공문자가뜬다.
그렇다면 파일명이 아닌 파일명의 길이를 통해 오류를 뱉게 만들어 보자
copy(./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd): failed to open stream: File name too long in와함께 오류를 뱉는다.
경로명을 확인했다. 이제 됬다 경로를 확인했으니 정상적인 파일명을 보내 파일을 만들고 저경로로 들어가서 확인해보자 /4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/정상적인 파일명 으로 가보면 작성된 flag를 확인할수있다.
auth창에 넣어주면 성공!
'보안 > webhacking' 카테고리의 다른 글
webhacking.kr old-43 (0) | 2019.12.05 |
---|---|
webhacking.kr old-42 (0) | 2019.12.05 |
webhacking.kr old-40 (0) | 2019.12.03 |
webhacking.kr old-39 (0) | 2019.12.02 |
webhacking.kr old-38 (0) | 2019.12.02 |
최근댓글