R's Hacking Daily Log

File Upload - Lab (2) 본문

Port Swigger/File Upload

File Upload - Lab (2)

hanhxx 2023. 6. 21. 13:40

Lab - Web shell upload via Content-type restriction bypass

이번에 Lab에서는 파일을 업로드할 때 서버에서 요구하는 확장자가 만족되어야 하는 상황을 보여준다.

앞선 Lab에 했던 거처럼 php 파일을 사용해서 upload 하면 

 

오직 image\jpeg & image\png인 유형의 파일만을 허용한다는 문구가 나온다. 

문구를 자세히 보면 "application/octet-stream은 허용되지 않는다"는 부분에서 힌트를 얻을 수 있다.

 

 

파일을 업로드할 때 보낸 packet을 보면 위와 같이 content-disposition header가 작성되는 걸 볼 수 있다.

 

avatar 파일을 제출한 사람이 누구인지, csrf token과 업로드한 파일 정보를 각각 나타내고 있는데

이때 업로드한 파일인 webshell.php에 대한 부분은 Content-Type header가 부가적으로 작성된 걸 알 수 있다.

 

Content-type 값을 보니 문구에서 언급된 application/octet-stream이 그대로 적혀있다. 

즉, php 파일을 보낸 form은 type이 허용되지 않는다는 의미로 이 값을 변경할 필요가 있어 보인다. 

 

 

content-type을 허용된다고 알려준 유형으로 조작해서 packet을 보냈더니

 

 

성공적으로 파일이 업로드됐다고 한다. 

 

 

파일이 업로드 되면 서버에서는 자동으로 해당 파일을 해석하면서 php file이 실행되고 

그 결과로 /file/avatarts/webshell.php request에 대한 응답을 받을 수 있게 된다.

 

 

GET /file/avatarts/webshell.php의 응답을 확인해 보면 /home/carlos/secret file의 내용을 얻을 수 있다!!

 

 

 

 

이번 Lab에서는 나름대로 파일 확장자를 검사함으로써 파일 업로드를 하는 데에 어느 정도 제한이 있었지만

파일 업로드의 결과를 알려주는 페이지에서 정보를 얻을 수 있다.

 

 

"이런 이유로 에러가 발생했다!" 말해주는 건 

어떻게 보면 사용자의 문제 해결을 도와주기 위한 목적이겠지만 반대로

에러를 발생시킨 이유를 활용할 수 있다는 힌트를 주는 행위가 될 수도 있다. 

 

sql injection에서도 ' 를 입력해 에러가 발생하는지 확인하는 이유가 

에러가 발생한다는 건 시스템 상에서 어떠한 역할을 한다는 걸 의미하기 때문이다. 

 

따라서 이번 Lab에서는 content-type과 업로드된 파일 확장자가 실제로 동일한 지 적절히 검사하지 않은 부분 때문도 있지만,

에러 문구로 사용자에게 필요 이상의 정보를 알려주었다는 것이 흠이었다 할 수 있다!

'Port Swigger > File Upload' 카테고리의 다른 글

File Upload - Lab (5)  (0) 2023.06.25
File Upload - Lab (4)  (0) 2023.06.25
File Upload - Lab (3)  (0) 2023.06.21
File Upload (1) & Lab (1)  (0) 2023.06.20
Comments