Code::Security/비박스(BWAPP)

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

태군 코드 2022. 7. 22. 14:15
반응형

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

 

A3 - XSS - Reflected (JSON)

 

JSON(JavaScript Object Notation)은 클라이언트와 서버가 통신할 때 자료를 표현하는 방법으로 특정 언어에 제한 없이 그대로 사용할 수 있는 장점이 있습니다. 또한 속성-값 쌍(attribute–value pairs), 배열 자료형(array data types) 또는 기타 모든 시리얼화 가능한 값(serializable value) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷입니다.

 

JSON 구조

1. JSON 데이터는 이름과 값의 쌍으로 이루어집니다.

"데이터 이름": 값


2. JSON 데이터는 쉼표(,)로 나열됩니다.

"name1": 50, "name2": 100 -> name1, name2는 데이터 이름, 50, 100은 값


3. 객체(object)는 중괄호({})로 둘러쌓아 표현합니다.

{"name2": 50, "name3": "값3", "name1": true}


4. 배열(array)은 대괄호([])로 둘러쌓아 표현합니다.

 

아래의 예제는 배열의 이름이 "Student"이고, 3개의 JSON 객체를 요소로 가지는 JSON 배열의 예제입니다.

"Student": [
    {"name": "A", "number": "1", "age": 7},
    {"name": "B", "number": "2", "age": 9},
    {"name": "C", "number": "3", "age": 8}
]

 

반응형

 

난이도 하 xss_json.php

xss_json.php 페이지는 JSON 객체를 선언하는 자바스크립트 코드를 사용하여 검색한 영화 정보를 출력해 줍니다. 페이지를 확인해 보면 영화를 검색할 수 있는 검색란과 그아래 HINT에는 마블 영화를 좋아한다는 문구를 확인할 수 있습니다. 그럼 검색란에 값을 입력해 보도록 하겠습니다.

 

Spider Man 입력

Spider Man 값을 입력하였더니 검색 결과가 없다는 메시지를 확인할수 있으며, URL 부분을 확인해 보면 변수가 노출되는 것을 알 수 있고 GET 메서드를 사용하여 HTTP 요청을 한다는 것을 추측할 수 있습니다. 여기서 사용하는 변수는 title과 action이며 검색어를 입력받는 변수는 title이라는 것을 알 수 있습니다.

 

마우스 오른쪽 버튼 페이지 소스보기

 

개발자 도구를 통한 소스보기

페이지의 소스코드를 확인해 보면 스크립트를 통하여 검색에 대한 응답을 받는것을 알 수 있으므로, 자바 스크립트 코드를 통하여 XSS를 시도해 보도록 하겠습니다.

 

스크립크 코드 입력

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

 

스크립트 실행 확인

</script>를 먼저 입력하여 기존 스크립트 코드를 실행하지 않게 막고 새로운 스크립트 코드를 삽입하여 줍니다. 

 

페이스 소스코드 확인

스크립트 코드를 입력후 페이지 소스코드를 확인해 보면 response 부분에 새로운 스크립트가 삽입이 된 것을 확인할 수 있습니다. 그리고 스크립트 태그를 강제로 닫아 주었기 때문에 삽입되는 부분 이후는 텍스트로 출력이 됩니다.

 

난이도 중/상

난이도 중 스크립트 코드 입력

난이도 중부터는 스크립트 코드를 입력하면 스크립트 코드가 그대로 출력되는 것을 확인할 수 있습니다.

 

xss_json.php 소스코드

xss_json.php 페이지를 확인하면 난이도 하에서는 GET 방식으로 title 값을 그대로 사용하고 있지만, 난이도 중/상에서는 xss_check_3 함수를 사용하여 입력 데이터를 우회하는 것을 알 수 있습니다.

반응형