메인화면입니다.

소스보기입니다.

해석해보겠습니다.

먼저 가장 중요한 부분은 이 부분입니다.

error_reporting(E_ALL);

ini_set("display_errors", 1);

이 부분은 에러메시지를 출력해주는 부분입니다.

그리고 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}"); #$cp에 원본 파일 파일 복사

$f = @fopen("./{$upload_dir}/{$fn}","w");

@fwrite($f,$flag);

@fclose($f);

echo("Done~");

}

?>

이렇습니다.

[정리]

1. 파일업 업로드 하면 '.', '<', '>', '/'를 제거하고 $fn에 저장한다.

2. tmp 파일에 저장된 임시 파일명을 가져와 $cp에 담는다

3. 업로드된 원본 파일의 내용을 임시파일에 복사

4. 업로드된 원본 파일에 flag 작성

에러 메시지의 반응이용하여 파일이 저장되는 디렉토리를 찾아보겠습니다.

[file name이 공백인 경우]

[결과]

얻어낸 것이 없습니다.

그럼 파일명을 오버플로우 시켜보겠습니다.

[filename 오버플로우]

[결과]

결과를 보면 파일명을 copy()하는 부분에서 오류가 발생한 것을 확인할 수 있습니다.

그럼 "4b0e87fef7b5e8ba83894970c9806042e5d6ec9a"이 부분이 업로드 경로가 되겠습니다.

이제 파일명 필터에 걸리지 않는 파일을 만들고 업로드해서 접근해보겠습니다.

'test'라는 파일을 업로드 하겠습니다.

이후 "https://webhacking.kr/challenge/web-19/4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/test

"URL에 이와 같이 입력하면!

플래그가 출력됩니다.

챌린지 41 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level43 (old)  (297) 2020.04.28
[webhacking.kr] Level42 (old)  (311) 2020.04.28
[webhacking.kr] Level40 (old)  (295) 2020.04.28
[webhacking.kr] Level39 (old)  (310) 2020.04.28
[webhacking.kr] Level38 (old)  (298) 2020.04.28

+ Recent posts