Blind XSS(Cross-Site Scripting)와 보안테스팅

오늘은 Blind XSS에 대한 이야기를 잠깐 할까합니다. 보편적인 XSS와 비슷하고, 테스트 방법 또한 비슷하지만, 언제 어디서 우리에게 어떤 결과를 줄지 예측할 수 없는 그런 친구이지요.

Blind XSS?

먼저 Blind XSS에 대해 정리하고 시작하죠.

XSS에 대해 테스팅할 때 우리는 노출되는 결과, 즉 최종적으로 DOM 영역에 쓰이는 데이터를 가지고 분석을 하게 되는데요. 가끔 이런 분석 자체가 어려운 경우들이 있습니다. 대표적으로 사이트의 신고, 문의 기능 같이 공격코드가 사용자단에선 전혀 노출이 되지 않고 관리자 영역에서 발생할 수 있죠.

이런 경우를 Blind XSS라고 부릅니다. Blind SQL Injection 과 같이 눈에 보이지 않는 상태에서 XSS가 성공했는지, 실패했는지 체크하고 이를 이용한 공격을 의미합니다.

Why so serious?

XSS 영향력 자체는 워낙 잘 알려져있고 유연성 또한 높기 때문에 잘 체크해야하는 부분입니다. 이 때 Blind XSS에 사용되는 트릭들을 이용하면 우리가 볼 수 없는 영역에서 노출된 스크립트의 동작 여부를 체크해볼 수 있습니다.

즉, 공격자도 눈에 보이지 않는 여러 루트의 공격 가능성을 찾아갈 수 있는거죠.

대체로 Blind XSS는 문의하기 같은 부분으로 설명되어 있지만 잘 생각해보면 우리가 테스트하는 모든 파라미터와 헤더 등은 Blind XSS의 가능성을 가지게 됩니다. 이 데이터가 어떻게 사용되고 노출되는지 공격자는 모르지만 관리자를 대상으로 한 공격이 가능하기 떄문에 전체적으로 높은 권한의 세션을 이용할 수 있다는점, 그리고 내부망에서 악의적인 행위를 할 수 있기 때문에 우리는 가급적 이 숨겨진 XSS 영향력을 찾아내야 합니다.

How to check?

사실 Blind XSS가 가능한 부분은 너무나도 많습니다. 대표적으론 문의, 신고 기능부터 게시글, 사용자가 입력 가능한 부분은 모두 포함될 수 있습니다. 내부에서 데이터들을 어떻게 사용하고 가공하느냐에 따라 무궁무진한 것 같습니다.

일단 스크립트에 동작했는지 여부를 확인하는 코드를 넣고, 그 결과를 다른 곳에서 받아줘야 합니다.

<img src="z" onerror="document.write('<img src=http://192.168.56.1/hwul style=width:1px;height:1px');">

이런식으로 구성해볼 수 있겠네요. 이 코드가 동작하면 DOM에 <img> 태그로 새로운 GET 요청을 발생시키고 이를 통해 서버에선 코드가 실행되었단걸 확인할 수 있어집니다.

비슷한 형태로 Burpsuite의 collaborator, ZAP의 OAST, Interactsh 와 같은 OAST 서비스를 이용하여 Blind XSS를 식별할 수 있습니다.

Tools

My Plan

Blind XSS는 모든 파라미터/헤더 등에 잠재되어 있는 상태고, 언제 어디서 트리거될 수 있을지 모르기 때문에 이를 수집해주는 도구가 필요합니다. 그래서 아래 도구를 만들고 있습니다.

  • https://github.com/hahwul/hbxss

2022년 기준으로 해당 도구는 업데이트 하지 않습니다. XSSHunter 등 더 좋은 도구들이 많기 떄문이죠 :D

XSSHunter

XSS Hunter는 Blind XSS를 식별하기 위한 도구이자, 온라인 서비스로 가입 시 고유한 주소를 할당받으며, 이를 이용하여 Blind XSS 페이로드로 사용하고 이후에 트리거될 시 메일 등을 통해 알림받을 수 있습니다.

With Dalfox

Dalfox에서 XSS 스캔 시 Blind XSS 페이로드를 사용하도록 설정할 수 있습니다.

dalfox url <TARGET> -b "your.xss.ht"