본문 바로가기

Wargame(hacking)/PortSwigger

Lab : Detecting server-side prototype pollution without polluted property reflection

Write Up

 

이전 Lab 과 동일하게, 아래 엔드포인트에서 prototye pollution을 exploit할 수 있었다. 

/my-account/change-address

 

먼저, 아래와 같이 __proto__ 속성을 통해 객체를 삽입하려 했으나, 응답이 반환되지 않았다. 

"__proto__": {
    "foo1":"bar"
}

 

그래서 Charset override 방법을 이용해 해당 Lab을 해결해나가고자 한다 .

 

그림 1

위 그림 1과 같이 city property에 대한 값으로 UTF-7 인코딩 한 foo 를 대입해 request 하면, 응답으로 해당 인코딩 된 값이 그대로 반환된다. ( 응답에 foo: bar property가 보이는데, __proto__ 속성을 사용하지 않고 주입했더니 지속적으로 응답 값으로 반환되었다. 페이지에 하드코딩되어짐.  )

 

그림 2

 

위 그림 2와 같이 content-type property로 prototype pollution을 시도한다. 만약 성공한다면 위의 city의 값으로 입력된 UTF-7 인코딩의 값이 디코딩되어 출력될 것이다. 

 

그림 3

 

위 그림 3과 같이 응답 값에 디코딩된 값을 볼 수 있다. 즉, prototype pollution이 성공적으로 시행됬음을 나타낸다. 

 

위와 같이 Charset override 외에도, Status code override 공격도 시도해볼 수 있다. 

 

그림 4

 

그림 5

 

그림 6