본문 바로가기

Wargame(hacking)/PortSwigger

Lab : Privilege escalation via server-side prototype pollution

Write Up

 

취약한 엔드포인트는 아래와 같다. 

/my-account/change-address

 

그림 1

 

위 엔드 포인트로 요청 시 그림 1과 같이 필드의 데이터가 JSON으로 서버에 전송되어진다. 그리고 서버는 사용자를 나타내는 JSON 개체로 응답한다. prototype pollution에 대한 source를 식별하기위해서 임의 속성이 있는 객체를 __proto__를 통해 추가하였고, 응답으로 삽입된 임의 객체 속성이 프로토 타입 체인을 통해 상속되었음을 알 수 있다. 

 

위 응답을 봤을 때, isAdmin 속성의 값을 변경시켜야 겠다는 추측을 할 수 있다. 

 

그림 2

 

위 그림 2와 같이 isAdmin에 대한 속성 값을 true로 변경하여, 프로토 타입 체인에 상속되게 만들어 준다. 이로써 isAdmin 속성의 값이 true로 변경(상속) 되었다. 

 

그림 3

 

carlos를 delete 해, 해당 Lab을 해결해보도록 한다. 

 

 

참고

https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/JSON

 

JSON으로 작업하기 - Web 개발 학습하기 | MDN

JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용합니다(서버에서

developer.mozilla.org