728x90
반응형

※ Blind XXE

어떤 경우에도 공격이 성공하더라도 결과가 보이지 않는 경우가 있다. 혹은 읽으려고 하는 자료에 XML 파서에서 오류를 일으키는 문자가 포함되어 있을 수 있다. 예시를 통해 알아보자. 여기서는 외부 DTD를 하나 참조하는데 이것은 공격자의 서버(WebWolf)에서 통제가 가능한 특징이 있다.

당신은 공격자로서, WebWolf 서버를 통제할 수 있다.(동일한 기능을 할 수 있다면 굳이 WebWolf가 아니여도 상관없다)

한 가지 예를 들면, 이 서버의 랜딩 페이지인 "http://192.168.219.100:9090/landing"에 연결을 시도하면 클라이언트의 흔적을 남길 수도 있다.

그럼 어떻게 이를 활용하여 XXE 공격을 할 수 있을지 고민해보자.

"attack.dtd"라는 파일을 하나 만들어 WebWolf에 업로드 하는 것을 고려해보자. 이 때 이 파일의 내용은 아래와 같다.

이제 댓글을 작성하는데, 아래의 내용을 바디에 입력하여 전송한다.

"remote" 엔티티는 WebWolf에 업로드 된 "attack.dtd"라는 DTD 파일을 불러오는 외부(external) 엔티티면서, 동시에 DTD 문서 내에서만 사용될 수 있는 파라미터 엔티티다.

파라미터 엔티티의 사용법은 위 코드와 같이 "%[엔티티명];"이다. 위 코드의 경우 결국 XML 파일에서 "ping"엔티티를 사용할 수 있게 된다.

이제 WebWolf에서 "incoming requests"메뉴에 들어가면 아래와 같은 내용을 확인할 수 있다.

WebWolf의 랜딩 페이지를 방문하면 위와 같이 "incoming requests"메뉴에서 WebWolf 랜딩 페이지에(~/landing)에 접속한 시스템의 이력을 확인할 수 있따.

이렇게 XXE를 시도했을 때 공격자 서버(WebWolf)에 흔적을 남겨지는 것으로 보아, XXE 공격이 가능하다는 것을 알 수 있다. 이러한 XXE 인젝션 공격을 통해 이전 챌린지들에서 했던 것과 동일한 기능을 할 수 있으며, 이것은 마치 curl 명령어를 통해 데이터를 직접 다운받는 것과 비슷한 느낌이다.

 

728x90
반응형

+ Recent posts