외부의 엔티티를 이용한 xxe를 이용하여 /etc/passwd 파일의 내용을 알아내는 문제이다.
일단 문제 사이트에 들어가 보자.
Burf Suite를 키고, 아무데나 view details를 눌러 들어가서, intercept를 키고 check stock을 눌러보자.
stockcheck 바로 위에 아래의 코드를 적어주자.
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
그리고, productID 칸에 기존에 있던 숫자 1을 지우고 '&xxe;'를 적어주자.
forward를 눌러보니, 아무리 기다려도 응답이 없어서 repeater로 보내서 실행시켜 보았다.
Send 버튼을 눌러, response에 어떠한 결과값이 나오는지 확인해 보자.
우리가 알아내고자 한 etc/passwd 파일의 내용이 출력된다.
문제 해결
ssrf공격(서버 측 요청 위조 공격)을 수행하기 위해 xxe를 이용하는 문제이다.
burp suite를 키고 문제 사이트에 들어가고, 아무 항목이나 정해 사이트에 들어간 다음 intercept를 키고 check stock을 눌러보자.
패킷이 잡힌 것을 확인할 수 있다.
1번 문제에서 풀었던 것과 마찬가지로, stockCheck 바로 위에 아래의 코드를 작성해 보자.
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
그리고, productID 자리에 기존에 있던 것을 지우고 '&xxe;'를 작성해 주자.
모두 작성했으면, repeater로 보내서 send 버튼을 눌러보자. invalid product ID 값이 뜬 것을 볼 수 있다. 위의 코드의 / 뒤에 알아낸 ID 값인 latest를 적어보고, 다시 send 버튼을 눌러보자.
똑같이, latest뒤에 /meta-data를 입력한 후, send 버튼을 눌러보자. 이 과정은 invalid id의 값이 admin이 나올 때까지 계속한다.
4번의 시도 끝에 admin이 나왔다.😍 위에서 했던 것과 마찬가지로 security-credential 뒤에 /admin을 작성하고 send버튼을 눌러보자.
문제에서 원하는 값인 AccessKeyID와 SecretAccessKey의 값이 뜬 것을 알 수 있다.
문제 해결 완😎
문제를 풀기 위해, intigrity 님의 풀이와 portswigger의 xxe lecture 부분을 참고하였습니다.