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에서 추가.
일단 주어진 소스코드를 해석하자면,
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를 볼 수 있다.
'보안 공부 > 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 |