webhacking.kr 사이트의 문제들 중 제일 위에 있는 문제입니다.
문제를 클릭을 해보면 다음과 같이 Access_Denied 라는 alert가 뜨고 이전 페이지로 돌아갑니다.

Ctrl+U를 눌러 소스 코드를 확인해 보겠습니다.
<html>
<head>
<title>Challenge 15</title>
</head>
<body>
<script>
alert("Access_Denied");
location.href='/';
document.write("<a href=?getFlag>[Get Flag]</a>");
</script>
</body>
document.write 부분을 보면 ?getFlag 라는 경로에 플래그를 작성하는 것을 알 수 있습니다.
따라서 https://webhacking.kr/challenge/js-2/?getFlag 경로로 접속을 하면 문제가 해결됩니다.
여기서 alert 함수 실행 후에 개발자 도구를 이용해 Elements 탭에서 코드를 확인하려고 하면 동작하지 않습니다.
이유를 간략하게 설명하면 alert(), confirm(), prompt() 같은 브라우저 기본 대화상자가 브라우저의 메인 스레드(Main Thread)를 완전히 멈추게(Block) 만들기 때문입니다.
Elements 탭은 단순히 텍스트 코드를 보여주는 것이 아니라, 현재 브라우저가 화면에 그리고 있는 '살아있는 DOM(문서 객체 모델)'을 보여줍니다. 따라서 메인 스레드가 alert 때문에 일시 정지되면, 개발자 도구가 현재 화면의 DOM 요소를 읽어오거나 렌더링하는 작업도 같이 멈춰버리게 됩니다.
하지만 Ctrl+U(소스코드 보기)는 현재 멈춰있는 화면의 상태와 전혀 상관없이 서버로부터 처음 전달받은 순수한 원본 HTML 파일을 새로운 탭에 텍스트 형태로 띄워주는 기능입니다. 따라서 현재 실행 중인 자바스크립트나 멈춰버린 메인 스레드의 영향을 받지 않기 때문에, alert가 떠 있든 말든 언제나 코드를 확인할 수 있습니다.