전체 글 (295) 썸네일형 리스트형 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.. Lab : DOM XSS via an alternative prototype pollution vector Write UP 이전 Lab과 같이 Prototype Pollution의 근원지를 찾기 위해 URL 쿼리 스트링을 사용해 속성 주입을 시도했다. 지난번과는 다르게 괄호 표기법으로 접근할 수는 없었고, 점 표기법을 활용하였다. Object.prototype 명령을 통해 prototype 속성 주입에 성공함을 확인할 수 있었다. js 소스코드 상에 eval 함수가 존재하였고, 이는 XSS 취약할 수 있다. 심지어 manager.sequence는 정의되지 않았다. 이를 활용해 위 그림 2와 같이 alert(1)- 을 Prototype Pollution을 통해 주입하였고, alert()에 성공하였다. (그림 3) 디버깅 도중 manager 객체에 대한 속성을 확인해 보았다. Lab : DOM XSS via client-side prototype pollution Write Up 먼저, Prototype pollution 근원지를 수동으로 탐색해 본다. 이는 많은 시도와 에러들이 동반된다. 즉 Object.prototype 이 작동하는 근원지를 찾을 때까지 임의의 속성을 추가하는 다양한 방법을 시도해야 한다. → 쿼리 스트링, URL fragment, JSON input을 통해 임의 속성 주입을 시도해 본다. 해당 Lab에서는 쿼리 스트링을 사용해 속성 주입을 시도하였고, 성공적으로 prototype pollution 이 발생하였다. 만약, 속성이 Prototype에 추가되지 않은 경우 대괄호 표기 대신 점 표기 방식으로 전환하거나 그 반대로 전환하는 등 다양한 기술을 사용해봐야 한다. ( 해당 Lab에서는 . 표기 법으로는 prototype polluti.. [ 1-Day ] Ability to see hidden likes 본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다. -분석 레포트- https://hackerone.com/reports/2140960 summary 00 프리미엄(유료) 사용자는 자신의 프로필에서 '좋아요' 타임라인을 숨길 수 있다. 그러나 인증된 사용자는 /i/api/graphql/lVf2NuhLoYVrpN4nO7uw0Q/Likes 해당 엔드포인트에 HTTP GET 요청을 보내, userid 값 내에 대상 사용자의 sns id를 지정하여 00 프리미엄 사용자의 숨겨진 마음에 들어요를 찾을 수 있다. 예를 들어, /i/api/graphql/lVf2NuhLoYVrpN4nO7uw0Q/Likes?variables={"userId":"██████████",.. 이전 1 2 3 4 5 ··· 37 다음