보안 공부/webhacking.kr

webhacking.kr 41번 풀이(마지막 부분 오류 해결 방법)

sh1256 2022. 1. 4. 10:41
728x90

첫화면

view-source를 통해 소스를 살펴보자.

소스코드

짧아서 좋다 ㅎㅎ

일단 php부분만 따로 살펴보자. 

소스코드 일부분

$_FILES의 속성을 밑 여는 글에 정리해 놓았습니다 참고하세요!!

더보기

< $_FILES의 속성>
$_FILES['userfile']['tmp_name'] - 웹 서버에 임시로 저장된 파일의 위치.
$_FILES['userfile']['name'] - 사용자 시스템에 있을 때의 파일 이름.
$_FILES['userfile']['size'] - 파일의 바이트 크기.
$_FILES['userfile']['type'] - 파일의 MIME 타입을 가리킴. 예를 들어, text/plain이나 image/gif.
$_FILES['userfile']['error'] - 파일 업로드할 때 일어난 오류 코드를 알려주는데, PHP 4.2.0에서 추가.

아무것도 첨부하지 않고 upload했을 때

 

 

 

 

무언가를 첨부하고 upload했을 때

일단 주어진 소스코드를 해석하자면, 

 

1. 업로드된 파일명에서 ".", "<", ">", "/"를 각각 없애 수정한다.  

2. $upload_dir/(수정된)파일명으로 flag를 적는다. 

 

 

 

 

 

이것저것 살펴보다가 

이 부분을 봤다. 

위부분은 php에서 에러나 나오게 하는 부분인데, 우리가 알아야 하는 copy()함수 부근에 오류를 발생시키면 upload_dir을 알 수 있게 된다. 

Burp Suite를 통해 파일의 이름을 길게 늘려 오류를 발생시켜 보자. 

그러면 이렇게 오류가 뜨면서 주소창 같은 것을 보여준다. 

 

 

 

<  ./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/chall41 >

위의 주소로 이동하면 된다. 즉,

https://webhacking.kr/challenge/web-19/4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/chall41

이 주소 말이다. 

 

 

 

 

그런데 난 이 주소로 시도했지만 계속 에러가 떴다. 

생각한 끝에 원인을 찾아냈다. 

바로 정상적인 업로드를 할 때의 파일 이름이다.

 

 

 

 

<오류가 뜨는 이유>

chall41.txt를 만들어 처음에 업로드 했다. 그러면 파일 이름은 chall.txt가 되기 때문에 

./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/chall41.txt 로 이동을 해야한다. 

그런에 여기서 소스코드에 보면, "."를 ""로 치환 한다. "."를 없앤다는 이야기다. 

최종적으로 ./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/chall41txt 로 이동을 하면 flag를 볼 수 있다. 

 

++ 혹은 정상적인 파일을 만들 때 burp suite를 이용해 파일 이름을 chall41.txt --> chall41 로 바꿔주면 된다.

(정상적으로 업로드 된다. )

그 후 ./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/chall41로 이동을 하면 flag를 볼 수 있다.

 

얻은 flag
성공!

'보안 공부 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 51번 풀이(PHP md5함수 취약점)  (0) 2022.01.05
webhacking.kr 53번 풀이  (0) 2022.01.04
webhacking.kr 36번 풀이  (0) 2022.01.04
webhacking.kr 46번 풀이  (0) 2021.12.14
webhacking.kr 42번 풀이  (0) 2021.12.14