Hacker News보안

PHP 메모리 오버플로우로 비트코인 탈취하는 PoC 공개

원제 Steal My Bitcoin CTF PoC

106 포인트댓글 23
Key Point

PHP 메모리 관리 취약점을 이용한 실제 임의 코드 실행 기법의 완전한 기술 분석과 재현 가능한 PoC가 공개되어, 웹 애플리케이션 보안과 메모리 안전성 문제를 다루는 개발자에게 중요한 참고 자료가 된다.

핵심 요약

  • Alpine PHP 8.4.26 환경에서 메모리 오버플로우 취약점을 이용해 임의 코드 실행을 달성하는 CTF 증명 코드를 공개했다.
  • Python 표준 라이브러리만 사용하며, 최대 20개의 HTTP 요청으로 헬스 체크 → 힙 릭 → 코드 릭 → 콜백 실행 4단계를 거친다.
  • 소형 멀티파트 업로드(약 250KB)가 PHP 메모리 파싱 중에 128MB 제한을 초과하도록 설계되어, 워커에 stale state를 남긴다.
  • 힙 릭 단계에서 249KB 프로듀서 + 8개의 6.6KB 컨슈머를 파이프라인으로 보내 256바이트 쿠키에 힙 베이스 주소를 추출한다.
  • 코드 릭 단계에서 251KB 프로듀서 + 8개의 92KB 컨슈머를 보내 16바이트 쿠키에서 zval_ptr_dtor 포인터를 읽는다.
  • 최종 요청에서 368KB의 위조된 PHP HashTable을 multipart로 전송해 cleanup 경로에서 zif_system(system 핸들러)을 호출하도록 강제한다.
  • 명령 인자로 시스템 콜백에서 id, 바이너리 해시, print-flag 결과를 HTTP 응답으로 전송하며, ASLR 독립 페이지 오프셋 검증으로 빌드 일치를 확인한다.
  • 4워커 구성에서 약 70% 성공률(10회 중 7회)을 기록하며, 워커 할당 레이스 조건이 주요 실패 요인이다.
  • 원본 라이브 실행은 2026년 10월 25일 유효한 WIF(지갑 키)를 탈취했지만, 개시자 오류로 인해 해당 주소와 불일치했다.
  • 완전한 요청 및 응답 바이트, 파싱된 주소 후보, 실행 증거 파일을 poc-run 디렉토리에 저장하며, Docker 랩 환경과 실제 도전 환경 모두 지원한다.
  • 모든 오프셋과 거리 계산값이 Alpine 4워커 환경의 메모리 레이아웃에 의존하므로, Debian 이미지나 워커 수 변경 시 실패한다.
  • 공격 단계마다 HTTP 상태, 쿠키 길이, 포인터 범위, 코드 이미지 fingerprint를 검증해 조건 미충족 시 진행을 중단한다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗