Web-Server) File upload(Null byte), php assert()
Wargame/Root-Me

Web-Server) File upload(Null byte), php assert()

1. File upload (NULL byte)

Your goal is to hack this photo gallery by uploading PHP code.

: 이것도 동일하게 갤러리에 파일을 업로드 하는 문제이다. null byte를 포함시켜야 되는 것 같아서

 

이런 식으로 확장자랑 중간중간에 null byte를 집어넣어보았다.

: 그리구 저번에 했던 것처럼 content type을 image/jpeg로 바꿔 넣었지만, wrong extension이라고 떴다. 확장자를 다 검사하는 듯. 

 

그래서 그냥 간단히 attack.php%00.jpeg로 집어 넣어보았다. 성공했다. 어차피 맨 오른쪽 확장자 표시만 확장자로 인식하는 듯 하다. %00바이트로 일단 뒷 내용은 잘리면서 php 파일로 제대로 인식되는 원리인것 같다.

너무 간단해서 또 훼이크인줄...

2. PHP- assert()

 : Find and exploit the vulnerability to read the file .passwd.

 파라미터가 있고 그 뒤에 파일 이름을 받는 것으로 보아 LFI 취약점인 것 같다. 실제로 include되지 않았다는 등 오류 메세지가 그대로 보이는 취약점이 발생한다.

 

아마 true와 false를 반환하는 assert()함수를 사용하는 것 같다. 일단 정석적인 방법대로 ../를 계속 추가해보았는데. hacking attempt detected라는 것을 보아 ../를 인식하는 것 같다. 다른 방법이 필요할 것 같다.

일단 파라미터가 어떻게 완성되는지 살펴봐야 할 것 같다.

'includes/'$_GET['file']'.php' 이런 형식으로 전달이 되는 것 같다. 일단 ..를 우회하여 system 명령어를 전달해야 할 것 같다. 

일단 1) '.'는 통과 했고, 2) '..'는 통과가 안됐다. ..가 필터링되는 것 같다. 

 

3) '..'가운데에 아무 글자나 넣어보았다. 정상적으로 입력이 된다.

 

 

4) 음? 이 사이에 시스템 명령어를 넣어도 되려나?

통과!!

 

5) cat .passwd를 넣었더니 통과, 이 사이에도 따옴표가 필요했다.

 

엄청 오래걸린 문제였는데.. 막 때려넣다가 나온 감이 없지않아 있다. lfi우회 방법같은 걸 좀더 공부해야 될것 같다.