Webgoat XXE 문제입니다.
Webgoat는 드림핵처럼 해설이 작성되어 있기에
이를 토대로 실습한 XXE 문제의 Writeup을 작성하였습니다.
4번문제


XXE공격 기법을 활용해 댓글에 값을 저장하는 문제입니다.
일단 해설을 보면

<!DOCTYPE author [
<!ELEMENT author (#PCDATA)>
<!ENTITY js "Jo Smith">
]>
<author>&js;</author>
위 payload같은 공격코드를 삽입하면 XML이 파싱하여 값을 전달할때에
공격자의 의도대로 변경이 가능하다고 알려주고 있습니다.
코드를 삽입하려면 일단 버프스위트 같은 중간에서 패킷을 가로챌 프로그램이 필요하여
버프스위트를 이용해 중간에서 패킷을 가로채보면

a라는 값을 전달했을때

xml 구조를 사용하는것으로 확인되었으며
바디 부분에 공격코드를 삽입하면

해설에서 나온 payload가 아닌 직접 작성한
파일을 볼수 있는 공격코드를 작성해 전송해보면

XXE공격이 성공되어 어떠한 파일이 존재하는지 댓글에 출력되며
해결되었습니다.

7번 문제
7번문제는 4번문제와 동일한 페이지를 사용하는지
이전 4번문제에서 해결한 답이 댓글에 그대로 작성되어 있습니다.

다만 이번에는 Json을 사용한다고 합니다.
이전 4번문제 처럼 패킷을 캡쳐하면 알 수 있는 것이 많으니 먼저 값을 전달해보고 패킷을 캡쳐해 보겠습니다.
이번에는 4번과 구분하기 위해 값을 aaa로 전달해보면


태그형태로 값이 전달되는 것으로 보입니다.

이번에는 문제에서 json을 이용한다고 했는데 실제로 4번문제와는 다르게
Content-Type 이 json으로 지정되어 있습니다.
해설을 살펴보면

Content-Type이 xml 일때 xxe 의 공격코드의 삽입이 작동하는 것을 볼 수 있습니다.
해서 이전 4번코드에서 사용했던 코드를 그대로 사용하되
content-Type을 json에서 xml로 변조이후 값을 전달해 보겠습니다.

위와 같이 json을 xml로 content-Type를 변조한뒤 xml구조의 공격코드를 삽입해 전달해보면

json을 이용하는 구조임에도 XXE의 공격이 성공해
파일접근이 가능해져 파일목록을 comment에 출력해 주며
문제를 해결하였습니다.
