Hacking/Web

[PortSwigger - Lab] API testing 풀이

bamiya 2024. 1. 24. 14:01

API testing Labs 문제 풀이

 

1. Exploiting an API endpoint using documentation

 

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.

 

✔문제해석

노출된 API 문서 내용을 파악해서 carlos 계정을 삭제해라

 

풀이

Step1. wiener 계정으로 로그인 후 사용자 정보 업데이트 시도

 

Step2. /api/user/{username} endpoint 확인, /api, /api/user 경로에 접근 시도

 

Step3. API 문서 발견, 삭제 기능 파악

 

Step4. carlos 계정 삭제 성공

 

 

2. Finding and exploiting an unused API endpoint

To solve the lab, exploit a hidden API endpoint to buy a Lightweight l33t Leather Jacket. You can log in to your own account using the following credentials: wiener:peter.

 

✔문제해석

숨겨진 API 엔드포인트를 활용하여 가죽 자켓 구매하기


✔풀이

Step1. 자켓을 장바구니에 넣고 [Place order] 버튼 클릭 시 보유 금액이 부족해서 구매할 수 없음

 

Step2. 물품을 [Add to cart] 할 때 전송되는 패킷 확인, /api/products/{물품번호}/price 엔드포인트에 GET 메소드로 price를 조회함

 

Step3. OPTIONS 메소드를 전송하여 허용된 메소드 확인, PATCH로 가격 업데이트가 가능할 것이라 예상

 

Step4. PATCH 메소드로 요청 시 응답을 통해 허용 Content-Type 확인 가능

 

Step5. JSON 형식으로 요청 시 응답을 통해 price 파라미터가 필요함을 파악

 

Step6. 아래와 같이 금액을 0 으로 설정하여 PATCH 시도

 

Step7. GET 메소드를 통해 조회 시 이전 과정에서 금액 설정이 적용되었음을 확인

 

Step8. 가죽자켓을 장바구니에 담고 [Place order] 시 문제 해결

 

3. Exploiting a mass assignment vulnerability

To solve the lab, find and exploit a mass assignment vulnerability to buy a Lightweight l33t Leather Jacket. You can log in to your own account using the following credentials: wiener:peter.

 

✔문제해석

대량 할당으로 인해 숨겨진 매개변수가 있을 것 같다, 가죽 자켓 구매하기


✔풀이

Step1. 자켓을 장바구니에 넣고 [Place order] 버튼 클릭

Step2. /api/checkout 엔드포인트 발견

 

Step3. GET 메소드로 요청 시 응답에 파라미터 확인 가능, item_price 파라미터 조작하여 POST 전송 시 반응이 없어서 percentage 파라미터가 바인딩 되었을것이라 생각

 

Step4. percentage 값을 100으로 전송하여 문제 해결

 

 

 

4. Exploiting server-side parameter pollution in a query string

To solve the lab, log in as the administrator and delete carlos.

 

✔문제해석

administrator 계정으로 로그인해서 carlos 계정 삭제하기

 

✔풀이

Step1. [Forgot passwowrd?] 메뉴 접근

 

Step2. js 파일에서 수상한 부분 발견

 

Step3. administrator 계정 패스워드 찾기 시도

 

Step4. username파라미터에 administrator 입력 시 응답 값 확인

 

Step5. username파라미터에 administrator1(존재하지 않는 계정) 입력 시 응답 값 확인

 

Step6. %23을 통해 문자열 자르기 시도 시 응답 확인, Field 라는 매개변수가 존재하나?

 

Step7. Field 파라미터는 에러나서 field로 전송

 

Step8. js 파일에서 보았던 값으로 지정하면 응답에 토큰값이 출력됨

 

Step9. administrator 계정 패스워드 변경 후 로그인하여 carlos 계정 삭제!

 

 

5. Exploiting server-side parameter pollution in a REST URL

To solve the lab, log in as the administrator and delete carlos.

 

✔문제해석

administrator 계정으로 로그인해서 carlos 계정 삭제하기

 

✔풀이

Step1. [Forgot passwowrd?] 메뉴 접근

 

 

Step2. 비밀번호 업데이트하는 페이지에 접근 가능한 URL 확인

 

Step3. 경로이동 문자가 먹히는 것 확인

 

Step4. 상위 경로로 계속해서 이동

 

Step5. ../../../../ 전송 시 응답을 보아 API 맨 위쪽 경로에 도달한듯함 

 

Step6.  API 정의 파일 이름 유추(openapi.json)해서 요청 시 응답에 엔드포인트 반환됨

 

Step7.  email만 지원한다는 오류메시지 확인

 

Step8. 잘 동작하는 것으로 보임

 

Step9.  js 파일에서 확인했던 값으로 시도했더니 안됨, 현재 사용중인 api 버전에서는 안되나봄

 

Step10. /api/internal/v1/users/{username}/field/{field} 확인했던 엔드포인트로 접근하면 사용가능함

 

 

Step11. 응답에 노출된 토큰값으로 URL 직접 접근 시 administrator 계정 패스워드 변경이 가능하고 로그인 후 carlos 계정 삭제!!

 

출처 : https://portswigger.net/web-security/api-testing