Web Hacking/XXE

XXE(XML eXternal Entity) Attack

seungwon9201 2024. 7. 6. 01:47

XXE(XML외부 엔티티) 공격

서버에서 XML 외부 엔터티를 참조할 수 있을 때 발생하는 보안 취약점을 악용한 공격 기법이다.

XXE 공격을 통해 공격자는 서버 파일 시스템에 접근하거나 내부 네트워크를 스캔하는 등의 악의적인 행위를 할 수 있다.

 

XML 외부 엔티티는 아래와 같은 형태로 선언된다.

<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>

이러한 형태는 DOCTYPE 선언을 한 다음 ENTITY 태그를 사용하여 xxe라는 외부 엔티티를 선언하고 있다.

선언된 외부 엔티티는 프로그래밍에서 변수를 참조하는 것처럼 XML 내부에서 참조할 수 있다.

즉, xxe 엔티티를 참조하면 xxe의 값인 SYSTEM 키워드로 저장된 /etc/passwd 파일을 참조하게 된다.

 


XXE Attack 실습

-실습 목표-
burpsuite의 repeater기능을 사용해서 XML attack을 수행하고 /etc/passwd 파일의 내용을 출력해 보자.

 

실습 페이지에 접속해서 any bugs버튼을 누른 다음에 burpsuite에서 전송된 요청 정보를 확인해 보자.

 

bWAPP/xxe-2.php의 요청 메시지부터 확인해 보자.

요청 메시지의 Content-Type 헤더가 text/xml 타입이고 바디 부분은 XML형태의 데이터가 전송되는 것을 확인할 수 있다.

 

이번엔 응답 메시지 쪽을 확인해 보자.

XML데이터 중에서 <login></login> 사이에 있는 bee문자열이 응답 메시지에서 bee's secret has been reset형태로 나타난 것을 확인할 수 있다. 한번 bee문자열을 다른 문자열로 변경시켜 보자.

-웹 모의해킹 팁-
XML 태그의 내용이 응답 페이지에서 발견된다면 XXE attack 시도가 가능할 수 있다.

 

XML을 수정하기 위해서 repeater로 해당 요청을 전송하자.

기존에 있던 bee값을 yyss로 변경시켰더니 yyss로 되돌아오는 것을 확인할 수 있다. 

이러한 사실을 통해서 서버가 XML을 처리하고 있다는 것을 추측할 수 있게 된다.

 

그렇다면 이번엔 /etc/passwd 파일을 지정하는 외부 엔티티를 선언해 보자.

요청 매시지의 바디 부분에 이렇게 외부 엔티티를 참조해서 /etc/passwd 파일의 내용을 확인할 수 있다.


XXE Attack 대응법

  • 외부 엔티티 참조 기능이 필요하지 않은 경우 외부 엔티티 관련 설정을 비활성화하자.
  • 시스템 운영자나 보안관리자의 관점에서 ENTITY 태그가 요청 메시지를 통해 전달되는 것이 확인된다면 원래 의도된 요청인지 확인하는 작업이 필요하다.
  • 서비스 중인 웹 애플리케이션에서 XML 외부 엔티티 기능을 사용할 필요가 없다면 웹 방화벽 장비를 사용해서 해당 메시지를 차단하는 방법도 있다.