[클라우드 바우처] 80% 할인된 금액으로 드림핵 엔터프라이즈를 도입해 보세요. 자세히 알아보기
pollution 경로를 모르겠습니다

portotype pollution 을 이용해서 outputFunctionName을 공격해야될것같은데 입력 어느부분에서 injection이 되는지 모르겠습니다ㅠㅠ
merge함수에서 pollution이 발생할것같아서 /raw/:filename 에서 filename에 넣어야될것같아서 이것저것 시도해보았는데 잘안되네요..
영 잘못짚은건가 싶은데 작은 힌트라도 하나 주시면 감사하겠습니다 ㅠㅠ

#web
작성자 정보
답변 1
avatar
as3617
워게임 고인물

merge 함수에서 prototype pollution이 발생하는 것이 맞습니다.

exports.merge = function(a, b) {
  for (let key in b) {
    if(check(key)){
        if (isObject(a[key]) && isObject(b[key])) {
          this.merge(a[key], b[key]);
        } else {
          a[key] = b[key];
        }
    }
  }
  return a;

a객체에 b객체를 합칠 때 발생하게 되는데

func.merge(file, JSON.parse(`{"filename":"${filename}", "State":"Not Found"}`));

함수는 위와 같이 사용하고 있습니다. JSON.parse함수를 사용하고 있기 때문에 JSON 표기법에 맞춰서 filename을 조작해보신다면 쉽게 푸실 수 있을 것 같습니다.

2021.08.09. 15:07
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기