본문 바로가기
Web/개념정리

[개념정리] PHP Deserialization 취약점

by jh117jh 2024. 5. 26.
728x90

Stream Wrapper란?

PHP에서 파일을 다루는 함수에 대한 인터페이스 역할을 하는 것으로 fopen()copy()file_exists() 및 filesize() 등과 같은 파일 시스템 함수와 함께 사용하기 위한 다양한 URL 스타일 프로토콜을 위한 많은 내장 래퍼를 제공하는 것을 말한다. 내장 래퍼를 통해 파일 입출력을 수행할 수 있다.

ex) http://, https://, file://, phar:// ....

phar란?

phar(PHP Archive)는 많은 코드 파일 및 기타 리소스를 단일 아카이브 파일로 사용할 수 있는 패키지 형식이다.

 

phar 파일은 총 4개의 구조로 이루어진다.

  • Stub
  • Manifest
  • File contents
  • Signature (Optional)

Stub

작은 형태의 코드를 담을 수 있고 해당 영역에 _HALY_COMPILER():가 있어야 phar파일로 인식할 수 있다.

Manifest

phar파일에 대한 meta데이터를 담고 있다.

File contents

phar 내 데이터 영역이다.

 

 

이러한 phar 아카이브는 직렬화된 메타데이터를 포함하는데 이러한 데이터를 역직렬화 시키는 함수들에 의해 취약점이 발생한다.

만약 오염된 직렬화 데이터를 요청 가능할시 역직렬화를 통해 공격이 이루어질수 있다.

 

취약점이 발생하는 함수

 

file()
filetime()
filectime()
fileatime()
file_put_contents()
fileinode()
file_exists()
filegroup()
fileowner()
file_get_contents()
fopen()
fileperms()
is_dir()
is_readable()
is_executable()
is_writable()
is_writeable()
is_file()
is_link()
parse_ini_file()
copy()
unlink()
stat()
readfile()



728x90

'Web > 개념정리' 카테고리의 다른 글

[개념정리] Dompurify  (0) 2024.06.23
[개념정리] Prototype Pollution  (0) 2024.06.05
[개념정리] case mapping collision  (0) 2024.02.29
[개념정리] Click jacking  (0) 2024.01.05
[개념정리] SameSite  (0) 2023.10.27