이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
A3 - XSS - Reflected (Eval)
eval함수는 JavaScript의 내장 함수이며 JavaScript 표현식, 변수, 명령문을 JavaScript 코드로 실행하는 함수입니다.
난이도 하
xss_eval.php 페이지를 살펴보면 현재 컴퓨터의 날짜와 시간이 표시되는 것을 확인할 수 있습니다. 취약점을 찾기 위하여 페이지를 살펴보도록 하겠습니다.
페이지를 확인해 보면 URL에 Date() 함수의 결과를 출력하는 date 변수가 있는 것을 알 수 있습니다.
소스코드를 보면 스크립트 안에서 eval 함수를 호출하여 현재 날짜와 시간을 출력하는 것을 알수 있습니다.
- document.write() : 괄호 안에 들어가 있는 것을 페이지에 출력하는 함수입니다.
- Date() : 현재 날짜와 시간을 반환하는 자바스크립트 내장 함수
date변수는 eval 함수 안에 있는 값을 출력하므로 XSS 공격을 위하여 date 변수에 값을 전달해 보도록 하겠습니다.
date=alert(document.cookie) 값을 입력하면 쿠키값이 경고창으로 뜨는 것을 확인할 수 있습니다.
스크립트 코드를 입력 후 소스코드를 확인해 보면 입력한 값이 소스코드에 표시되는 것을 알 수 있습니다.
document.wire() 함수를 사용하여 괄호 안에 들어가 있는 코드를 페이지에 출력하였습니다.
)");document.location.href='https://securitycode.tistory.com'//
document.loaction.href 함수를 통하여 페이지를 이동시키는 값을 넣었습니다.
공격 구문 앞에 )"); 기호를 먼저 삽입하여 ever() 함수를 닫아 준후 스크립트 코드를 입력하였습니다. 마지막에는 주석 처리(//)를 하여 오류를 방지하였습니다. (끝에 eval 함수를 닫기 위한 문자가 오기 때문입니다)
난이도 중
난이도 중에서는 xss_check_3() 함수 내부에 있는 htmlspecialchars() 함수를 사용하여 필터링해주고 있습니다.
- htmlspecialchars() 함수 : '&', 작은따옴표('), 큰따옴표("), '<', '>'를 필터링해주는 함수이다.
난이도 중에서는 htmlspecialchars() 함수에 의해 입력 값이 필터링되고 있는데, document.cookie 값만 입력하면 필터링이 되는 문자가 없기 때문에 공격이 성공할 수 있습니다.
난이도 중에서 테스트를 해보실 때 페이지 소스코드도 같이 확인하면서 변환되는 값을 확인해 보시기를 추천드립니다.
난이도 상
난이도 상에서는 무조건 date 변수에 들어있는 함수가 Date가 아닐 경우 경고 메시지를 출력함으로써 XSS를 방지 하고 있습니다.
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) A3 XSS - Reflected (Login Form) (0) | 2022.08.02 |
---|---|
비박스(bWAPP) A3 XSS - Reflected (HREF) (0) | 2022.07.29 |
비박스(bWAPP) A3 XSS - Reflected (Custom Header) (0) | 2022.07.28 |
비박스(bWAPP) A3 XSS - Reflected (Back Button) (0) | 2022.07.27 |
비박스(bWAPP) A3 XSS - Reflected (AJAX/XML) (0) | 2022.07.25 |