Code::Security/비박스(BWAPP)

비박스(bWAPP) A3 XSS - Reflected (Eval)

태군 코드 2022. 7. 28. 17:16
반응형

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

 

A3 - XSS - Reflected (Eval)

 

eval함수는 JavaScript의 내장 함수이며 JavaScript 표현식, 변수, 명령문을 JavaScript 코드로 실행하는 함수입니다.

 

난이도 하

xss_eval.php

xss_eval.php 페이지를 살펴보면 현재 컴퓨터의 날짜와 시간이 표시되는 것을 확인할 수 있습니다. 취약점을 찾기 위하여 페이지를 살펴보도록 하겠습니다.

 

xss_eval.php 페이지 확인

페이지를 확인해 보면 URL에 Date() 함수의 결과를 출력하는 date 변수가 있는 것을 알 수 있습니다.

 

xss_eval.php 소스코드

소스코드를 보면 스크립트 안에서 eval 함수를 호출하여 현재 날짜와 시간을 출력하는 것을 알수 있습니다.

 

- document.write() : 괄호 안에 들어가 있는 것을 페이지에 출력하는 함수입니다.
- Date() : 현재 날짜와 시간을 반환하는 자바스크립트 내장 함수

 

date변수는 eval 함수 안에 있는 값을 출력하므로 XSS 공격을 위하여 date 변수에 값을 전달해 보도록 하겠습니다.

 

date변수에 스크립트 코드 입력

date=alert(document.cookie) 값을 입력하면 쿠키값이 경고창으로 뜨는 것을 확인할 수 있습니다.

 

스크립트 코드 입력후 소스코드

스크립트 코드를 입력 후 소스코드를 확인해 보면 입력한 값이 소스코드에 표시되는 것을 알 수 있습니다.

 

document.write 함수를 통한 출력

document.wire() 함수를 사용하여 괄호 안에 들어가 있는 코드를 페이지에 출력하였습니다.

 

document.location.href 함수 사용

)");document.location.href='https://securitycode.tistory.com'//

 

document.loaction.href 함수를 통하여 페이지를 이동시키는 값을 넣었습니다.

 

공격 구문 앞에 )"); 기호를 먼저 삽입하여 ever() 함수를 닫아 준후 스크립트 코드를 입력하였습니다. 마지막에는 주석 처리(//)를 하여 오류를 방지하였습니다. (끝에 eval 함수를 닫기 위한 문자가 오기 때문입니다)

 

반응형

 

난이도 중

난이도 중

난이도 중에서는 xss_check_3() 함수 내부에 있는 htmlspecialchars() 함수를 사용하여 필터링해주고 있습니다.
- htmlspecialchars() 함수 : '&', 작은따옴표('), 큰따옴표("), '<', '>'를 필터링해주는 함수이다.
난이도 중에서는 htmlspecialchars() 함수에 의해 입력 값이 필터링되고 있는데, document.cookie 값만 입력하면 필터링이 되는 문자가 없기 때문에 공격이 성공할 수 있습니다.

 

난이도 중에서 테스트를 해보실 때 페이지 소스코드도 같이 확인하면서 변환되는 값을 확인해 보시기를 추천드립니다.

 

htmlspecialchars 함수의 변환되는 문자

 

난이도 상

난이도 상

난이도 상에서는 무조건 date 변수에 들어있는 함수가 Date가 아닐 경우 경고 메시지를 출력함으로써 XSS를 방지 하고 있습니다.

반응형