xml은 html과 마찬가지로 태그를 이용하여 사용하는 마크업 언어의 하나이다.
주로 브라우저와 서버 사이에 데이터 전송을 위해 api를 통해 사용하는 환경이 많다.
사실 요즘은 대부분의 웹 서버들이 JSON으로 개발되기 때문에 거의 볼 수 없지만 알고있으면
언제라도 발견하게된다면 공격을 시도해볼 수 있다.
XML external entity Injection(XXE) 공격은 공격의 이름 그대로 external entity (외부 엔티티)를 이용한 공격으로
데이터 전송이 발생할 때 인젝션을 통하여 공격자가 시스템 파일을 볼 수 있거나 데이터들을 엿볼 수 있다.
특별한 기술이 필요한 것은 아니고 sql 인젝션이나 XSS 처럼 쿼리나 동작방식만 알고있으면 간단하다.
외부 엔티티를 이용하여 시스템 파일 확인
아래 사이트는 어떤 물건의 재고가 남아있는지 확인하는 버튼이 있다.
버튼을 눌러서 패킷을 보게되면 XML을 서버에 전송하여 데이터를 가져오는 것을 볼 수 있다.
위 패킷에 아래와 같은 XML 쿼리 한문장을 삽입 해주고
productId는 xxe라는 외부 엔티티를 참조하도록 &xxe; 하여 패킷을 전송하게 되면
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
명령어가 실행되어
etc/passwd 파일이 읽어와지는 것을 볼 수 있다.
XXE를 이용한 SSRF 공격
SSRF는 서버측 요청을 변조하는 공격이다.
공격자는 이 SSRF를 통하여 내부 전용 경로에 접근할 수 있는데
이 공격을 XXE를 이용하여 할 수 있다.
아래 그림에 나오는 예제에 169.254.169.254 는 해당 웹 서버의 엔드단에 위치해있는 서버이다.
기본적으로 접근이 불가능 하지만 XXE를 이용하면
Invalid product ID: latest 라고 응답이 돌아오는 것을 볼 수있다.
이 latest는 이미 엔드단 서버에 접근이 되어 다음 디렉터리를 말해주는 것이며 이것을 따라서 가면
또 다른 경로인 mata-data라는 경로가 출력되고 meta-data를 따라가면 iam이 출력된다.
이런식으로 계속 추적해서 XXE를 실행한다.
그 결과, admin이라는 경로에 접근할 수 있으며, 예제에서 요구하는 키 값을 획득할 수 있다.
이미지 파일 업로드를 이용한 XXE
이미지 파일 내 xml 태그를 삽입하여
이미지를 불러올 때 그 이미지가 시스템 파일의 내용을 담을 수도 있다.
아래 프로필사진 이미지를 등록하여 댓글을 작성할 수 있는 웹이 있다.
댓글을 작성할 때 패킷을 캡처하여 보게되면 avatar 파라미터가 이미지파일을 업로드 하는 부분이다.
이 때 svg 파일을 하나 업로드 한 후
그 내용을 아래와 같이 작성해준다. 그러면 svg 파일은 xxe 엔티티를 참조해서 hostname 파일의 내용을 이미지로
보여주게 된다.
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16">&xxe;
</text>
</svg>
댓글이 작성되었고 프로필 사진을 보게되면 검은색 줄같은게 그여져있는데
확대해보면 hostname파일의 내용이 담긴 문자열인것을 볼 수있다.
물론 다른 파일도 불러올 수있다.
폰트 크기와 svg 크기를 살짝 수정한 후 passwd 파일 불러오기
이 외에도 블라인드 XXE, X include 등 좀더 다양한 고급기술이 있다.
'웹' 카테고리의 다른 글
[Web] 불충분한 인증 및 인가(파라미터 변조 취약점)에 대해 (0) | 2022.07.13 |
---|---|
[웹] 파일 업로드 공격 - 확장자 우회 (0) | 2022.07.06 |
[Web] HTTP Request Smuggling을 이용한 다양한 웹 해킹 기법(활용) (0) | 2022.07.01 |
[Web] HTTP Request Smuggling을 이용한 다양한 웹 해킹 기법(개념) (0) | 2022.06.30 |