본문 바로가기

분류 전체보기

(304)
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-Day ] (CSRF) vulnerability on API endpoint allows account takeovers 본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.  -분석 레포트-https://hackerone.com/reports/419891 Summary xxx.org의 /signup/email API 엔드 포인트는 CSRF 공격에 취약하여 확인되지 않은 이메일 주소와 연결된 계정의 탈취를 허용한다.  Description 취약한 엔드포인트를 사용하면 인증된 사용자가 아직 현재 주소를 확인하지 않은 경우 자신의 계정과 연결된 이메일 주소를 변경할 수 있다. 그러나 사용자가 의도적으로 요청을 수행했는지 (ex. HTTP 헤더 값 확인 및 CSRF 방지 토큰 사용)를 충분히 검증하지 못한다.  해당 보고서에 사용된 PoC는 아래와 같다.   ..
JavaScript 객체 및 prototype ( 2 ) 참조 : https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes JavaScript는 흔히 프로토타입 기반 언어라 불린다. 모든 객체들이 메소드와 속성들을 상속받기 위한 템플릿으로써 프로토 타입 객체 (prototype object)를 가진다는 의미이다. 프로토타입 객체도 또 다시 상위 프로토 타입 객체로부터 메소드와 속성을 상속받을 수도 있고 그 상위 프로토타입 객체도 마찬가지다. 이를 프로토타입 체인(prototype chain) 이라 부르며 다른 객체에 정의된 메소드와 속성을 한 객체에서 사용할 수 있도록 하는 근간이다.  정확히 말하자면 상속되는 속성과 메소드들은 각 객체가 아니라 객체의 생성자의 protot..
JavaScript 객체 및 prototype ( 1 ) prototype pollution을 공부하기 위해 JavaScript의 객체와 프로토 타입이 무엇인지 먼저 알아보도록 한다. 참조: https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Basics   JavaScript 객체  객체는 관련된 데이터와 함수( 객체 안에 있을 때는 프로퍼티와 메소드라 호칭)의 집합이다. 객체를 생성해 볼 것인데, 다른 요소들과 마찬가지로 변수를 정의하고, 초기화하는 것으로 시작한다.  [object Object]Object { }{ } person 객체는 빈 객체임을 console창에서 확인할 수 있다. 아래와 같이 객체를 업데이트 해본다.  const person = { name: ["Bob", "Smith"..