서버 측 웹 공격

서버 측 웹 공격. SSRF, XXE, JWT 조작을 포함한 고급 서버 측 취약점을 다룹니다. 취약점을 연쇄적으로 활용하여 민감한 파일을 읽고 관리자 토큰을 위조하는 방법을 학습하세요.

Cybersecurity Engineer사이버 보안

💡 이 튜토리얼은 영어로 번역되었습니다. 원본을 보려면 영어로 전환

소개

서버 측 기능이 사용자 제공 URL 을 가져오거나 XML 엔터티를 해석하거나 신뢰할 수 있는 검증 없이 JWT 필드를 믿으면 공격 경로가 될 수 있습니다. 이 과정에서는 의도적으로 취약한 서비스를 상대로 터미널 실습을 진행하며 SSRF, XXE, JWT 조작을 학습합니다.

각 서버 동작을 식별한 뒤 내부 서비스 접근, 로컬 파일 읽기, 토큰 클레임 변경, 서명 비밀 획득으로 이어지는 영향을 확인합니다. 마지막 챌린지에서는 XXE 파일 노출과 유효한 HS256 관리자 토큰 생성을 연결해 보호된 API 에 접근합니다.

학습 내용

  • URL 가져오기 매개변수를 찾고 서버가 외부 요청을 수행하는지 확인합니다.
  • 대체 IP 표기로 문자열 기반 localhost 필터를 우회하고 내부 관리자 서비스에 접근합니다.
  • SSRF 를 통해 모의 클라우드 메타데이터 서비스를 조회하고 실습용 자격 증명 데이터를 확인합니다.
  • XML 파싱과 엔터티 확장을 확인한 뒤 /etc/passwd를 읽는 외부 엔터티를 작성합니다.
  • JWT 를 추출해 세 부분으로 나누고 Base64Url 헤더와 페이로드 클레임을 디코딩합니다.
  • none 알고리즘을 잘못 허용하는 실습 API 를 상대로 서명 없는 관리자 토큰을 위조합니다.
  • XXE 로 애플리케이션 비밀을 노출하고 Python HS256 서명을 생성해 보호된 플래그에 접근합니다.

추천 대상

기본 요청을 구성할 수 있고 서버 측 구성 요소 내부의 신뢰 경계를 학습하려는 웹 보안 학습자를 위한 중급 과정입니다. 예비 모의 해킹 전문가, API 보안 학습자, 안전하지 않은 URL 가져오기, XML 파서 설정, JWT 검증의 실제 사례가 필요한 개발자에게 적합합니다.

선수 지식: Linux 터미널과 curl, HTTP 메서드 및 헤더, 기본 XML 및 JSON 구문, 셸 텍스트 처리와 Base64 개념에 익숙하고 짧은 Python 스크립트를 읽을 수 있어야 합니다.

학습 환경: 로컬 5000, 8080 포트의 취약 애플리케이션, 169.254.169.254:8000의 모의 메타데이터 서비스, Python jwt 라이브러리가 준비된 Ubuntu 22.04 터미널입니다. 첫 SSRF 확인은 로컬 앱이 example.com을 가져오게 하며 이후 대상은 실습용 서비스입니다.

자주 묻는 질문

클라우드 메타데이터 자격 증명이 실제 정보인가요?

아니요. 메타데이터 엔드포인트와 IAM 형태 응답은 실습 8000 포트에서 동작하는 시뮬레이션입니다. 실제 클라우드 계정 없이 요청 경로와 잠재적 영향을 보여줍니다.

XXE 실습에서 Burp Suite 같은 그래픽 프록시를 사용하나요?

아니요. 터미널에서 XML 페이로드 파일을 만들고 편집한 뒤 curl로 전송합니다. 그래픽 도구 없이 요청 구조와 파서 동작을 학습합니다.

JWT 디코딩은 암호화를 깨는 것과 같은가요?

아니요. JWT 헤더와 페이로드는 Base64Url 로 인코딩되어 보통 읽을 수 있으며 이 실습에서는 암호화되지 않습니다. 보안은 올바른 서명 검증과 서명 비밀 보호에 달려 있습니다.

두 JWT 공격은 어떻게 다른가요?

가이드 실습은 alg: none을 잘못 허용하는 서버를 이용하므로 위조 토큰에 서명이 없습니다. 마지막 챌린지의 서버는 HS256 을 올바르게 요구하므로 먼저 XXE 로 비밀을 노출한 뒤 실제 서명된 관리자 토큰을 생성합니다.

강사

labby
Labby
Labby is the LabEx teacher.