[문제]
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 같은 민감한 메서드는 관리자 권한으로만 실행 가능하도록 제한해야 한다
'PortSwigger_API testing' 카테고리의 다른 글
| LAB:Exploiting server-side parameter pollution in a query string (0) | 2026.04.14 |
|---|