[난이도-low]

Quest. 다음 화면과 같이 경고창을 띄워봅시다.

  경고창을 띄우기 위해 script태그를 이용하여 success라는 문구를 띄울 수 있도록 <script>alert("success")</script>라고 작성해주었다.

<입력>

<script>alert("success")</script>

그랬더니 이와같이 경고창이 떴다.

 

 

Quest. 사용자의 쿠키 값을 경고창에 띄워봅시다.

Hint1. 사용자의 쿠키값은 document.cookie에 저장되어 있습니다.

지난주 실습처럼 script태그 내에 document.cookie를 입력해주었다.

 

<입력>

<script>alert(document.cookie)</script>

 

위와 같이 입력해 주었더니 아까 떴던 success 경고창이 먼저 뜬 후에 쿠키값이 경고창에 뜬 것을 확인할 수 있었다. 

 

 

Quest. (게시판에 등록된 내용을 삭제하지 않았다면) XSS 공격을 시도할 때마다 경고창이 여러 개가 뜨는 것을 확인했습니다. 왜 그럴까요? 이유를 작성해주세요.

Hint1. Stored XSS 방식에 대해 잘 생각해봅시다.
Hint2. 소스코드를 확인해봅시다. 테이블에 어떻게 저장되어 있나요?
Reflected 방식 Stored 방식
- URL, URL파라미터, Cookie 파라미터 등 사용자가 입력한 내용에 대해서 응답 페이지에 실행되는 취약점 - 공격자가 게시판등과 같은 부분에 악의적으로 스크립트를 삽입하고 저장하여 다른 사용자가 해당 게시글을 보거나, 리스트 확인시 악의적으로 삽입한 스크립트가 실행되는 취약점

  소스코드를 확인해보았더니 위에서 작성한 명령어들이 누적되어 저장되고 있었다. 그렇기 때문에 이전에 작성했던 경고창이 모두 나타나는 것이다.

 

[난이도-high]

Quest. 공격할 수 없습니다. 이유를 적어주세요.

Hint1. 특수 문자를 막는 함수가 있는 것 같습니다.
Hint2. xss_stored_1.php에서 확인할 수 있습니다.

  난이도 high는 low단계와 달리 태그들이 적용되어 출력되는 것이 아닌 문자열 그대로 출력되어 나오는 것을 확인할 수 있었다.

 

이 페이지에 소스코드를 통해 security_level이 2라는 점과 xss_stored_1.php파일을 이용한다는 점을 알 수 있었다.

그래서 해당 파일의 내용을 확인해보기로 하였다.

 

  먼저 security_level이 2이기 때문에 위 함수를 확인하여 문제점을 찾기로 하였다. 여기서는 sqli_check_3함수를 사용하였다. 하지만 이는 case 0, 1, 2 모두 사용되는 함수이기 때문에 이 함수로 인해 문제점이 나타나지는 않았을 것이라고 생각하였다.

 

그래서 다른 함수를 찾아보던 도중 아래와 같은 함수를 찾게되었다.

위 사진을 통해 security_level 2에서는 xss_check_3 함수를 이용하는 것을 확인할 수 있었다.

 

functions_external.php 파일에서 위 함수를 찾을 수 있었다. 

이 함수에서는 htmlspecialchars가 사용되기 때문에 공격이 불가하다.

+ Recent posts