오늘은 Blind XSS에 대한 이야기를 잠깐 할까합니다. 보편적인 XSS와 비슷하고, 테스트 또한 동일하지만 주말동안 Blind XSS에 대해 고민해보니 "아차" 하고 생각난 부분이 있었습니다.

Blind XSS?

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

XSS에 대해 테스팅할 때 우리는 노출되는 결과, 즉 최종적으로 DOM 영역에 쓰이는 데이터를 가지고 분석을 하게 되는데요. 가끔 이런 분석 자체가 불가능한 경우들이 있습니다.

대표적으로 사이트의 신고, 문의 기능 같이 사용자에게 전혀 노출이 되지 않고 관리자 데이터로 넘어가는 경우이지요. 물론 직접 관리 페이지까지 볼 수 있다면 XSS가 잘 들어갔는지 확인할 수 있지만 아닌 경우도 있습니다.

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

사실 최근까지 저 또한 Blind XSS라고 따로 부르지는 않았습니다. 그저 XSS였을 뿐이죠.
천천히 이 Blind XSS에 대해 생각해보니 미쳐 발견하지 못하던 포인트를 찾을 수 있을거란 생각이 들었습니다.

Why so serious?

vignette.wikia.nocookie.net/doctorwhogeneral/images/2/27/Why_so_serious_Joker.jpg

XSS 영향력 자체는 워낙 잘 알려져있고 유연성 또한 매우 높기 때문에 발견 가능성 대비 위험한 취약점입니다. Blind XSS를 이용하면 우리가 볼 수 없는 영역에서 노출된 스크립트의 동작 여부를 체크해볼 수 있습니다.

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

대체로 Blind XSS는 문의하기 같은 부분으로 설명되어 있지만 잘 생각해보면 우리가 테스트하는 모든 XSS는 Blind XSS의 가능성을 가지게 됩니다. XSS 코드가 노출되는 영역 즉, 프론트 페이지에선 필터링 되는 사이트라면 분명 데이터베이스에는 XSS가 코드가 그대로 들어가 있습니다. 물론 반대의 경우에도 디코딩 과정때문에 동작할 수 있겠지만요.

이 데이터가 어떻게 사용되고 노출되는지 공격자는 모릅니다. 여기서 확인이 가능하다면 데이터가 엮여있는 여러 페이지를 체크해가면 찾아볼 수 있습니다. 확인이 불가능한 영역은 알 수 없겠지요.

다만 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 요청을 발생시키고 이를 통해 서버에선 코드가 실행되었단걸 확인할 수 있어집니다.


이런 비슷한 구조로 테스팅하는 도구가 Burp의 collaborator 기능입니다.
(collaborator도 따로 구축해서 사용하면 굉장히 편리합니다. 이걸로 명령 실행이나 Injection 찾기가 굉장히 수월하죠)


Conclusion

처음 이야기드린 아차 한 부분이 글에 잘 나타났을지는 모르겠네요.
바로

모든 XSS 구문에 가능성이 있고 특수 사용자에게 트리거 될 가능성이 높다는 점입니다. 

잘 생각해보면 가능성을 놓치고 있었을 거란 생각이 드네요.

마지막으로 관련해서 테스팅툴을 하나 만들고 있습니다.
https://github.com/hahwul/hbxss

딱 Blind XSS 테스팅용 툴로 만들고 기능이 많진 않아 금방 완료할 것 같네요. 다 만들어지면 사용법 정도 포스팅해보겠습니다 :)

댓글 없음:

댓글 쓰기