본문 바로가기

전체 글

(302)
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의 숫자 키만 할당할 수 있다는 점에서 매우 제한적으로 제어할 수 있다. ..
Lab : Client-side prototype pollution in third-party libraries Write Up 해당 Lab은 타사 라이브러리 가젯 때문에 DOM XSS가 발생하는 경우이다. 문제를 풀기 위해 수동으로도 점검이 가능하지만, 시간이 매우 오래 걸릴 수 있으므로 DOM Invader 사용을 권고한다.  위 그림 1과 같이 DOM Invader 설정을 on 하고, Prototype Pollution에 대한 Attack Type을 설정해줘야 한다.   DOM Invader가 url fragment string의 hash 속성에서 prototype pollution 공격 vector 2가지를 식별했음을 확인할 수 있다. Scan for gadget을 Click 하여 스캔을 실시한다.      DOM Invader가 hitCallback 가젯을 통한 setTimeout() sink 접근에 성공..
Lab : Client-side prototype pollution via flawed sanitization Write Up DOM을 통해 페이지를 구성하고 있고, prototype pollution을 이용해 xss를 유발 시킬 수 있다.   DOM을 통해 페이지를 구성하니, js 코드를 살펴보도록 한다. obj 객체를 반환하는 코드가 존재하며, 위 그림 1과 같이 객체의 key를 위생처리하는 js 코드또한 존재한다. 하지만 위의 url 쿼리와 같이 위생처리를 우회하여, prototype pollution을 확인할 수 있다.   config 객체에 정의되는 transport_url 속성이 prototype pollution이 유발될 수 있는 가젯(포인트)이 될 것이고, 위 그림 2와 같이 exploit해준다.    prototype pollution 공격 vector?__proto__.foo=bar?___pro..