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 |
댓글