본문 바로가기

Wargame(hacking)/PortSwigger

Lab : Remote code execution via server-side prototype pollution

Write Up

 

burp suite의 server side prototype pollution scanner를 사용해보았다. 그 결과는 아래와 같다. 

 

그림 1

 

위 메시지를 읽어보면, JSON Body에  prototype pollution source가 존재함을 알 수 있다. status override, json spaces를 이용해 prototype pollution 악용이 가능함을 확인한다. 

 

그림 2

 

위 그림 2와 같은 속성 추가를 통해 RCE가 가능함을 확인하도록 한다. 위 curl 뒤의 주소는 본인의 웹 주소를 하면 되나, 현재 Lab에서는 방화벽이 이를 막아 Burp Collaborator만을 사용해야 한다. 

 

일반적으로 env 속성은 환경 변수를 저장하는데 사용된다. 위에서는 env 객체에 happy라는 새 속성을 추가하였다. happy 속성은 child_process 모듈을 로드하고 해당 모듈에서 execSync함수를 호출해 명령을 실행한다. 

 

위 패킷을 request한 뒤, /admin-job 엔드포인트로 가 프로세스 재 실행 및 DNS 통신을 확인하여 상호작용이 이뤄졌음을 확인한다. 

 

이제 exploit을 해준다. 

 

그림 3

 

위 그림 3 혹은 아래와 같은 exploit을 구상할 수 있다. 

 

"__proto__": {
    "execArgv":[
        "--eval=require('child_process').execSync('rm /home/carlos/morale.txt')"
    ]
}