화이트 해커를 위한 웹 해킹의 기술

Step11. XXE(XML 외부 엔티티) 공격

메리_99 2021. 3. 8. 19:58
반응형

XXE 공격 개요 

  • XML 타입의 데이터가 웹 요청을 통해 전송되고, 서버에서 XML 외부 엔티티를 처리할 수 있도록 설정된 경우 나타날 수 있다.

  • 사용자가 웹 애플리케이션으로 전달되는 XML 데이터를 직접 업로드하거나 수정할 수 있는 경우, 공격자는 외부 엔티티를 참조하는 XML 데이터를 전송하여 파일과 같은 서버 내부의 정보를 탈취하거나 서비스 거부 공격, SSRF 등의 공격을 수행할 수 있다.

XML 외부 엔티티 예시

<!DOCTYPE foo [

<!ENTITY xxe SYSTEM "file:///etc/passwd">

]>

  • DOCTYPE 선언 후, ENTITY 태그를 사용하여 외부 엔티티 선언

  • xxe를 참조할 경우 SYSTEM 키워드로 지정된 /etc/passwd 파일을 참조(file://사용)

  • 호스트 내부 파일 외에도 http://를 사용하여 외부 리소스를 참조하는 것도 가능

XXE 공격 실습

  • 먼저 웹 페이지에 접속 후 사용자의 시크릿이 버튼에 표시된 문자열로 초기화되는 기능을 가진 any bugs를 클릭한다.

xxe 실습 웹 페이지

  • 버프 스위트의 요청 메시지를 확인한다.

버프스위트의 HttpHistory에서 출력되는 웹 페이지의 요청 메시지

  • 요청 메시지를 보면 Content-Type : text/xml을 볼 수 있는데, 이는 취약점을 의심해 볼 수 있다.

버프스위트의 HttpHistory에서 출력되는 웹 페이지의 응답 메시지

  • 요청 메시지의 <login> 태그 안에 있는 문자열이 응답 메시지의 12번 줄에 그대로 출력되는지 확인한다.

버프스위트의 리피터 기능을 이용한 응답메시지 확인

  • 위와 같이 <login>태그로 전달된 값이 응답 메시지에 나타나고 있는 것을 알 수 있다.

  • 이 사실을 통해 서버가 XML을 처리하고 있다는 것이 추측 가능하다.

  • 만일 웹 애플리케이션이 외부 엔티티 사용을 허용하도록 설정되어 있다면, /etc/passwd 파일을 지정하는 외부 엔티티를 선언하고 <login> 태그의 값으로 해당 외부 엔티티를 참조함으로써, /etc/passwd내용을 알아낼 수 있다

XXE 공격에 의해 사용자 정보가 노출

 

XXE 공격 대응

 

XML External Entity Prevention - OWASP Cheat Sheet Series

XML External Entity Prevention Cheat Sheet Introduction XML eXternal Entity injection (XXE), which is now part of the OWASP Top 10 via the point A4, is a type of attack against an application that parses XML input. XXE issue is referenced under the ID 611

cheatsheetseries.owasp.org

  • 시스템 운영자나 보안 관리자 관점에서는 ENTITY 태그가 요청 메시지를 통해 전달되는 것이 확인되면 일단 주의를 기울이고, 원래 의도된 요청인지 확인하는 것이 필요하다.

  • 서비스 중인 웹 애플리케이션에서 XML 외부 엔티티 기능을 사용할 필요가 없다면, 웹 방화벽 등의 장비를 이용하여 해당 메시지를 차단하는 것이 좋다.


위 글은 '화이트 해커를 위한 웹 해킹의 기술 최봉환 저'를 공부하며 쓴 글입니다.
728x90