티스토리 뷰
xss-1 풀이
해당 문제에서는 /xss 라는 경로로 요청을 보낼 때, URL의 쿼리 파라미터로 전달된 xss 값이 별다른 검증 없이 그대로 사용자에게 반환됩니다. 이는 웹 페이지에서 사용자 입력을 검증하지 않고 그대로 출력하는 취약점, 즉 XSS(크로스 사이트 스크립팅) 공격에 노출되어 있다는 것을 의미합니다.
이러한 XSS 취약점을 이용하면 공격자가 악의적인 스크립트를 삽입하여 실행시킬 수 있습니다. 예를 들어, 공격자가 자바스크립트 코드가 포함된 URL을 전달하면, 해당 코드가 브라우저 상에서 그대로 실행될 수 있습니다.
또한, 문제의 /flag 페이지에서는 중요한 정보인 flag 값이 쿠키(cookie) 에 저장되어 있습니다. 즉, 쿠키에 담긴 정보가 유출되면 flag 값도 함께 탈취당할 수 있습니다.
문제의 구성상, 사용자가 제공한 xss 파라미터는 Selenium(웹 브라우저 자동화 도구)을 통해 다음과 같은 URL 형식으로 접근됩니다:
http://127.0.0.1:8000/xss?xss={urllib.parse.quote(url)}
여기서 url은 공격자가 의도한 악성 스크립트를 포함한 주소입니다. 이 구조를 활용하면, 공격자는 자신이 작성한 스크립트를 Selenium이 실행하게 만들 수 있습니다. 이 스크립트 안에서 쿠키에 저장된 flag 값을 읽어내고, 이를 공격자에게 전송하는 방식으로 flag를 탈취할 수 있습니다.
따라서, XSS 취약점과 Selenium의 자동 요청 구조를 모두 이용하여, 아래와 같은 Exploit 코드를 서버에 전달하면 memo 페이지에 저장된 flag 값을 공격자가 받아낼 수 있는 것입니다.
<script>
document.location.href = `/memo?memo=${document.cookie}`;
</script>
xss-2 풀이
이 문제에서는 보안을 위해 <script> 태그를 사용할 수 없도록 차단되어 있습니다. <script> 태그는 일반적으로 자바스크립트 코드를 삽입할 때 사용하는 대표적인 방법이지만, 이런 태그가 막혀 있으면 일반적인 방식으로는 XSS 공격을 수행할 수 없습니다.
하지만 자바스크립트를 실행할 수 있는 방법은 꼭 <script> 태그만 있는 것이 아닙니다. HTML에서 자바스크립트를 실행할 수 있는 다른 요소들도 있습니다. 그 중 하나가 바로 <img> 태그입니다.
<img> 태그는 원래 이미지를 보여주기 위한 태그지만, 이 태그에는 onerror라는 속성을 사용할 수 있습니다. 이 onerror 속성은 이미지 로딩에 실패했을 때 자동으로 실행되는 자바스크립트 코드를 지정할 수 있습니다.
예를 들어, 이미지 경로가 잘못되어 로딩에 실패할 경우, onerror 안에 넣은 자바스크립트 코드가 실행됩니다. 이 점을 악용하면, <script> 태그를 쓰지 않고도 자바스크립트를 실행시킬 수 있게 되는 것입니다.
그래서 우리는 <script> 태그 대신 <img onerror="자바스크립트 코드"> 형식으로 코드를 작성하여 XSS 공격을 시도할 수 있습니다. 이 방법은 필터링을 우회하면서도 자바스크립트를 실행할 수 있기 때문에, 보안상 매우 중요한 취약점입니다.
<img src="#" onerror="location.href='/memo?memo='+document.cookie">