이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
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 페이지는 JSON 객체를 선언하는 자바스크립트 코드를 사용하여 검색한 영화 정보를 출력해 줍니다. 페이지를 확인해 보면 영화를 검색할 수 있는 검색란과 그아래 HINT에는 마블 영화를 좋아한다는 문구를 확인할 수 있습니다. 그럼 검색란에 값을 입력해 보도록 하겠습니다.
Spider Man 값을 입력하였더니 검색 결과가 없다는 메시지를 확인할수 있으며, URL 부분을 확인해 보면 변수가 노출되는 것을 알 수 있고 GET 메서드를 사용하여 HTTP 요청을 한다는 것을 추측할 수 있습니다. 여기서 사용하는 변수는 title과 action이며 검색어를 입력받는 변수는 title이라는 것을 알 수 있습니다.
페이지의 소스코드를 확인해 보면 스크립트를 통하여 검색에 대한 응답을 받는것을 알 수 있으므로, 자바 스크립트 코드를 통하여 XSS를 시도해 보도록 하겠습니다.
</script><script>alert("XSS TEST")</script>
</script>를 먼저 입력하여 기존 스크립트 코드를 실행하지 않게 막고 새로운 스크립트 코드를 삽입하여 줍니다.
스크립트 코드를 입력후 페이지 소스코드를 확인해 보면 response 부분에 새로운 스크립트가 삽입이 된 것을 확인할 수 있습니다. 그리고 스크립트 태그를 강제로 닫아 주었기 때문에 삽입되는 부분 이후는 텍스트로 출력이 됩니다.
난이도 중/상
난이도 중부터는 스크립트 코드를 입력하면 스크립트 코드가 그대로 출력되는 것을 확인할 수 있습니다.
xss_json.php 페이지를 확인하면 난이도 하에서는 GET 방식으로 title 값을 그대로 사용하고 있지만, 난이도 중/상에서는 xss_check_3 함수를 사용하여 입력 데이터를 우회하는 것을 알 수 있습니다.
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) A3 XSS - Reflected (AJAX/XML) (0) | 2022.07.25 |
---|---|
비박스(bWAPP) A3 XSS - Reflected (AJAX/JSON) (0) | 2022.07.22 |
비박스(bWAPP) A3 XSS - Reflected (POST) (0) | 2022.07.20 |
비박스(bWAPP) A3 XSS - Reflected (GET) (0) | 2022.07.11 |
비박스(bWAPP) A3 Cross-Site Scripting(XSS) (0) | 2022.07.08 |