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하면 패스!