Chrome Cache to XSS

Support HackTricks

더 깊이 있는 세부사항은 이 글에서 확인하세요.

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

주요 사항:

  • bfcache는 백/포워드 탐색에서 디스크 캐시보다 우선합니다.

  • bfcache 대신 디스크 캐시에 저장된 페이지를 사용하려면 후자를 비활성화해야 합니다.

bfcache 비활성화:

기본적으로 Puppeteer는 Chromium 문서에 나열된 조건에 맞춰 bfcache를 비활성화합니다. bfcache를 비활성화하는 효과적인 방법 중 하나는 RelatedActiveContentsExist를 사용하는 것으로, 이는 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의 응답을 디스크 캐시로 저장합니다.

  4. history.back()을 사용하여 뒤로 탐색합니다. 이 작업은 페이지에 캐시된 JSON 응답을 렌더링합니다.

디스크 캐시가 사용되었는지 확인하려면 Google Chrome의 DevTools를 사용할 수 있습니다.

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

Support HackTricks

Last updated