반응형
https://webhacking.kr/challenge/web-19/
Challenge 41
webhacking.kr
[문제]
[풀이]
소스코드를 확인한다.
<?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>
업로드 되는 파일의 이름을 필터링 하고 업로드된 파일에 flag를 넣는 코드같다.
여기서 upload_dir 경로를 알아야 한다.
경로를 찾는 방법이 다양하겠지만 그중에서 일부러 오류를 내어서 에러코드를 확인해보도록 한다.
파일을 넣지 않고 업로드를 누르니 오류코드가 나온다.
에러코드가 나오는걸 확인했으니 파일 이름 길이를 오버시켜 에러를 발생시킨다.
프록시를 사용해서 filename을 위와같이 길게 바꾸어준다.
패킷을 보내면 경로가 나타나게 된다.
위 경로의 파일을 열면 Flag가 노출된다.
[FLAG]
FLAG{error_msg_is_more_userful_than_you_think}
반응형