본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 10-2. 민감한 데이터 노출 [HTML5 웹 저장소 - Secret]

by Robert8478 2023. 12. 14.

HTML5는 웹 저장소를 사용해서 쿠키를 대체한다. 서버와 통신 시 매번 쿠키를 전송하지 않기 때문에 네트워크에서 안전하지만 클라이언트에서 정보 수정이 가능해서 XSS 공격에 취약하다. XSS 공격을 사용해서 HTML5 웹 저장소에 있는 내용이 노출될 수 있다.

[난이도 하]

이번 페이지에서는 HTML5에 저장된 정보를 XSS로 확인해 보라고 한다. XSS-GET 페이지로 가야 XSS를 시도할 수 있을 것이다.

페이지로 이동 후 First name 변수에 HTML5 웹 저장소의 내용을 출력하는 스크립트를 입력한다. 로컬 저장소를 호출하여 존재하는 모든 키와 키값을 경고창으로 출력하는 내용이다. Last name 변수에도 아무 글자나 넣어주어 형식 오류가 나지 않도록 하자.

<script>
try{
 var result = "";
 for(var key in localStorage){
  result += key + "=" + localStorage.getItem(key) + ";";
 }
 alert(result);
}
catch(error){
 alert(error.message);
}
</script>

그 결과 HTML5 웹 저장소에 저장된 비밀번호 힌트와 아이디를 출력한다. 값이 있는 부분은 로컬저장소에 저장된 값인 secret 과 login이다.
나머지 키값들은 비어있는 것을 볼 수 있다. 이번에는 저장소 내용의 키값들을 웹페이지에 출력하는 DOM 기반 함수 document.write를 쓰자.

[firstname 변수값]
<script>
for(var key in localStorage)
 {document.write('<br><b>' + key + '</b> : ' + localStorage[key])};
</script>

그 결과 HTML5 웹 저장소 내용들이 페이지에 출력된 것을 볼 수 있다.

[난이도 중,상]

문제 페이지에서 난이도를 중이나 상으로 변경 후 다시 XSS-GET 페이지로 돌아와 low로 난이도 변경후 다시 스크립트 코드를 넣어보았다. 그랬더니 secret에 SHA-1 해시값이 반환된 것을 볼 수 있다. 
만약 low로 바꾸지 않는다면 난이도 상에서는 로컬 저장소 사용 여부를 알수 있는 변수나 XSS 취약점 제공 페이지가 없으므로 취약점 여부 판단이 어렵다. 만약 아예 로컬 저장소를 사용하지 않으면 웹 저장소에서 출력할 정보가 없기 때문에 취약점이 존재하지 않을 수 있다.