▼ 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처리가 중요하다고 강조하는데, 이 점을 느낄 수 있었던 문제였습니다.
'WarGame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] Challenge 5 :: MySQL Column Truncation Vulnerability (2) | 2015.12.01 |
---|---|
[webhacking.kr] Challenge 56 :: SQL (와일드카드) (0) | 2015.12.01 |
[webhacking.kr] Challenge 37 :: 포트 포워딩 2 (1) | 2015.11.27 |
[webhacking.kr] Challenge 43 :: 파일 업로드 취약점 1 (Content-Type) (0) | 2015.11.26 |
[webhacking.kr] Challenge 51 :: Raw MD5 (0) | 2015.11.24 |