Web Hacking/Webhacking.kr

Webhacking.kr old-41 풀이

프레딕 2023. 12. 24. 16:51
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함
    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>

코드를 보면 처음에 모든 에러를 화면에 표시하게 해줬으니 이 에러를 이용해서 뭔가 해주어야 한다.

처음에 여러 에러 예를 들어, 특수문자만 사용한 파일을 업로드 해준다던지 등 해줬지만 아무것도 안나와서 여러 파일 에러를 찾아봤다.

여러 에러 중 파일 이름이 260자가 넘으면 에러가 난다는것을 알았고 버프스위트를 이용해 파일이름을 260자가 넘도록 설정해 주었다.

./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a 이 디렉토리에 파일을 저장한다는 것을 확인했고 이 디렉토리에 저장된 파일 중 하나를 GET요청 해보면은 

FLAG를 얻을 수 있다.

728x90
반응형