Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-25690 — CVE-2023-25690 Apache mod_proxy의 HTTP 요청 스머글링에 대한 PoC 익스플로잇입니다. Docker를 이용한 실습 환경, BurpSuite 워크스루, 프록시 접근 제어 우회를 통해 내부 관리자 엔드포인트에 접근하는 방법을 포함합니다. | Kitploit
도구/GitHubGitHub/thanhlam-attt/cve-2023-25690
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLearning & Education
GitHubthanhlam-attt/cve-2023-25690

CVE-2023-25690

CVE-2023-25690 Apache mod_proxy의 HTTP 요청 스머글링에 대한 PoC 익스플로잇입니다. Docker를 이용한 실습 환경, BurpSuite 워크스루, 프록시 접근 제어 우회를 통해 내부 관리자 엔드포인트에 접근하는 방법을 포함합니다.

저장소 보기
412년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2023-25690

CVE-2023-25690 설명:

  • Apache HTTP Server 2.4.0부터 2.4.55까지의 일부 mod_proxy 구성에서 HTTP Request Smuggling 공격(하나 이상의 사용자로부터 수신된 HTTP 요청 시퀀스를 웹 사이트가 처리하는 과정에 간섭하는 공격 기술)을 허용합니다.
  • 이러한 구성은 mod_proxy가 특정 형태의 RewriteRule 또는 ProxyPassMatch와 함께 활성화된 경우 영향을 받으며, 원격 공격자가 이 취약점을 악용하여 프록시 서버의 접근 제어 조치를 우회하고, 결과적으로 원치 않는 URL을 원본 서버에 위임할 수 있습니다.
  • 이 취약점은 공격자가 프록시에 의해 숨겨진 내부 애플리케이션을 대상으로 접근할 수 있게 하여, 무단 액세스, 데이터 유출 또는 시스템 내 추가 악용으로 이어질 가능성이 있습니다.

CVE-2023-25690 실험

  • 공격자 머신으로 Windows 사용
  • 백엔드 서버 및 프록시 서버는 Kali Linux 머신에서 Docker를 통해 배포됨

실습 파일 구조:

image

실험 모델

image

  • Windows 10 IP 주소: 192.168.1.177
  • Kali Linux IP 주소: 192.168.27.139
  • 백엔드 서버 IP 주소: 172.18.0.2
  • 프록시 서버 IP 주소: 172.18.0.3
  • Windows 10이 Kali 머신 port 80에 호스팅된 Apache HTTP Server에 접근하면 트래픽이 Proxy-Server의 port 80으로 전달되고, port 8080을 통해 Backend-Server로 전달됩니다.

시스템 요구 사항

  • 공격자 머신:
    • 운영 체제 Windows 10
    • 도구 설치: Pycharm, BurpSuite, VScode
    • FireFox 브라우저 사용 및 프록시 설정을 위한 FoxyProxy 확장 프로그램 설치
  • 피해자 머신:
    • 도구 및 서비스 설치: Docker, Tcpdump
    • Docker File 구성 (부록 참조)

공격 목표: HTTP Request Smuggling 취약점을 이용하여 프록시 서버의 제한을 우회하고 admin.php 페이지의 숨겨진 함수에 접근

실험 배포:

  • BurpSuite Community를 프록시로 설정하여 요청을 가로채고 수정
  • 브라우저에서 FoxyProxy 확장 프로그램을 다운로드하고 프록시 정보 추가: image
  • FoxyProxy를 도구 모음(브라우저 확장 프로그램 섹션)에서 Turn Off에서 BurpSuite Commu로 전환: image
  • BurpSuite에서 intercept를 on으로 설정하여 패킷 가로채기 실행: image
  • Kali 머신에서 cd 명령어로 docker-composer.yml 파일이 있는 lab 디렉토리로 이동하고, docker composer 실행: docker-composer up --build

CRLF 주입 확인:

  • 먼저, 다음과 같이 제어 문자(CRLF)를 포함한 요청을 시스템에 전송: HTTP/1.1\r\nFoo: baarr\r\r\n\n 그리고 URL 인코딩: %20HTTP/1.1%0d%0aFoo:%20baarr image => CRLF 문자(%0d%0a)를 삽입했을 때 서버가 오류나 제한 없이 요청을 처리하므로, CRLF 문자를 완전히 삽입할 수 있음을 알 수 있습니다.

HTTP Request Smuggling 확인:

  • 다음으로, 다음과 같은 URI가 있습니다: /categories/1 HTTP/1.1\r\nHost: Localhost\r\n\r\nGET /SMUGGLED, URL 인코딩 결과: /categories/1%20HTTP/1.1%0d%0aHost:%20localhost%0d%0a%0d%0aGET%20/SMUGGLED/ image
  • RewriteRule 적용 후, URL이 구문 분석되어 프록시를 통과한 요청이 다음과 같은 형식으로 변환됨을 확인 가능: image
  • 하나의 요청을 보냈지만 서버가 GET /categories와 GET /SMUGGLED라는 두 개의 응답을 수신하여 반환하는 것을 알 수 있습니다. image

HTTP Request Smuggling 악용:

  • httpd.conf 파일에서 Proxy-Server가 /admin/ 페이지 접근을 차단하도록 구성했다고 가정: image
  • HTTP Request Smuggling을 이용하여 apache-proxy의 검사 메커니즘을 우회할 수 있습니다. 요청: image
    • 로그 확인 결과, apache-proxy를 성공적으로 우회하여 /admin에 요청을 보냈고, 백엔드도 GET /admin에 대해 상태 코드 200을 반환했습니다. image
    • admin.php 파일에 임의의 도메인에 쿼리하는 nslookup 시스템 명령어를 실행하는 함수가 있다고 가정합니다. 목표는 프록시 메커니즘을 우회하고 이 숨겨진 함수에 접근하여 DNS 쿼리를 보내는 것입니다. 여기서는 우리의 Kali 머신 자체에 쿼리합니다. image
    • 악용 코드 (CVE-2023-25690.py 파일)와 pre.txt 파일 (프록시 서버를 우회하여 시스템에 요청을 보내기 위해 원하는 smuggled 요청 포함, 여기서는 /admin.php)이 있습니다. 이 코드는 pre.txt 파일에 포함된 요청으로 smuggling 요청을 생성하여 서버로 전송합니다. 동시에 요청 및 응답 결과를 각각 req.txt와 res.txt 파일에 기록합니다. image
    • 동시에 Kali 머신에서 TCPDUMP를 사용하여 port 53의 DNS 패킷을 캡처합니다. image
  • 우리가 보낸 요청이 프록시를 성공적으로 통과했음을 알 수 있습니다. 프록시는 이를 유효한 요청으로 간주합니다. 그러나 백엔드 서버에서는 제어 문자를 구문 분석하여 하나의 요청을 세 개의 요청으로 분할합니다: 첫 번째는 GET /categories.php?id=1, 두 번째는 GET /admin.php?secret=192.168.1.194, 마지막은 GET /abc입니다. image
  • 따라서 프록시가 요청을 허용하지 않는 /admin.php에 성공적으로 요청을 보냈습니다. image => TCPDUMP 확인 결과, 전송된 DNS 패킷이 캡처되었습니다. -> /admin.php의 숨겨진 함수가 성공적으로 실행되었습니다.

부록

Backend 폴더 내 DockerFile 구성

image

  • 이 구성 파일은 백엔드 서버가 PHP 7.4-apache 이미지를 사용하도록 지정합니다. 이 이미지는 PHP 7.4와 Apache 웹 서버를 포함합니다.
  • 두 번째 명령은 src/ 디렉토리의 모든 내용을 /var/www/html 디렉토리로 복사합니다. 이 디렉토리는 Apache가 웹 콘텐츠를 구축하는 기본 디렉토리(웹 루트)입니다.
  • 세 번째 명령은 sed를 사용하여 모든 80을 8080으로 대체합니다. 이를 통해 백엔드 서버의 Apache 기본 포트를 80에서 8080으로 변경할 수 있습니다.
  • 네 번째 명령은 패키지를 업데이트하고 dnsutils 패키지를 설치하는 데 사용됩니다. 이 패키지에 대한 자세한 내용은 https://github.com/iagox86/dnsutils/blob/master/README.md 에서 확인할 수 있습니다.
  • 마지막 명령은 컨테이너가 실행될 때 실행되며, apache 명령어를 사용하여 Apache 웹 서버를 시작합니다.

Frontend 폴더 내 DockerFile 구성

image

  • 이 파일은 Frontend 폴더의 httpd.conf 파일을 /tmp/httd.conf에 복사하고, 마지막으로 해당 httpd.conf 파일의 내용을 /usr/local/apache2/conf/httpd.conf 파일에 넣습니다.
  • httpd.conf 파일은 Apache HTTP 서버의 주요 구성 파일로, 서버 구성 설정 또는 작업을 정의합니다. 여기서는 Proxy-Server를 뜻합니다.
  • httpd.conf 파일은 일반적으로 /usr/local/apache2/conf/httpd.conf 경로에 설치되므로, 해당 경로에 내용을 넣어야 합니다. Frontend 폴더에 httpd.conf 파일을 생성하여 Apache를 더 유연하게 구성할 수 있습니다(위 경로까지 cd로 이동하여 httpd.conf 파일을 다시 작성할 필요 없음).

docker-compose.yml 파일 구성:

image

  • 여기서 애플리케이션 실행에 필요한 서비스, 네트워크 등을 정의합니다.
  • 여기서는 두 가지 주요 서비스인 apache-proxy와 backend-server를 선언합니다:
    • Apache-Proxy: ./frontend/DockerFile을 기반으로 구축되며, 네트워크는 backend-network(bridge)입니다. 또한 depends_on: backend-server를 구성하여 Apache-Proxy가 Backend-Server가 시작된 후에만 실행되도록 지정합니다. 마지막으로 ports: "80:80"을 지정하여 포트 포워딩을 설정합니다. 호스트 머신의 port 80으로 들어오는 트래픽은 컨테이너의 port 80으로 전달됩니다.
    • Backend-Server: ./backend/DockerFile을 기반으로 구축되며, 네트워크는 backend-network로 Proxy와 함께 사용되어 통신이 가능하도록 합니다. expose 구성으로 port 8080을 열어 Apache-Proxy가 이 포트를 통해 Backend-Server로 트래픽을 전달할 수 있게 합니다. 마지막으로 사용자가 새로운 권한을 생성하지 못하도록(파일 추가/수정/삭제, 프로세스 또는 네트워크에 대한 권한 추가 등) 하고, 프로그램이 수행하는 시스템 호출을 필터링하는 등의 보안 기능이 포함됩니다.

httpd.conf 파일 구성

image

  • 먼저 로그 저장 구성을 두 경로(/use/local/apache2/logs/error.log 및 /use/local/apache2/logs/access.log)에 설정합니다.
  • 다음으로 Rewrite Rule(재작성 규칙)을 적용하는 데 필요한 모듈을 로드합니다.
  • 그 다음 DocumentRoot를 지정합니다. 이 파일은 Apache 구성 파일에서 서버 데이터 파일이 위치한 곳을 결정하는 매개변수를 지정합니다.
  • 다음으로 /categories/ 및 /admin/ 경로에 대한 재작성 규칙을 적용합니다.
  • 마지막으로 /admin/에 대한 요청 전송을 차단합니다. -> 프록시를 우회하고 이 페이지에 접근하는 실습을 수행하기 위한 목적입니다.
도구 다운로드