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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
adminer_CVE-2021-43008 — Adminer의 CVE-2021-43008 취약점 데모 환경: 실제 영향을 관찰하고 완화 조치를 테스트합니다. | Kitploit
도구/GitHubGitHub/bamolitho/adminer_cve-2021-43008
Vulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationDatabase SecurityLabs & Practice
GitHubbamolitho/adminer_cve-2021-43008

adminer_CVE-2021-43008

Adminer의 CVE-2021-43008 취약점 데모 환경: 실제 영향을 관찰하고 완화 조치를 테스트합니다.

저장소 보기
139개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-43008 — Adminer 취약점

악성 MySQL 서버를 통한 임의 파일 읽기

1. Adminer란 무엇인가?

Adminer는 MySQL, PostgreSQL, SQLite 또는 SQL Server 데이터베이스를 쉽게 관리할 수 있는 웹 기반(PHP) 도구입니다. phpMyAdmin의 가벼운 대안으로 널리 배포됩니다.

영향을 받는 버전: Adminer ≤ 4.6.2


2. 취약점의 본질은 무엇인가?

2.1. 접근 제어 실패

Adminer는 임의의 원격 MySQL 서버에 대한 연결을 허용합니다. 그런데 MySQL 서버에 연결할 때 클라이언트(여기서는 Adminer)는 다음을 수락합니다.

  • 서버의 초기 명령어 세트,
  • 그중 LOAD DATA LOCAL INFILE 명령어로, 서버가 클라이언트에게 로컬 파일을 보내도록 요청할 수 있습니다.

2.2. 문제점

Adminer는 취약한 버전에서 MySQL 서버의 응답을 올바르게 검증하지 않습니다.

결과: 공격자가 제어하는 MySQL 서버가 다음을 요청할 수 있습니다.

"Adminer를 호스팅하는 머신 또는 컨테이너의 로컬 파일을 읽어서 나에게 보내라."

이 메커니즘은 MySQL 패킷과 관련이 있습니다. 0xFB | filename → 로컬 파일 읽기를 트리거합니다.

버전 4.6.2가 취약한 이유

Adminer 4.6.2는 사용자가 외부 MySQL 서버를 지정하고 자유롭게 연결할 수 있도록 허용했습니다. 그런데 MySQL은 기본적으로 다음 사용을 허용했습니다.

  • LOAD DATA LOCAL INFILE
  • 특정 서버가 파일을 요청할 때 자동 모드로 실행됩니다.

따라서: Adminer → 악성 서버에 연결 → 악성 서버가 파일 요청 → Adminer가 파일을 전송합니다.

이것이 취약점의 핵심입니다.


3. 악용 조건

공격자는 다음을 수행해야 합니다.

  1. 악성 MySQL 서버(Rogue MySQL Server)를 호스팅합니다.
  2. Adminer가 자신의 서버에 연결하도록 유도합니다.
    • 구성 오류를 통해,
    • 공개적으로 노출된 인터페이스를 통해,
    • 사용자 작업(호스트 제공 공격 유형)을 통해.
  3. 악성 MySQL 서버가 LOAD DATA LOCAL INFILE 패킷을 반환합니다.
  4. Adminer가 로컬 파일을 읽습니다.
  5. 파일이 공격자에게 반환됩니다.

로컬 파일을 유출하기 위해 루트 비밀번호가 필요하지 않습니다. Adminer가 대상 서버에서 PHP 애플리케이션으로 작업을 실행하기 때문입니다.


4. 취약점의 결과

4.1. 기밀성 침해

공격자는 다음을 수행할 수 있습니다.

  • /etc/passwd 읽기 (Adminer를 호스팅하는 엔터티: 호스트 머신 또는 컨테이너),
  • /etc/shadow 읽기 (PHP 사용자 권한에 따라 다름),
  • 구성 파일 검색,
  • MySQL 연결 자격 증명 도용,
  • 웹 사용자가 액세스할 수 있는 모든 정보 추출.

4.2. 영향 확대

도용된 MySQL 자격 증명(2차 단계)을 사용하여 다음을 수행할 수 있습니다.

  • 실제 내부 데이터베이스에 연결,
  • 데이터 읽기,
  • 테이블에 쓰기,
  • 악성 페이로드 주입.

5. 실습 데모(PoC) — 랩 아키텍처

PoC는 모든 위험을 방지하기 위해 격리된 컨테이너화된 환경에서 수행됩니다.

5.1. 랩 구성 요소

  1. 취약한 Adminer(버전 4.6.2) 역할: 피해자 localhost:8080을 통해 로컬로 노출됨
  2. 정식 MySQL(선택 사항) 역할: 실제 데이터베이스 시뮬레이션
  3. 악성 MySQL 서버(Python) 역할: 공격자 0xFB filename 패킷을 전송하여 Adminer가 로컬 파일을 읽도록 강제함

5.2. 폴더 구조

root@kitploit:~
adminer_CVE-2021-43008/
│
├── README.md
├── docker-compose.yml
│
└──rogue_mysql_server/
	├── rogue_mysql_server.py
	├── requirements.txt
	└── Dockerfile

6. PoC 진행: 취약점이 어떻게 나타나는가?

6.1. 랩 시작

root@kitploit:~
docker compose build && docker compose up -d

6.2. Adminer에서 악성 서버에 연결

http://localhost:8080에서:

  • 시스템: MySQL
  • 서버: rogue_mysql:33306
  • 사용자: 아무거나
  • 비밀번호: 아무거나

6.3. 자동 진행

  1. Adminer가 핸드셰이크를 전송합니다.
  2. 악성 MySQL이 LOAD DATA LOCAL INFILE '/etc/passwd'를 반환합니다.
  3. Adminer가 /etc/passwd를 읽습니다.
  4. Adminer가 그 내용을 악성 서버에 전송합니다.
  5. 악성 서버가 텍스트를 stolen_file.txt에 저장합니다.

6.4. 관찰 결과

다음 명령어를 사용하여 악성 서버의 로그를 확인합니다:

root@kitploit:~
docker logs -f rogue_mysql

예상 결과:

root@kitploit:~
2025-11-27 16:59:54,248:INFO:Serving on ('0.0.0.0', 33306)
2025-11-27 17:02:55,213:INFO:Conn from: ('172.18.0.3', 37200)
2025-11-27 17:02:55,214:INFO:Last packet
2025-11-27 17:02:55,214:INFO:Query
2025-11-27 17:02:55,214:INFO:Requesting file: /etc/shadow
2025-11-27 17:02:55,215:INFO:-- Received file data
2025-11-27 17:02:55,215:INFO:Result length: 1 bytes
2025-11-27 17:02:55,215:INFO:Last packet
2025-11-27 17:02:55,216:INFO:Query
2025-11-27 17:02:55,216:INFO:Requesting file: /etc/passwd
2025-11-27 17:02:55,216:INFO:-- Received file data
2025-11-27 17:02:55,217:INFO:Result length: 920 bytes
2025-11-27 17:02:55,217:INFO:File content received: 919 bytes
2025-11-27 17:02:55,217:INFO:File saved to stolen_file.txt

stolen_file.txt 파일의 내용을 확인합니다:

root@kitploit:~
docker exec -it rogue_mysql sh

컨테이너 내부에 들어가면 stolen_file.txt를 포함한 파일 내용을 볼 수 있습니다.

root@kitploit:~
# ls
mysql.log  requirements.txt  rogue_mysql_server.py  stolen_file.txt
root@kitploit:~
# cat stolen_file.txt

결과:

root@kitploit:~
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:/bin/false

이 결과는 취약점을 명확하게 입증합니다.

7. 완화 조치

A. Adminer 업데이트 (이것만으로 충분함)

가장 신뢰할 수 있는 해결책: Adminer ≥ 4.6.3으로 업그레이드

이후 버전은 네트워크 동작을 수정합니다.

이후 버전에서 수정된 내용

Adminer 4.7.x부터 여러 보호 기능이 도입되었습니다.

Adminer는 이제 기본적으로 LOAD DATA LOCAL INFILE을 금지합니다.

즉:

  • 완전히 비활성화됨
  • 또는 사용자가 명시적으로 허용한 경우에만 활성화됨

→ 결과: 악성 MySQL이 더 이상 파일을 유출할 수 없습니다.

Adminer는 서버로 전송하기 전에 클라이언트 작업을 필터링합니다.

이를 통해 외부 연결이 위험한 함수를 사용하는 것을 방지합니다.

추가 입력 검증 메커니즘

새 버전은 다음을 확인합니다.

  • 대상 서버가 예상된 서버인지
  • 작업이 위험하지 않은지
  • 요청이 합법적인 사용자 작업과 일치하는지

B. 외부 연결 비활성화

Adminer를 내부 호스트로만 제한합니다.

  • 방화벽(OUTPUT + DOCKER NETWORKS)을 통해,
  • 필터링된 리버스 프록시를 통해,
  • 엄격하게 로컬화된 네트워크 구성을 통해.

프로덕션 Adminer는 항상 내부 MySQL을 가리켜야 합니다.


C. MySQL 측에서 LOCAL INFILE 비활성화

합법적인 MySQL 클라이언트를 통한 도난 방지:

root@kitploit:~
[mysqld]
local_infile=0

또는:

root@kitploit:~
SET GLOBAL local_infile=0;

D. Adminer를 공개적으로 노출하지 않음

Adminer는 인터넷에서 액세스할 수 없어야 합니다.

프로덕션에서는:

  • VPN을 통한 제한된 액세스,
  • SSO 또는 강력한 인증,
  • 자동 만료.

E. 사용 후 Adminer 제거

Adminer는 일시적인 도구로 간주되어야 합니다.

  • 특정 작업을 위해 배포,
  • 그 후 삭제.

8. 신뢰할 수 있는 리소스 및 참고 자료

  • 사용된 Python 스크립트 소스: https://github.com/Gifts/Rogue-MySql-Server/blob/master/rogue_mysql_server.py
  • Adminer 공식 사이트 https://www.adminer.org/en/
  • Sansec (최초 공개) https://sansec.io/research/adminer-4.6.2-file-disclosure-vulnerability
  • Podalirius (기술 설명 + PoC) https://podalirius.net/en/cves/2021-43008/
  • vulhub: https://github.com/vulhub/vulhub/blob/master/adminer/CVE-2021-43008/

9. 최종 요약

CVE-2021-43008은 Adminer ≤ 4.6.2의 심각한 취약점으로, 다음을 가능하게 합니다.

  • MySQL 서버를 제어하는 공격자가,
  • Adminer가 로컬 파일을 읽도록 강제하고,
  • 그 내용을 공격자에게 유출합니다.

이는 다음의 중요성을 완벽하게 보여줍니다.

  • 네트워크 제어,
  • MySQL 클라이언트 제한,
  • 관리 도구의 비노출,
  • 소프트웨어 버전 관리.

도구 다운로드