본문 바로가기

분류 전체보기

(304)
Prototype pollution 대응 방안 해당 포스팅은 학습목적이며, PortSwigger의 web-security 를 기반으로 작성되었습니다. ▶https://portswigger.net/web-security/prototype-pollution/preventing  Preventing prototype pollution vulnerabilities exploit 가능한 가젯과 결합되어 있는지 여부에 관계 없이 웹 사이트에서 발견된 프로토타입 오염 취약점은 모두 패치를 적용하는 것이 좋다. 취약점을 놓치지 않았다고 확신하더라도 향후 코드나 사용하는 라이브러리의 업데이트가 새로운 가젯을 도입하여 실행 가능한 익스플로잇의 가능성을 주지 않을 것이라는 보장은 없다. ( 그동안 prototype pollution Lab을 통해 학습한 기법에 대한 조..
Server-side prototype pollution 지난번까지는 Client-side prototype pollution에 대해 학습을 진행했었다. 이번에는 Server-side prototype pollution에 대해 학습해 보도록 한다.  먼저, 해당 포스팅은 아래 포트스위거의 web-security를 기반으로 진행된다.▶ https://portswigger.net/web-security/prototype-pollution/server-side JavaScript는 원래 브라우저에서 실행되도록 설계된 클라이언트 측 언어였지만, Node.js 와 같은 서버 측 런타임의 출현으로 인해 이제 JavScript는 서버,API 및 기타 백엔드 애플리케이션을 구축하는데 널리 사용된다. 논리적으로 이는 프로토타입 오염 취약성이 서버 측 컨텍스트에서 발생될 수도 ..
Lab : Remote code execution via server-side prototype pollution Write Up burp suite의 server side prototype pollution scanner를 사용해보았다. 그 결과는 아래와 같다.   위 메시지를 읽어보면, JSON Body에  prototype pollution source가 존재함을 알 수 있다. status override, json spaces를 이용해 prototype pollution 악용이 가능함을 확인한다.   위 그림 2와 같은 속성 추가를 통해 RCE가 가능함을 확인하도록 한다. 위 curl 뒤의 주소는 본인의 웹 주소를 하면 되나, 현재 Lab에서는 방화벽이 이를 막아 Burp Collaborator만을 사용해야 한다.  일반적으로 env 속성은 환경 변수를 저장하는데 사용된다. 위에서는 env 객체에 happy라..
Lab : Bypassing flawed input filters for server-side prototype pollution Write Up 취약한 엔드포인트는 아래와 같다. /my-account/change-address  __proto__ :{"foo":"bar"} 위와 같은 __proto__ 속성을 이용한 prototype pollution은 성공하지 못했다. 그래서 반응이 없는 경우도 있으니, 이전에 배운 반응이 없을 경우의 prototype pollution을 시도했으나 이 또한 실패하였다.  그래서 __proto__ 속성에 대한 filtering이 있을 것이라 생각하였고, 아래와 같은 Bypass들을 시도하였다.   위 그림 1과 같이 __proto__ 에 대한 난독화를 실시하여, Bypass를 시도해보았으나, 실패하였다.   constrcutor를 이용하여, __proto__ 속성을 사용하지 않고, prototyp..
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과 같이 city property에 대한 값으로 UTF-7 인코딩 한 foo 를 대입해 request 하면, 응답으로 해당 인코딩 된 값이 그대로 반환된다. ( 응답에 foo: bar property가 보이는데, __proto__ 속성을 사용하지 않고 주입했더니 지속적으로 응답 ..
Lab : Privilege escalation via server-side prototype pollution Write Up 취약한 엔드포인트는 아래와 같다. /my-account/change-address  위 엔드 포인트로 요청 시 그림 1과 같이 필드의 데이터가 JSON으로 서버에 전송되어진다. 그리고 서버는 사용자를 나타내는 JSON 개체로 응답한다. prototype pollution에 대한 source를 식별하기위해서 임의 속성이 있는 객체를 __proto__를 통해 추가하였고, 응답으로 삽입된 임의 객체 속성이 프로토 타입 체인을 통해 상속되었음을 알 수 있다.  위 응답을 봤을 때, isAdmin 속성의 값을 변경시켜야 겠다는 추측을 할 수 있다.   위 그림 2와 같이 isAdmin에 대한 속성 값을 true로 변경하여, 프로토 타입 체인에 상속되게 만들어 준다. 이로써 isAdmin 속성의 값..
[ 1-Day ] Stored DOM XSS via Mermaid chart 본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다. -분석 레포트-https://hackerone.com/reports/1103258  Prologue 깃랩은 사용자가 텍스트로부터 다이어그램과 순서도를 생성할 수 있도록, GFM의 일부로 Mermaid를 지원한다. 버전 xxx에서는 다이어그램에 적용된 스타일(테마)에 대한 더 많은 제어 기능을 추가하기 위해 지시어 지원이 추가되었다.  지시어를 선언하는 구문은 %%{init:{}}%% 이다. 지시어를 사용하여 fontFamily 또는 fontSize와 같은 기본 테마 속성을 그래프에 덮어쓸 수 있다. 백그라운드에서 라이브러리는 지시어에서 JSON_OBJECT를 가져와 구성 객체와 병합한다. 나중에 해당 구성은..
[ 1-Day ] Prototype pollution via console.table properties 본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다. -분석 레포트-https://hackerone.com/reports/1431042  Summary 공격자의 console.table 2 번째 속성 매개변수에 대한 제어는 prototype pollution으로 이어질 수 있다.  Description console.table 함수의 formatting logic으로 인해 사용자가 제어하는 입력을 속성 매개변수로 전달하면서 동시에 하나 이상의 속성이 있는 일반 객체를 첫 번째 매개변수로 전달하는 것은 안전하지 않다. prototype pollution은 빈 문자열에 객체 prototype의 숫자 키만 할당할 수 있다는 점에서 매우 제한적으로 제어할 수 있다. ..