
펜테스트 및 Bug Bounty 프로그램에서 발견된 실제 사례의 취약점을 포함한 웹 애플리케이션.
Web Hacking Playground는 통제된 웹 해킹 환경입니다. 모의 침투 테스트와 버그 바운티 프로그램에서 발견된 실제 사례의 취약점들로 구성되어 있습니다. 목표는 사용자들이 이 취약점들을 연습하고, 탐지 및 익스플로잇 방법을 배우는 것입니다.
또한 다음과 같은 관심 주제들도 다룰 것입니다: 맞춤형 페이로드를 생성하여 필터 우회, 여러 취약점을 연계한 공격 실행, 개념 증명 스크립트 개발 등이 있습니다.
애플리케이션 소스 코드는 공개되어 있습니다. 하지만 랩의 접근 방식은 블랙박스 방식입니다. 따라서 챌린지를 해결하기 위해 코드를 검토해서는 안 됩니다.
또한, 퍼징(파라미터 및 디렉토리 모두)과 무차별 대입 공격은 이 랩에서 어떤 이점도 제공하지 않는다는 점에 유의해야 합니다.
이 랩을 수행하려면 Kali Linux를 사용하는 것이 좋습니다. 가상 머신을 사용하는 경우 VMware Workstation Player 하이퍼바이저를 사용하는 것이 좋습니다.
환경은 Docker와 Docker Compose를 기반으로 하므로 둘 다 설치되어 있어야 합니다.
Kali Linux에 Docker를 설치하려면 다음 명령어를 실행하십시오:
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl enable docker --now
다른 Debian 기반 배포판에 Docker를 설치하려면 다음 명령어를 실행하십시오:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker --now
Docker Compose를 설치하려면 다음 명령어를 실행하십시오:
sudo apt install -y docker-compose
참고: M1을 사용하는 경우 이미지를 빌드하기 전에 다음 명령어를 실행하는 것이 좋습니다:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
다음 단계는 리포지토리를 클론하고 Docker 이미지를 빌드하는 것입니다:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose build
또한, 프록시 설정을 쉽게 변경할 수 있는 Foxy Proxy 브라우저 확장 프로그램과 HTTP 요청을 가로채는 데 사용할 Burp Suite를 설치하는 것이 좋습니다.
Foxy Proxy에서 Burp Suite를 프록시로 사용할 새 프로필을 생성합니다. 이렇게 하려면 Foxy Proxy 옵션으로 이동하여 다음 구성으로 프록시를 추가합니다:
필요한 모든 것이 설치되면 다음 명령어로 환경을 배포할 수 있습니다:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose up -d
이 명령은 Flask로 개발된 두 개의 애플리케이션 컨테이너를 포트 80에 생성합니다:
컨테이너의 IP를 /etc/hosts 파일에 추가하여 이름으로 접근할 수 있고 익스플로잇 서버가 취약한 웹 애플리케이션과 통신할 수 있도록 해야 합니다. 이를 위해 다음 명령어를 실행하십시오:
sudo sed -i '/whp-/d' /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-socially) whp-socially" | sudo tee -a /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-exploitserver) whp-exploitserver" | sudo tee -a /etc/hosts
이 작업이 완료되면 http://whp-socially에서 취약한 애플리케이션에, http://whp-exploitserver에서 익스플로잇 서버에 접근할 수 있습니다.
익스플로잇 서버를 사용할 때는 IP가 아닌 도메인 이름을 사용하여 위 URL을 사용해야 합니다. 이렇게 해야 컨테이너 간의 올바른 통신이 보장됩니다.
해킹 시 공격자 서버를 나타내기 위해 로컬 Docker IP를 사용해야 합니다. 랩은 Burp Collaborator, Interactsh 등과 같은 외부 서버로 요청을 보내도록 의도되지 않았기 때문입니다. Python http.server를 사용하여 웹 서버를 시뮬레이션하고 HTTP 상호작용을 수신할 수 있습니다. 이를 위해 다음 명령어를 실행하십시오:
sudo python3 -m http.server 80
환경은 각각 다른 취약점이 있는 세 단계로 나뉩니다. 다음 단계의 취약점이 이전 단계의 취약점을 기반으로 하므로 순서대로 진행하는 것이 중요합니다. 단계는 다음과 같습니다:
아래는 각 단계 취약점에 대한 스포일러입니다. 도움이 필요 없으면 이 섹션을 건너뛰어도 됩니다. 반면, 어디서부터 시작해야 할지 모르거나 올바른 방향으로 가고 있는지 확인하려면 관심 있는 섹션을 펼쳐보세요.
이 단계에서는 Cross-Site Scripting (XSS)을 통해 특정 사용자의 세션을 탈취할 수 있으며, 이를 통해 JavaScript 코드를 실행할 수 있습니다. 이를 위해서는 피해자가 사용자의 컨텍스트에서 URL에 접근할 수 있어야 하며, 이 동작은 익스플로잇 서버로 시뮬레이션할 수 있습니다.
이 단계를 해결하기 위한 힌트는 다음과 같습니다:
이 단계에서는 관리자로 접근할 수 있는 토큰을 생성할 수 있습니다. 이는 일반적인 JSON Web Token (JWT) 공격으로, 토큰 페이로드를 수정하여 권한을 상승시킬 수 있습니다.
이 단계를 해결하기 위한 힌트는 JWT가 주어지면 유효한 세션 쿠키를 반환하는 엔드포인트가 있다는 것입니다.
이 단계에서는 Server Side Template Injection (SSTI) 취약점을 통해 /flag 파일을 읽을 수 있습니다. 이를 위해서는 애플리케이션이 서버에서 Python 코드를 실행하도록 해야 합니다. 서버에서 시스템 명령어를 실행할 수 있습니다.
이 단계를 해결하기 위한 힌트는 다음과 같습니다:
취약한 기능은 이중 인증으로 보호됩니다. 따라서 SSTI를 익스플로잇하기 전에 OTP 코드 요청을 우회하는 방법을 찾아야 합니다. 애플리케이션이 동일한 서버에서 오는 요청을 신뢰하는 경우가 있으며, 이 상황에서 HTTP 헤더가 중요한 역할을 합니다.
SSTI는 블라인드(Blind)입니다. 즉, 서버에서 실행된 코드의 출력을 직접 얻을 수 없습니다. Python smtpd 모듈을 사용하면 수신한 메시지를 표준 출력으로 출력하는 SMTP 서버를 만들 수 있습니다:
sudo python3 -m smtpd -n -c DebuggingServer 0.0.0.0:25
애플리케이션은 Flask를 사용하므로 템플릿 엔진이 Jinja2임을 추론할 수 있습니다. 공식 Flask 문서에서 권장되고 널리 사용되기 때문입니다. 최종 플래그를 얻으려면 Jinja2 호환 페이로드를 가져와야 합니다.
이메일 메시지에는 문자 제한이 있습니다. 이 제한을 우회하는 방법에 대한 정보는 인터넷에서 찾을 수 있습니다.
각 단계에 대한 상세한 해결 방법은 Solutions 폴더에서 확인할 수 있습니다.
다음 리소스는 단계를 해결하는 데 도움이 될 수 있습니다:
풀 리퀘스트를 환영합니다. 버그를 발견하시면 이슈를 열어주세요.