PortSwigger_API testing

Lab: Exploiting an API endpoint using documentation

unknown08 2026. 3. 8. 18:14
반응형

[문제]

To solve the lab, find the exposed API documentation and delete carlos. You can log in to your own account using the following credentials: wiener:peter.

Required knowledge

To solve this lab, you'll need to know:

  • What API documentation is.
  • How API documentation may be useful to an attacker.
  • How to discover API documentation.

These points are covered in our API Testing Academy topic.

 

[풀이과정]

이번 랩에선 API 엔드포인트 경로를 줄여가면서 노출된 API 문서를 찾고 그걸 이용하여 carlos 계정을 삭제하는 것이 목표이다

 

API 엔드포인트 줄여나가는 것:

/api/user/wiener   → wiener라는 특정 유저
/api/user          → 유저 목록 전체
/api               → API 루트 

하나씩 지워가면서 접근 가능한 엔드포인트를 찾고 숨겨진 기능을 찾는 것이 목표이다

 

가장 먼저 API 엔드포인트를 파악하기 위해 Burp Suite를 통해 사이트를 탐색하였다

기본으로 제공된 자격증명(wiener:peter)으로 로그인한 뒤 이메일을 변경하자 [PATCH /api/user/wiener] 엔드포인트가 호출되는 것을 확인할 수 있었다

 

이메일 변경:

Burp Suite 캡쳐 결과:

 

 

다음으로 Burp Suite에서 캡처된 요청을 Repeater로 전송한 뒤 경로를 하나씩 제거하며 접근 가능한 엔드포인트를 탐색했다

 

 

PATCH /api로 요청을 전송하자 302 Found 응답과 함께 /api/로 리다이렉트 된 것을 확인할 수 있다

/api 경로의 존재를 확인 하였으니 이번엔 메서드를 GET으로 변경하여 해당 경로에서 조회할 수 있는 정보가 있는지 탐색하였다

※Patch는 수정 메서드이기 때문에 GET(조회) 메서드로 바꿔줘야한다

 

요청 결과 API 문서가 그냥 노출된 것을 확인할 수 있었다

문서에는 GET, DELETE, PATCH 메서드가 명시되어 있었으며 이 중 DELETE 메서드를 이용하여 carlos 계정을 삭제하면 랩을 완료할 수 있다

 

[취약점 분석]

이번 실습에서 취약점은 크게 세 가지다

 

첫번째로 API 문서가 인증없이 노출되었다

/api/ 경로에 GET 요청을 날리는 것만으로 사용 가능한 메서드, 엔드포인트 경로, 파라미터 정보가 통째로 반환되었는데 이는 공격자에게 공격 가능한 엔드포인트 목록을 그대로 제공하는 것과 다름없다

 

두번째로 수평적 권한 상승이 가능하였다

/api/user/[username] 구조에서 서버는 요청자의 세션과 대상 username이 일치하는지 검증하지 않았다

즉 wiener 세션으로 carlos를 대상으로 요청을 날려도 그대로 처리된다

※세션 = 서버가 로그인한 사용자를 기억하기 위해 만들어두는 임시 저장공간

※검증(Authentication)은 했지만 인가(Authorization)는 안한 것

 

마지막으로 DELETE 엔드포인트에 접근 제어가 없었다

계정 삭제는 관리자 권한에서만 수행 가능해야 하지만 일반 유저 세션으로 DELETE /api/user/carlos 를 전송했을 때 아무런 권한 검증 없이 실행되었다

 

[대응 방안]

API 문서는 인증된 사용자에게만 노출되어야 하며 모든 엔드포인트에서 요청자의 권한을 검증하고 DELETE 같은 민감한 메서드는 관리자 권한으로만 실행 가능하도록 제한해야 한다

반응형