API를 사용하는 애플리케이션을 분석함으로써 관련 정보를 수집할 수 있는데
API documentation 문서가 있어도 부정확할 수 있기 때문에 확인차원에서 정보수집을 하는게 좋다
Burp Scanner을 사용하면 직접 브라우저를 통해 공격할만한 지점들을 조사할 수 있음
특히 /api 처럼 URL구조에서 API 엔드포인트처럼 보이는 패턴을 잘 살펴봐야 됨
심도있는 추출을 위해서는 JS Link Finder BApp 을 쓰거나, burp 에서 js 파일을 살펴볼 수도 있다
Interacting with API endpoints
API 엔드포인트를 찾고나면, burp repeater, intruder를 사용해서 상호작용을 할 수 있다
API의 기능 뿐만 아니라 공격 지점도 알 수 있음
예를 들어서 HTTP 메서드나 미디어 타입을 변경하면서 API가 어떻게 반응하는지도 볼 수 있음
에러 메시지같은 결과물을 살펴보는 등
지원되는 HTTP 메서드와 content types
- GET: 리소스에서 데이터를 가져옴
- PATCH: 리소스에 부분적인 변경을 적용
- OPTIONS: 리소스에 사용될 수 있는 요청 메소드 타입에 대한 정보를 수집
API 엔드포인트는 특정 형식으로 데이터가 있어야 함
그리고 응답의 데이터 컨텐츠 타입에 따라서 다르게 반응할수 있다
컨텐츠 타입 content type을 변경하면
- 유용한 정보를 노출하는 에러 유도
- 결함이 있는 방어체계 통과
- 로직 에러 사용(ex. JSON 타입을 처리할땐 안전하지만 XML을 사용한 injection에는 취약)
등의 결과물을 기대할 수 있다
헤더에서 Content-Type을 변경하고 요청 내용도 바꾸면 된다
Finding and exploiting an unused API endpoint 실습
시나리오: 숨겨진 API 엔드포인트를 찾아서 Lightweight l33t Leather Jacket을 구입해야함
계정 정보는 wiener:peter
내가 찾아야하는 가죽 자켓은 첫번째에 있다
view details 클릭해서 들어가기
proxy -> HTTP history 들어가서 /api/products/3/price 파켓을 리피터에 보냄
HTTP 메서드를 GET에서 OPTIONS으로 바꾸고 요청 보내기
unauthorized 승인받지 않았다고 하니까 이제 로그인을 하고 다시 시도
로그인했음
products/1/price 파켓을 repeater에 보내서 다시 PATCH 요청을 보냈다
이번엔 json 타입의 content-type만 지원된다는 힌트를 얻었음
Content-Type: application/json
를 헤더에 추가해서 다시 요청 보내기
이번에는 본문에 가격 파라미터가 없다고 하니
{"price": 0}을 넣어보자
200 ok 성공했다!
그리고 브라우저에서도 가격이 0이라고 나온다
장바구니에 넣고 구입까지 해보겠음
가격은 계속 0달러이고 구매까지 성공!
이 실습을 통해서 알수 있는건
API에서 사용하는 content type, 필요한 파라미터 등의 정보를 하나씩 알아내서 악용할 수 있다는 것!