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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PoC_CVE-2019-0217 — CVE-2019-0217에 대한 개념 증명 익스플로잇 — Apache HTTP Server의 mod_auth_digest에서 발생하는 경쟁 조건을 이용한 인증 우회 — Docker 기반 취약 환경 및 Burp Turbo Intruder 자동화 스크립트 포함. | Kitploit
도구/GitHubGitHub/savsch/poc_cve-2019-0217
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationLearning & Education
GitHubsavsch/poc_cve-2019-0217

PoC_CVE-2019-0217

CVE-2019-0217에 대한 개념 증명 익스플로잇 — Apache HTTP Server의 mod_auth_digest에서 발생하는 경쟁 조건을 이용한 인증 우회 — Docker 기반 취약 환경 및 Burp Turbo Intruder 자동화 스크립트 포함.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

이 저장소는 CVE-2019-0217에 대한 개념 증명 익스플로잇과 해당 CVE에 취약한 웹 서버를 설정하기 위한 Dockerfile을 포함하고 있습니다.

CVE 설명

Apache HTTP Server 2.4 릴리스 2.4.38 및 이전 버전에서 스레드 서버에서 실행될 때 mod_auth_digest의 경쟁 조건으로 인해 유효한 자격 증명을 가진 사용자가 다른 사용자 이름을 사용하여 인증하고 구성된 액세스 제어 제한을 우회할 수 있었습니다.

배경

HTTP 다이제스트 인증

클라이언트가 HTTP 다이제스트 인증이 있는 리소스에 접근하려고 하면 서버는 401 상태 코드와 함께 아래 형식의 WWW-Authenticate 헤더를 응답합니다:

root@kitploit:~
Digest realm="rlm", nonce="TToc8M0jBgA=7afa4f292c97632a6c17eec458d3db31021b111f", algorithm=MD5, qop="auth"

클라이언트는 HA1을 계산합니다. HA1은 A1(즉, username:realm:password)의 md5 다이제스트입니다. 그런 다음 nonce 및 cnonce와 같은 다른 메타데이터를 추가하여 A2를 얻고, A2의 md5 다이제스트가 HA2가 됩니다. 클라이언트는 이 HA2를 username, cnonce 및 기타 메타데이터와 함께 Authentication 헤더에 포함하여 응답으로 보냅니다:

root@kitploit:~
'Digest username="attacker", realm="rlm", nonce="TToc8M0jBgA=7afa4f292c97632a6c17eec458d3db31021b111f", uri="/scripts/userprofile.cgi", response="bcb433e4071fa228fe0c9452a7495efd", algorithm="MD5", qop="auth", nc=00000001, cnonce="2309510923095109"
                 ^^^^^^^^^^

아래에서 설명하는 바와 같이, 위 헤더의 강조 표시된 부분을 조작하여 익스플로잇이 작동하는 데 필요한 경쟁 조건을 만들 수 있습니다.

취약점 분석

이 취약점은 해당 커밋에서 수정되었습니다. mod_auth_digest 모듈의 코드(mod_auth_digest.c의 get_hash 함수)를 살펴보면, 서버가 먼저 Authentication 헤더를 파싱하여 username= 뒤 따옴표 안의 내용을 확인하고, 이를 요청과 연관된 사용자(r->user)로 처리한다는 것을 알 수 있습니다. 그런 다음 이 "사용자"가 요청된 리소스에 접근할 수 있는지 확인합니다. 접근 가능하면 get_hash 함수가 인증 파일에서 해당 HA1을 검색합니다. 취약점 수정 커밋 이전에는 이렇게 검색된 HA1이 conf = (digest_config_rec *) ap_get_module_config(r->per_dir_config,&auth_digest_module) 변수에 저장되었는데, 이는 분명히 스레드 안전하지 않았습니다.

이것이 익스플로잇을 가능하게 합니다:

익스플로잇

배경

위의 취약점 분석 섹션에 기반하여, 유효한 Authentication 헤더가 있는 요청과 위조된 Authentication 헤더(유효한 헤더와 동일하지만 username= 값이 공격자가 인증하려는 대상 사용자로 설정됨)가 있는 요청을 동시에 전송하여 경쟁 조건을 생성할 수 있습니다.

이 익스플로잇에서 사용되는 용어: - 공격자: 이 익스플로잇을 실행하는 사용자. 자신의 계정에 대한 유효한 사용자 이름과 비밀번호를 가지고 있습니다. - 피해자: 공격자가 가장하려는 사용자. 피해자의 사용자 이름은 알려져 있지만 비밀번호는 (당연히) 알려져 있지 않습니다.

이 방법을 실행하기 위해 일부는 첫 번째 유형의 요청을 보내고 다른 일부는 두 번째 유형의 요청을 보내는 많은 Python 스레드를 스팸으로 보내는 방식으로 작동시킬 수 있었지만, 신뢰성이 떨어지고 성공하려면 많은 수의 요청이 필요했습니다. 이로 인해 요청을 병렬로 안정적으로 보내는 Burp의 Turbo Intruder(무료)를 사용하게 되었습니다. 불행히도 Turbo Intruder의 CLI 지원이 작동하지 않으므로 익스플로잇의 일부 부분은 GUI를 사용하여 수행해야 합니다.

취약한 환경 설정

이 저장소에 포함된 샘플 취약 서버를 사용하려면 다음을 실행하십시오:

root@kitploit:~
$ cd sample_vulnerable_server
$ docker build -t poc_httpd .
$ docker run -p 8038:80 poc_httpd

실제 익스플로잇

상단의 변수들을 구성한 후 generate_turbo_intruder_script.py를 실행하십시오:

root@kitploit:~
# Configuration
URL = 'http://localhost:8038/scripts/userprofile.cgi' # location to the resource protected by digest auth
ATTACKER_USERNAME = 'attacker'
ATTACKER_PASSWORD = 'known'
VICTIM_USERNAME = 'victim'
NUMBER_OF_REQUESTS = 2000 # number of concurrent requests sent to catch a glimpse of the race condition

이 스크립트는 현재 디렉토리에 generated/turbo_intruder_script.py 및 generated/request.txt 두 개의 파일을 생성합니다.

이제 BurpSuite Community Edition을 열고, 아직 설치하지 않았다면 Extensions -> BApp Store로 이동하여 "Turbo Intruder" 확장을 설치하십시오.

Burp Repeater를 엽니다. 대상의 호스트와 포트를 설정하십시오: image

generated/request.txt의 내용을 요청 섹션에 붙여넣으십시오: image

요청 섹션의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 'Extensions->Turbo Intruder->Send to Turbo Intruder'를 선택하십시오. image

generated/turbo_intruder_script.py의 내용을 스크립트 섹션에 붙여넣으십시오: image

마지막으로 Turbo Intruder 창 하단의 Attack 버튼을 클릭하십시오. 성공적인 결과가 결과 화면에 표시됩니다: image

도구 다운로드