늘모자란, 개발 :: [webhacking.kr] Challenge 41

늘모자란, 개발

input type='file' 폼이 하나 있다. 머릿속으로 그려보자.

index.phps가 있으니 이녀석을 보고 ..

 <html>
<head>
<title>Challenge 41</title>
</head>
<body>

<?
$hidden_dir="???";

$pw="???";

if($_FILES[up])
{
$fn=$_FILES[up][name];
$fn=str_replace(".","",$fn);
if(eregi("/",$fn)) exit("no");
if(eregi("\.",$fn)) exit("no");
if(eregi("htaccess",$fn)) exit("no");
if(eregi(".htaccess",$fn)) exit("no");
if(strlen($fn)>10) exit("no");
$fn=str_replace("<","",$fn);
$fn=str_replace(">","",$fn);
$cp=$_FILES[up][tmp_name];

copy($cp,"$hidden_dir/$fn");

$f=@fopen("$hidden_dir/$fn","w");
@fwrite($f,"$pw");
@fclose($f);

echo("Done~");

}


?>

<form method=post action=index.php enctype="multipart/form-data">
<input type=file name=up><input type=submit value='upload'>
</form>
</body>
</html>



받은 이름중에서 . 랑 < , > 때고,
/ 안됨, \. 안됨
htaccess안됨, .htaccess 안됨
글자길이는 10자미만. 근데 아예 안적고 보내도 안되는것 같고.

역경을 모두 패스하면 저장되는것 같다.
요점은 hidden_dir인 것 같은데 얘를 어떻게 해야하나.
필터된 단어를 꾸역꾸역 넣어보자.
.를 넣어보니 no, 완전 공백으로 넣어도 no

< 를 넣어봤는데 뭔가 반응이 다르다. 왜인가.
<와 >는 위에서 필터링되고 있는 녀석들을 다 거치고 내려오게 된다.
즉 PHP는 파일명에 아무것도 안넣게 되고 에러를 뿜게 된다.

<html>
<head>
<title>Challenge 41</title>
</head>
<body>
<b>Warning</b>:  copy(/) [<a href='function.copy'>function.copy</a>]


이렇게 히든 dir을 알게 되면, 아무거나 하나 멀쩡한거 올리고, 경로로 이동해 파일명을 친다.
그럼 패스워드가 적혀있고 이걸 Auth하면 패스!

2016/04/02 07:55 2016/04/02 07:55