
의도적으로 취약하게 설계된 클라이언트-서버 애플리케이션으로, 비HTTP 기반 두꺼운 클라이언트의 침투 테스트를 학습하기 위한 도구입니다. SQL 인젝션, 원격 코드 실행(RCE), XML 공격, 버퍼 오버리드, 접근 제어 취약점 관련 챌린지를 포함합니다.
취약한 클라이언트-서버 애플리케이션 (VuCSA)은 HTTP가 아닌 클라이언트-서버 애플리케이션에 대한 침투 테스트를 학습/발표하기 위해 만들어졌습니다. Java(JavaFX 그래픽 사용자 인터페이스 사용)로 작성되었습니다.
현재, 이 취약한 애플리케이션은 다음과 같은 도전 과제를 포함합니다:
이러한 도전 과제를 해결하는 방법을 알고 싶다면 PETEP 웹사이트를 확인하세요. 해당 사이트에서는 오픈 소스 도구 PETEP를 사용하여 이를 악용하는 방법을 설명합니다.
팁 1: 해킹을 시작하기 전에 아래 메시지 데이터 구조를 확인하는 것을 잊지 마세요. 네트워크 트래픽을 수정할 때, 특히 페이로드 길이 바이트를 고려해야 할 가능성이 높습니다.
팁 2: 대부분의 도전 과제는 네트워크 트래픽 수정을 통해 악용될 수 있습니다. 따라서 테스트를 위해 TCP 프록시나 프로세스 후크를 사용하는 것이 좋습니다.
팁 3: 일부 도전 과제에는 입력 검증 및 제한이 적용되어 있으며, 이는 두꺼운 클라이언트에서 흔히 있지만, 서버가 동일한 검증을 사용한다는 의미는 아닙니다.
이 도전 과제에서는 클라이언트와 서버 사이의 네트워크 트래픽을 조작하여 버퍼 오버리드를 유발하는 것이 목표입니다.
명령 실행 도전 과제는 매우 간단한 명령 실행 취약점을 나타냅니다. 서버에서 악성 명령을 실행하는 것이 목표입니다.
SQL 인젝션 도전 과제에는 SQL 인젝션에 취약한 검색 입력이 포함되어 있지만, 곧 알게 되겠지만, 입력란에 필요한 문자를 입력할 수 없습니다.
열거 도전 과제는 열거로부터 보호되지 않는 시뮬레이션된 로그인 양식을 기반으로 합니다. 5명의 사용자를 모두 찾고 그들의 비밀번호를 추측할 수 있습니까?
이 도전 과제에서는 여러 XML 취약점을 찾을 수 있습니다:
수평적 접근 제어 도전 과제는 사용자가 자신의 문서를 보고 내용을 읽을 수 있는 문서 리더를 나타냅니다. 목표는 다른 사용자의 문서 5개를 찾는 것입니다.
수직적 접근 제어 도전 과제는 기본 사용자 정보를 보여주는 시뮬레이션된 사용자 패널을 기반으로 합니다. 목표는 숨겨진 관리자 기능을 찾고 Guest 사용자로 사용할 수 있는지 확인하는 것입니다.
RCE 역직렬화 취약점은 네트워크를 통한 데이터 전송을 위해 Java 역직렬화/직렬화를 사용합니다. 애플리케이션에는 취약한 Java 역직렬화를 통해 원격 코드 실행을 달성할 수 있는 두 가지 경로가 포함되어 있습니다.
두 경로는 서버의 JAR 파일을 검사하거나 소스 코드를 살펴보면 찾을 수 있습니다.
목표는 두 경로에 대한 익스플로잇을 만들고 서버에서 악성 명령을 실행하는 것입니다.
팁: 익스플로잇 생성을 더 쉽게 하기 위해 서버 JAR을 라이브러리로 사용할 수 있습니다.
VuCSA를 실행하려면 Java 11 이상이 필요합니다.
참고: ARM64 아키텍처(M1, M2 칩) Mac의 경우 Java 17용 특별 빌드를 사용하세요.
취약한 서버와 클라이언트를 실행하려면 GitHub의 릴리스 중 하나를 사용하거나 gradle assemble을 실행하여 배포 패키지(Windows 및 Unix용)를 생성할 수 있습니다. 이 패키지에는 sh/bat 스크립트가 포함되어 있으며 JVM을 사용하여 서버와 클라이언트를 실행합니다:
# Linux / Mac
chmod +x client.sh server.sh
./client.sh
./server.sh
# Windows
client.bat
server.bat
참고: 이 실행 스크립트에는 Java 실행 파일 경로 등 유용한 변수가 포함되어 있습니다. Java가 PATH에 없거나 여러 Java 버전을 사용하는 경우 변경이 필요할 수 있습니다.
서버 구성은 존재하지 않으면 자동으로 생성되며,
이후 서버가 실행되는 동일한 디렉터리의 server.json에서 로드됩니다:
{
"network": {
"serverHost": "0.0.0.0",
"serverPort": 8765
}
}
클라이언트 구성은 실행 중인 애플리케이션에서 지정할 수 있습니다.
프로젝트는 세 가지 모듈로 나뉩니다:
서버와 클라이언트 사이에 전송되는 메시지는 다음과 같은 간단한 형식을 가집니다:
[type][target][length][payload]
32b 32b 32b ???
이 네 부분은 다음과 같은 의미를 가집니다:
사용자 정의 페이로드를 전송하려면 페이로드 길이를 업데이트해야 할 수 있습니다. 그렇지 않으면 제대로 작동하지 않습니다. 튜토리얼에서는 페이로드 길이 바이트를 자동으로 수정하는 자동 스크립트가 개발되어 있습니다.
취약한 클라이언트-서버 애플리케이션 (VuCSA)에는 여러 가지 취약점이 포함되어 있으며, 다양한 방식으로 악용될 수 있습니다. 이러한 취약점을 악용하기 위한 공식 가이드는 오픈 소스 PEnetration TEsting Proxy를 사용합니다 (자세한 내용은 PETEP 방법론 참조).
PETEP 방법론에서는 유용한 페이로드를 포함하여 도전 과제를 악용하는 전체 과정이 설명되어 있습니다.