본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 41 :: Error Functions


▼ Challenge 41은 다음과 같습니다.




 소스는 다음과 같습니다.



업로드한 파일 이름을 필터링하고 문자열 치환을 한 뒤에,


tmp_name 파일을 "$hidden_dir/$fn"에 copy() 함수로 복사한 뒤에 이 곳에 $pw를 Write 합니다.


  • $_FILES["upfile"]["name"] : 클라이언트에 저장된 업로드된 파일명
  • $_FILES["upfile"]["tmp_name"] : 실제 서버에 저장되는 임시 파일명으로 php.ini에서 upload_tmp_dir을 이용하여 위치를 지정할 수 있음.
  • .htaccess : 웹 서버에서 디렉터리 별로 설정하기 위한 파일


결국 Hidden Directory를 알아내야 할 것 같습니다.

저번 글에서 함수 앞에 붙는 @는 함수에 에러를 출력하지 않을 때 사용된다는 것을 잠깐 언급한 적이 있었는데, 

copy 앞에 @가 붙어 있지 않습니다. 

임의적으로 Error를 발생시키면 Hidden Directory를 알아낼 수도 있을 것 같습니다.


파일명을 공백으로 업로드하면 "no"라는 구문이 뜹니다.

그래서 마지막 replace 구문 다음에 아무런 처리가 없으므로, "<" 문자로 된 파일명을 업로드하면 

공백으로 된 파일을 업로드한 것이 됨으로 Error가 발생하고, Hidden Directory가 노출되게 됩니다.

( Hidden Directroy를 알아내고 Password를 저장할 파일을 업로드할 때, 실제 파일(txt) 등을 업로드하면 해당 Password로 Auth가 되지 않습니다. Proxy를 이용해 임의의 파일을 업로드 하신 뒤, 해당 Password로 Auth하시기 바랍니다. )


Security에서 Error처리가 중요하다고 강조하는데, 이 점을 느낄 수 있었던 문제였습니다.