일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- exploit
- 백엔드개발자
- elk stack
- elasticsearch
- error 583066
- SQLMap
- 정보보안
- rce
- node.js
- windows
- pwnable
- 가이드라인
- Index
- filesystem
- software
- PetitPotam
- Mitre
- ATT&CK
- 시스템해킹
- 랜섬웨어
- 침해사고
- wargame
- #whitespace #
- Credential Access
- 프론트엔드개발자
- Threat Intelligence
- sql인젝션
- forensic
- #C언어 #연산자
- AD
- Today
- Total
Plit00's Story
PHP - Unserialize() 본문
PHP의 serialize ()는 임의의 출력을 생성 할 수 없습니다.
예를 들어 직렬화 된 문자열에 동일한 배열 키를 두 번 정의 할 수 없습니다
Unexpected Behavior
Segmentation fault
가장 명백한 이벤트는 프로세스의 반환 코드를 확인하여 쉽게 감지 할 수있는 분할 오류입니다.
PHP prints zend_mm_heap_corrupted:
PHP는 할당을 위해 자체 메모리 관리자를 사용합니다. 할당자가 힙에서 손상을 감지하면 해당 메시지가 인쇄됩니다.
값의 유형은 zval 구조 안에 저장되며 0과 10 사이의 숫자가 될 수 있습니다.
=>유형 1은 정수를 나타내고 유형 6은 문자열에 사용됩니다. var_dump로 인쇄 된 변수가 알 수없는 유형 (0-10 범위가 아님)이 있으면 "& UNKNOWN;"문자열이 대신 인쇄됩니다.
PHP가 알지 못하는 데이터 유형을 만드는 것이 일반적으로 불가능하기 때문에 메모리 손상을 나타냅니다.
PHP 5.6에서는 zval 구조체의 크기가 24 바이트입니다.
이 구조체가 \ x01로 완전히 채워지면 결과 값은 72340172838076673 값을 갖는 정수가됩니다.
\x01로 구성된 24 바이트 길이의 문자열을 놓습니다. 결과적으로 비 직렬화 된 데이터에 72340172838076673이 있으면 사용 후 비어있는 취약성이 발견되어 성공적으로 악용되었다는 것을 나타냅니다.
Incorrect return value:
배열을 항상 외부 요소로 사용하여 unserialize의 두 가지 가능한 반환 데이터 유형 즉, 오류가 발생하지 않은 경우 "array"또는 입력이 unserialize를 만족하지 못하는 경우 "NULL"을 나타냅니다.
배열과 다른 모든 데이터 유형 또는 null은 예상치 못한 일이 발생했음을 의미합니다.
post-unserialize allocation :
unserializing과 var_dump 사이에 정의 된 변수의 발생은 자유 사용 후 (out-of-free) 취약점의 표시 일 가능성이 큽니다.
unserialize unserialize var_dump :
두 번째 unserialize가 추가되었습니다. 초기 unserialize 후 메모리 작업의 양을 늘리는 것이 목적입니다.
alloc_serialize alloc var_dump :
문자열은 직렬화되지 않고 일부 수정 값은 변수에 할당되고 마지막으로 unserialize의 결과가 출력됩니다.
두 버그는 Stackoverflow로 이어지고 segmentation 오류를 일으켜 렬화되지 않은 유형입니다.
'잡동사니 > webhacking' 카테고리의 다른 글
매커니즘 (0) | 2022.01.27 |
---|---|
unserialized (0) | 2021.12.09 |
Prepare() : WordPress Exploit (0) | 2019.08.15 |