본문 바로가기
CTF, 워게임 문제 풀이/webhacking.kr

webhacking.kr 41번 문제

by secumark 2022. 10. 15.
728x90

파일을 업로드해서 풀이하는 문젠가보다.

 

그냥 아무거나 업로드했는데 Done

<?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>

일단.. ., <, >, /는 공백으로 처리하고 있다.

 

 

그냥 아무것도 첨부안하고 upload를 눌렀을땐 이런 Warning이 뜬다. 

/var/www/html/challenge/web-19/index.php가 비어있다고 한다.

위에 코드를 잘 읽어보면 파일을 업로드하면 ./{$upload_dir]/{$fn} 이렇게 복사를 하는 것을 알 수 있다.

 

여기서 알아두어야 할 점은 리눅스는 파일시스템에 최대 255자까지만 저장이 가능하다는 점.

Burp Suite으로 255자 이상의 name을 보내보자.

 

request할때 filename에 255자 이상의 뭔가를 보내주면 되겠다.

 

 

오! 그랬더니 copy(./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/hello~)라는 문구가 뜬다! 

 

그러면 일단 아무 파일이나 올리고.. 그 경로 뒤에 파일 이름을 붙여서 검색했는데

내가 올린 파일은 https.docx인데, 이게 https로 해봐도, https.docx해봐도 계속 오류가 떠서 결국 검색해서 알아낸게

이렇게 확장자에 .를 없애고 파일명+확장자를 붙여서 검색하는거였다.

위에서 {$fn}에 .는 공백으로 바꿔야된다고 해서 그런가보다,,,,

 

 

이렇게 하면 문제 해결 ㅠ 진짜 어렵다.

728x90

'CTF, 워게임 문제 풀이 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 43번 문제  (0) 2022.12.10
webhacking.kr 42번 문제  (0) 2022.11.26
webhacking 40번 문제 (미해결)  (0) 2022.10.14
webhacking 39번 문제  (0) 2022.10.14
webhacking 38번 문제  (0) 2022.10.13

댓글