Chrome Cache to XSS

Reading time: 2 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

자세한 내용은 이 글에서 확인할 수 있습니다.

여기서 논의된 기술은 두 가지 주요 캐시 유형인 **back/forward cache (bfcache)**와 disk cache의 동작 및 상호작용을 이해하는 것과 관련이 있습니다. bfcache는 JavaScript 힙을 포함한 페이지의 전체 스냅샷을 저장하며, 더 포괄적인 스냅샷을 저장할 수 있는 능력 덕분에 back/forward 탐색 시 disk cache보다 우선시됩니다. 반면, disk cache는 JavaScript 힙을 포함하지 않고 웹에서 가져온 리소스를 저장하며, 통신 비용을 줄이기 위해 back/forward 탐색에 사용됩니다. disk cache의 흥미로운 점은 fetch를 사용하여 가져온 리소스를 포함한다는 것으로, 이는 접근된 URL 리소스가 캐시에서 브라우저에 의해 렌더링된다는 것을 의미합니다.

주요 사항:

  • bfcache는 back/forward 탐색에서 disk cache보다 우선합니다.
  • bfcache 대신 disk cache에 저장된 페이지를 사용하려면 후자를 비활성화해야 합니다.

bfcache 비활성화:

기본적으로 Puppeteer는 Chromium 문서에 나열된 조건에 맞춰 bfcache를 비활성화합니다. bfcache를 비활성화하는 효과적인 방법 중 하나는 window.opener에 대한 참조를 유지하는 window.open()을 사용하여 페이지를 여는 것입니다.

동작 재현:

  1. 웹페이지를 방문합니다. 예: https://example.com.
  2. open("http://spanote.seccon.games:3000/api/token")을 실행합니다. 이로 인해 서버 응답이 500 상태 코드로 반환됩니다.
  3. 새로 열린 탭에서 http://spanote.seccon.games:3000/으로 이동합니다. 이 작업은 http://spanote.seccon.games:3000/api/token의 응답을 disk cache로 캐시합니다.
  4. history.back()을 사용하여 뒤로 탐색합니다. 이 작업은 페이지에 캐시된 JSON 응답을 렌더링합니다.

disk cache가 사용되었는지 확인하려면 Google Chrome의 DevTools를 사용할 수 있습니다.

bfcache 및 disk cache에 대한 추가 세부정보는 각각 web.dev의 bfcacheChromium의 disk cache 설계 문서에서 확인할 수 있습니다.

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기