훈훈훈

XXE(XML External Entity) injection 개념 & 실습 본문

정보보안/웹 해킹

XXE(XML External Entity) injection 개념 & 실습

훈훈훈 2018. 10. 5. 23:30


1. 서론 

 이번에 다룰 주제는 Injection 공격의 종류 중 하나인 "XXE( XML External Entitiy ) Injection" 이다.

해당 주제를 다루기 이전에 먼저 OWASP TOP10 웹 어플리케이션 취약점 목록을 살펴보자.



위 사진을 보면 "XML External Entities (XXE)"가 목록에 있는 것을 확인 할 수 있다. 

이전에 발표되었던 OWASP TOP10 웹 어플리케이션 취약점 목록에 "XML External Entities (XXE)"은 존재 하지 않았다.

하지만 2017년 말에 발표된 목록에 새롭게 추가되었다. 

그 말은 즉 최근에 가장 위협적인 공격 중 하나가 되었고 보안을 공부하는 사람들은 이젠 주의깊게 봐야할 

공격이 되었다는 뜻이다.


2. 개념

 실습에 앞서 XXE injection이 무엇인지 살펴보자.

공격 과정은 그리 어렵지 않다.


간단히 설명하자면 먼저 공격자가 XML 문서에서 External Entity를 이용하여 공격자가 의도하는 외부 URL을 실행을 시킨다. 그 다음 공격자는 자신이 원하는 공격들을 수행 할 수 있다.

대표적으로 서비스 거부 공격과 서버의 로컬파일 정보 등을 출력 할 수 있다.


3. 공격 조건

 공격 조건은 다음과 같다. 

1)  공격자는 XML Request의 DTD를 선언 할 수 있어야 한다.

2)  외부 리소스는 DTD 문법에 맞지 않으면 실행되지 않는다.

3)  Binary는 불러올 수 없다.


4. 공격 영향

 공격 영향은 기밀성, 무결성, 가용성 각각 분류 해서 살펴 보자. 

( 이 자료는 해외 사이트를 참고했다. 번역하면 어감이 이상해져서 영어 그대로 옮겼다. ) 

1) 기밀성

  - Read Application Data, Read Files or Directories

2) 무결성

  - Bypass Protection Mechanism

3) 가용성

  - DoS - Resource Consumption (CPU)

  - DoS - Resource Consumption (Memory)


5. 공격 테스트

- 테스트 환경



테스트 환경은 OWASP에서 제공하는 이미지를 이용해 가상환경에서 실습을 해보았다.

자 이제 테스트를 시작해 보자.


- 테스트 과정



미리 준비해둔 코드로 실습을 진행 하였다. 이제 결과가 어떻게 출력되는지 확인해 보자.



명령을 실행 시키면 다음과 같이 " /etc/passwd " 파일의 내용이 출력되는 것을 확인 할 수 있다. 


6. 공격 실습

 자 이제는 실제로 서버를 구축하고 실습을 진행하려고 한다.

(해당 공격 과정은 www.packetstormsecurity.com 사이트를 참고 하였다. 정확한 출저는 글 가장 아래에서 확인 할 수 있다.)


1. 실습 환경

  -  운영체제 : Windows7 64bit 

  -  웹 서버 : Wordpress v4.9.1

  -  플러그인 : Advanced XML Reader v0.3.4


2. 공격 과정




먼저 VMware 가상 환경 상의 Windwos 7에서 APM을 구축한 다음 Wordpress를 구축하였다.

그 다음 관리자 페이지로 들어가서 "Advanced XML Reader"를 설치했다. 



그 다음 위 사진과 같은 코드를 작성한 다음 "TEST.xml" 로 저장하였다. 해당 파일은 "wp-config" 파일의 내용을 불러올 목적으로 만든 파일이다. 



이제 만든 파일을 서버에 올리자. 서버에 올리기 위해서 HFS라는 툴을 이용하였다.



이제 다음과 같이 공격을 수행 해주면 된다.

XML file에 "TEST.xml" 파일의 URL을 삽입 시키고 save 하면 다음과 같이 "XML tag Value" 값이 출력되는걸 볼 수 있다.  



이제 Wordpress 페이지에 글을 다음과 같이 작성한다. 



작성된 글을 불러오면 base-64로 인코딩된 "wp-config" 파일 내용을 확인할 수 있다.



인코딩된 내용을 확인하기 위해 디코딩을 진행하자. 다음과 같은 페이지는 구글에 검색하면 쉽게 찾을 수 있다.



디코딩을 하면 다음과 같이 파일 내용을 확인할 수 있다.





출처

https://www.owasp.org/index.php/Top_10-2017_A4-XML_External_Entities_(XXE)

https://beistlab.files.wordpress.com/2015/01/grayhash_intro_xxe.pdf

https://packetstormsecurity.com/files/121492/WordPress-Advanced-XML-Reader-0.3.4-XXE-Injection.html



'정보보안 > 웹 해킹' 카테고리의 다른 글

구글 해킹 개념 & 실습  (0) 2018.10.21
Comments