WEB hacking/비박스(bWAPP)

[비박스(bWAPP)] - XML External Entity Attacks(XXE)

Roronoa 2022. 11. 7. 01:33
반응형

XXE 취약점

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

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

 

[그림 1] XXE 실습 페이지

실습 페이지에 Any bug?라는 버튼이 존재한다. 이 버튼을 누르면 secert이 버튼에 표시된 문자열로 초기화 된다.

 

[그림 2] 버프 스위트로 XXE 실습 페이지에서 전송된 요청 확인

Content-type 헤더가 text/xml로 설정되어있고 바디에서 XML 형태의 데이터가 전송되고 있다.

XXE 취약점 공격은 이와같이 XML이 전송되는 부분을 통해 이루어진다.

 

[그림 3] Response 데이터 확인

요청 메시지에 XML 데이터에서 <login></login> 사이에 전송된 bee 문자열이 bee`s secret has been reset! 형태로 나타났다.

bee 대신 다른 문자열로 변경을 하면 응답 값이 바뀌는지 변경을 해보겠다.

 

[그림 4] 요청 데이터 변조

 <login></login> 사이에 전송된 bee 문자열을 hello 문자열으로 변경하였다.

 

[그림 5] 응답 데이터 확인

응답 메시지를 확인해 보면 요청을 보낸 hello 문자열이 다시 되돌아 오는것을 확인할 수 있다.

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

 

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

<reset><login>$XXE;</login><secret>Any bugs?</secret></reset>

[그림 6] 외부 엔티티 선언

SYSTEM 키워드를 이용하여 /etc/passwd 파일을 읽어온다.

 

[그림 7] /etc/passwd 파일 노출

/etc/passwd 파일의 내용이 응답이 되었다.

 

XXE 공격 대응 방안

XXE 공격의 대응방법은 외부 엔티티 참조 기능이 필요하지 않은 경우 DTDs나 외부 엔티티 관련 설정을 비활성화 한다.

반응형