Code::Security/비박스(BWAPP)

비박스(bWAPP) A3 XSS - Stored (User-Agent)

태군 코드 2022. 8. 26. 16:47
반응형

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

 

A3 - XSS - Stored (User-Agent)

 

난이도 하

xss_stored_4.php

xss_stored_4.php 페이지는 접속한 정보를 테이블 형태로 출력하고 있습니다. 테이블에는 시간, IP, User-Agent의 정보를 확인할 수 있고, download 글씨를 클릭하면 새로운 페이지에서 접속한 사용자의 정보를 표시하고 있는 것을 확인할 수 있습니다.

 

download 클릭시 연결되는 페이지

 

User-Agent 헤더에 값을 변경후 값을 확인하기 위하여 프록시 툴을 사용하여 확인해 보도록 하겠습니다.

 

User-Agent 값 변경

프록시 툴을 사용하는 방법은 앞에서도 계속 설명을 하였기 때문에 따로 설명을 하지 않도록 하겠습니다. 프록시 툴을 통하여 User-Agent 값을 "XSS TEST"로 변경 후 Forward 버튼을 눌러 주었습니다.

 

버프 스위트에서 Forward 버튼을 누른 후 페이지를 확인해 보면 User-Agent 값에 변경된 값이 저장되는 것을 확인할 수 있습니다. 그럼 여기서 테스트를 해보시는 분들은 User-Agent 값에 직접 스크립트 코드를 입력하여 테스트를 해보신 후 결과 값을 확인해 보시기 바랍니다.

 

test01 계정 로그인

스크립트 코드를 입력하셨다면 다른계정으로 XSS - Stored (User-Agent) 페이지를 접속하여 결과 값을 확인해 보시기를 추천드립니다. BEE 계정으로 스크립트 코드에 경고창 또는 쿠키값이 저장되는 스크립트 코드를 입력하셨다면 다른 계정으로 접속 시 접속한 계정에 경고창 또는 쿠키값이 표시될 것입니다. 해당 이유는 Bee 계정으로 User-Agent 헤더에 입력한 스크립크 코드가 테이블에 저장이 되었고 그로 인해 다른 계정으로 접속 시 스크립트 코드가 실행되어 동작하는 것입니다.

 

여기서 확인해야 할 부분은 접속 횟수가 세번이 지나면 스크립트가 실행되지 않는다는 점입니다. 테이블에는 최근 접속한 순서대로 3개의 정보면 출력하기 때문에 그 이상으로 지속 접속을 하게 되면 스크립트 코드가 저장된 테이블은 사라져 스크립트가 실행되지 않습니다.

 

반응형

 

난이도 중/상

xss_stored_4.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 엔티티 코드로 변환하기 때문에 스크립트 코드를 입력하여도 웹 브라우저에서는 문자로 인식하게 됩니다.

 

- htmlspecialchars() 함수 : '&', 작은따옴표('), 큰따옴표("), '<', '>'를 필터링해주는 함수입니다.

 

xss_stored_4.php 페이지 소스코드

download 버튼을 클릭하면 접속한 사용자 정보가 저장되어 있는 로그 파일(visitors.txt)을 확인할수 있는데 이는 데이터베이스에 저장되는 내용이기 때문에 소스코드에서는 sqli_check_3 함수를 사용하고 그 반환 값을 다시 xss 함수에 입력하여 SQL Injection과 XSS 공격을 동시에 방어하고 있습니다.

반응형