Code::Security/비박스(BWAPP)

비박스(bWAPP) A3 XSS - Stored (Change Secret)

태군 코드 2022. 8. 22. 18:00
반응형

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

A3 - XSS - Stored (Change Secret)

 

난이도 하

xss_stored_3.php

xss_stored_3.php 페이지는 비밀번호 힌트를 새로 설정하는 기능을 제공합니다. 먼저 해당 페이지를 확인하기 전에 비밀번호 힌트를 확인할 수 있는 페이지부터 확인해 보도록 하겠습니다.

 

sqli_16.php

sqli_16.php 페이지에서 로그인을 하면 비밀번호 힌트를 표시하는 메시지를 확인할수 있습니다.

 

phpMyAdmin 페이지에서 확인

phpMyAdmin 페이지에 로그인을 한뒤 users 테이블에서도 확인이 가능합니다. 그럼 다시 xss_stored_3.php 페이지에서 비밀번호 힌트를 바꿔 보도록 하겠습니다.

 

xss_stored_3.php 힌트 변경

 

sqli_16.php 힌트 변경 메시지 확인

 

phpMyAdmin 페이지에서 변경된 내용 확인

xss_stored_3.php 페이지에서 새로운 힌트를 입력하면 sqli_16.php 페이지와 phpMyAdmin 페이지에서 각각 변경된 내용을 확인할수 있습니다. 변경되는 내용을 확인하였으니 xss_stored_3.php 페이지로 이동하여 XSS 확인을 위해 스크립트 문을 입력해보도록 하겠습니다.

 

xss_stored_3.php 스크립트 입력

<script>alert('XSS TEST')</script>

 

xss_stored_3.php 페이지의 New secret 입력창에 스크립트 구문을 입력하고 Change 버튼을 눌러 주었습니다.

 

sqli_16.php 페이지

sqli_16.php 페이지에서 로그인을 하게 되면 비밀번호 힌트를 출력하는 대신 스크립트 코드가 실행되어 경고창이 뜨는것을 확인할수 있습니다.

 

xss_stored_3.php 페이지 소스코드

xss_stored_3.php 페이지의 소스코드를 확인해 보면 숨겨진 입력 필드를 확인할수 있고 사용자의 로그인 이름을 전달 하는것을 알수 있습니다. 해당 부분을 크롬 개발자 도구를 통하여 변경해서 확인해 보도록 하겠습니다.

 

변경 전

<input type="hidden" name="login" value="bee">

 

변경 후

<input type="text" name="login" value="bee">

 

hidden 속성을 text 속성으로 변경 하였더니 숨겨져 있던 입력 창을 확인할수 있고 여기에 스크립트 코드를 입력해 보도록 하겠습니다.

 

"><img src=x onerror=alert(1)>

 

숨겨져 있던 입력창에 스크립트 구문을 입력하면 스크립트 구문을 통하여 경고창이 뜨는것을 확인할수 있습니다. 이는 입력필드에 대한 유효성 검증이 되지 않아 발생할수 있는 문제 입니다.

 

반응형

 

난이도 중/상

xss_stored_3.php 소스코드

난이도 중에서는 xss_check_4 함수를 사용하는 것을 알 수 있으며 xss_check_4 함수는 functions_external.php에 정의되어 있고 addslashes() 함수를 이용하여 입력 데이터를 우회합니다. addslashes() 함수는 데이터베이스 쿼리에서 필드 값으로 저장하기 전에 사용되는 함수입니다. 만일 문자열에 작은따옴표('), 큰따옴표("), 백 슬래시(\), NULL 문자(%00)가 포함되어 있다면, 이 문자들 앞에 백 슬래시(\)를 붙여 특수 문자가 순수한 하나의 문자로 인식되도록 해줍니다.

 

난이도 하 - 모든 스크립트 코드 실행 
난이도 중 - ', ", \, NULL 문자를 포함하지 않는 스크립트 코드 실행 

난이도 상에서는 xss_check_3 함수를 사용하는 것을 알 수 있으며 xss_check_3 함수는 functions_external.php에 정의되어 있고htmlspecialchars() 함수를 호출하여 문자열에서 특수문자를 HTML 코드 형식으로 변환합니. htmlspecialchars 함수를 살펴보면 두 번째 인자에 ENT_QUOTES를 추가하여 XSS에 사용되는 문자들을 HTML 엔티티 코드로 변환하기 때문에 스크립트 코드를 입력하여도 웹 브라우저에서는 문자로 인식하게 됩니다.

반응형