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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-24061 — 교육용 Docker 랩으로, Python 클라이언트와 취약한 서버를 통해 Telnet NEW-ENVIRON 사용자 이름 주입(CVE-2026-24061)을 시연하며, 격리된 보안 연구를 위해 설계되었습니다. | Kitploit
도구/GitHubGitHub/tiborscholtz/cve-2026-24061
Vulnerability AnalysisExploitationNetwork SecurityLearning & EducationLabs & Practice
GitHubtiborscholtz/cve-2026-24061

CVE-2026-24061

교육용 Docker 랩으로, Python 클라이언트와 취약한 서버를 통해 Telnet NEW-ENVIRON 사용자 이름 주입(CVE-2026-24061)을 시연하며, 격리된 보안 연구를 위해 설계되었습니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Docker Telnet 자동 로그인 실습 환경

Docker Python License

Telnet 프로토콜 협상을 실험하기 위한 경량 Docker 실습 환경으로, CVE-2026-24061 취약점에서 설명된 NEW-ENVIRON 옵션을 이용한 자동 사용자 이름 주입을 다룹니다.

이 프로젝트는 Telnet이 환경 변수 기반 인증 우회를 처리하는 방식을 연구하기 위한 격리된 클라이언트-서버 환경을 생성합니다.


기능

  • Docker Compose를 사용한 격리된 2-컨테이너 실습 환경
  • 맞춤형 Python Telnet 클라이언트
  • 자동 USER 환경 변수 주입
  • 기본 Telnet 옵션 협상 처리
  • Docker 내부 DNS 기반 서비스 검색
  • 최소 구성, 재현 가능한 설정

아키텍처

root@kitploit:~
+---------+        labnet        +---------+
| node1   |  ------------------> | node2   |
| Client  |                      | Telnet  |
| Python  |                      | Server  |
+---------+                      +---------+
컨테이너역할
node1자동 로그인 스크립트가 포함된 Python 클라이언트
node2Telnet 서버 (inetutils-telnetd 2.7)

두 서비스 모두 labnet이라는 이름의 프라이빗 Docker 브리지 네트워크 내에서 실행됩니다.


프로젝트 구조

root@kitploit:~
.
├── compose.yaml
├── Dockerfile.node1
├── Dockerfile.node2
└── exploit.py

파일 상세

Dockerfile.node1

이 파일은 node1이라는 클라이언트 컨테이너 설치를 담당합니다.

이 실습 환경의 목적이 네트워크 통신뿐이므로 기본 이미지로 python:3.12-slim을 선택했습니다. telnet 클라이언트만 설치하고 exploit.py를 컨테이너의 루트 폴더에 복사합니다.

Dockerfile.node2

이 파일은 node2라는 서버 컨테이너 설치를 담당합니다.

이 컨테이너에도 동일한 기본 이미지가 적용됩니다. 다만 설치 과정에는 더 많은 단계가 포함됩니다:

  • 업데이트 후 취약한 버전의 telnetd를 받기 위해 wget을 설치해야 합니다.
  • 취약한 버전을 다운로드한 후 apt get install -y를 사용하여 설치합니다.
  • /etc/inetd.conf에 추가된 줄은 telnet 서비스를 활성화합니다.
  • 마지막 명령은 inetd 데몬을 컨테이너의 시작 명령으로 활성화합니다.

exploit.py

파일 상단에 몇 가지 상수가 선언되어 있습니다:

root@kitploit:~
IAC  = 255 
DO   = 253
DONT = 254
WILL = 251
WONT = 252
SB   = 250
SE   = 240

값이 255인 IAC는 Interpret As Command를 의미하며, Telnet 제어 시퀀스의 시작을 표시합니다.

더 자세한 옵션은 여기에서 확인할 수 있습니다.

형식은 일반적으로 다음과 같습니다:

root@kitploit:~
IAC <command> <option>

스크립트에는 다음 부분이 있습니다:

root@kitploit:~
# Handle telnet negotiation
if IAC in data:
    handle_telnet_negotiation(sock, data, username)

이 if 문은 서버로부터 수신한 현재 데이터에 IAC 값이 포함되어 있는지 확인하고, 포함되어 있다면 이를 명령으로 해석해야 함을 나타냅니다.

while 루프를 사용하여 수신된 데이터를 순회하며 각 바이트가 IAC인지 확인합니다.

root@kitploit:~
if data[i] == IAC:
    cmd = data[i+1]
    opt = data[i+2]

만약 그렇다면, cmd와 opt 변수에 데이터 스트림의 해당 바이트를 할당합니다.

opt 값이 NEW_ENVIRON 값과 같으면 스크립트는 send_new_environ_user 메서드를 실행합니다.

다음 코드 부분을 살펴보겠습니다:

root@kitploit:~
data = bytes([
        IAC, SB, NEW_ENVIRON, 0,  # IS
        ENV_USERVAR
    ]) + b"USER" + bytes([ENV_VALUE]) + username.encode() + bytes([
        IAC, SE
])

SB와 SE는 Telnet 프로토콜 상수의 일부입니다. SB는 'Subnegotiation begin'을, SE는 'Subnegotiation end'를 의미합니다. 이 두 값 사이의 모든 내용은 서버로 전송되는 특정 명령과 관련된 설정입니다. 이 경우 rfc1572 표준을 사용하여 메시지를 보내려고 하며, 자세한 내용은 여기에서 확인할 수 있습니다.

바이트 시퀀스를 영어로 대략 번역하면 다음과 같습니다:

root@kitploit:~
- 이것을 명령으로 해석 (IAC)
- 그것은 (0)
- 새로운 환경 변수 (NEW_ENVIRON)
- 이 새로운 환경 변수의 값은 (b"USER" + bytes([ENV_VALUE]) + username.encode())
- 하위 연결 종료 (IAC + SE)

그러나 대상 Telnet 서버가 사용자 이름과 관련된 환경 변수를 지원하지 않는 경우가 있습니다. 이 경우 기존 방식으로 사용자 이름을 전송하는 폴백(fallback) 방식을 사용합니다.


요구 사항

  • Docker 24+
  • Docker Compose v2+

설치 확인:

root@kitploit:~
docker --version
docker compose version

빠른 시작

1. 환경 빌드 및 시작

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

상태 확인:

root@kitploit:~
docker ps

다음이 표시되어야 합니다:

  • node1
  • node2

2. 클라이언트 컨테이너에서 셸 열기

root@kitploit:~
docker exec -it node1 bash

사용자 이름을 설정하고 스크립트를 실행합니다:

root@kitploit:~
USER="-f root" python exploit.py node2

스크립트는 다음을 수행합니다:

  • 포트 23에서 node2에 연결
  • Telnet 협상 수행
  • NEW-ENVIRON을 사용하여 USER=-f root 전송
  • 필요한 경우 프롬프트 감지로 폴백

네트워킹

  • 네트워크 이름: labnet
  • Docker 내부 DNS가 호스트 이름 해석을 허용
  • 호스트에 노출된 포트 없음
  • 통신은 컨테이너 간에만 이루어짐
호스트 이름서비스
node1클라이언트
node2Telnet 서버

구현 참고 사항

클라이언트 스크립트:

  • Telnet 제어 시퀀스 IAC, DO, WILL을 처리합니다. 이는 클라이언트와 서버 간 옵션 협상에 사용되는 기본 Telnet 프로토콜 명령입니다.
  • NEW-ENVIRON 요청에 응답
  • 다음을 전송:
root@kitploit:~
USER=<$USER 값>
  • 폴백 방식으로 login: 또는 username: 프롬프트 감지

중지 및 정리

환경 중지:

root@kitploit:~
docker compose down

컨테이너와 이미지도 제거하려면:

root@kitploit:~
docker compose down --rmi all

보안 공지

Telnet은 데이터를 평문으로 전송하므로 안전하지 않습니다. 이 프로젝트는 격리된 환경 내에서 교육 목적으로만 사용됩니다.


문제 해결

연결 거부

  • 컨테이너가 실행 중인지 확인:

    root@kitploit:~
    docker ps
    

USER 오류로 스크립트 종료

  • 환경 변수가 설정되어 있는지 확인:
root@kitploit:~
USER="-f root" python exploit.py node2

변경 후 재빌드

root@kitploit:~
docker compose up --build

라이선스

이 저장소는 교육 및 연구용으로 제공됩니다. 기여와 개선을 환영합니다.

도구 다운로드