본문 바로가기
Web hacking/Nomaltic) 웹 해킹 수업 노트 👩‍💻

[복습]파일 업로드 취약점 실습(2)

by m_.9m 2021. 12. 16.

 

5. 이미지에 웹쉘을 인코딩해 우회하는 방법을 실습

https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-polyglot-web-shell-upload

 

Lab: Remote code execution via polyglot web shell upload | Web Security Academy

This lab contains a vulnerable image upload function. Although it checks the contents of the file to verify that it is a genuine image, it is still possible ...

portswigger.net

 

File Signature ?

파일 형식은 저장을 목적으로 정보를 컴퓨터 파일로 인코딩하는 특별한 방식을 지니고있는데 이를 파일 포맷이라고도 한다. 파일이 담고있는 이러한 데이터를 사용하기 위해서는 관련 소프트웨어가 필요하고, 각각의 소프트웨어는 자신의 고유한 파일 포맷을 만들어 사용하고 있다. 파일 포맷의 기본이 되는 내용이 파일 시그니처(File Signature)이다.

파일 시그니처는 파일의 가장 처음에 위치하는 특정 바이트들로 파일 포맷을 구분하기 위해서 사용된다. 예를 들어 JPEG 파일은 "FF D8 FF E0" 의 시그니처를 갖는다.

 

보통 이미지 파일은 파일 시그니처부분만을 확인하기때문에 이 파일 포맷에 PHP코드를 숨겨서 공격할 수있다.

 

http://forensic-proof.com/archives/300

 

파일 시그니처 모음 (Common File Signatures) | FORENSIC-PROOF

 

forensic-proof.com

 

 

실습을 수행하기 위해서는 HXD가 필요하다. 해당사이트에 밑으로 내려보면 한국어 버전을 설치 할 수있다.

 

HXD 다운로드하기 

 

 

 

(1) 다운로드 받은 HXD로 이미지파일을 열었을 때 다음과 같이 이미지 파일이 인코딩 된 모습을 볼 수있다. 

여기서 위에 파일 시그니처 부분이 아닌 가장 마지막 부분에 PHP 문을 삽입할 예정이다.

 

인코딩된 이미지파일

 

(2) PHP문을 아래에 삽입한 후 저장해준다.

 

 

(3) 사이트 내에서 이미지 업로드 요청을 보낸다.

그리고 패킷을 확인해 Repeater로 보낸후 파일의 이름에 해당하는 부분을 찾아 jpg를 php로 바꿔준다. 코드를 실행시키기 위함이다.

 

파일 이름의 확장자를 바꿔준다. (1)
파일의 확장자를 바꿔준다. (2)

 

(4) 파일 이름을 바꾼 후 정상적인 응답을 받으면 show browser로 링크를 복사해 실행시켜준다. 그럼 파일이 정상 업로드 된 것을 확인할 수있다.

 

 

정상 업로드화면

 

 

(5) 내 계정 페이지에서 이미지 링크를 복사해 새 창에 열면 이렇게 php문으로 쓰여지지 않았기 때문에 코드들이 알수없는 문자로 보여진다. 그리고 가장 아래에 php문이 실행된다. 

 

정상적인 코드들

근데 PHP문이 실행된 모습이 안보인다 ㅠㅠㅠㅠㅠ 

왜 안되는지 모르겠다. 나중에 다시 해보자!^*^