이번에는 Angular 2입니다. 전 문제에서 Angular를 공략하는것을 성공했으니 이번에는 쉽게 풀릴줄 알았습니다.
우선 저번 문제랑 똑같아보이는 웹사이트입니다. 입력한 문자열을 검색해주는 서비스입니다.
웹사이트 소스를 살펴보면
저번이랑 조금 달라졌는데, 바로 저번에 공략했던 공격벡터인 utm 파라미터가 없어져있다는 것입니다.
일단 아무 문자열이나 넣어보면
저번처럼 입력한 문자열을 사이트상에 띄웁니다.
하지만 이 부분은 저번과 동일하게
다음과 같은 HTML 태그로 씌워져있습니다.
이 태그를 뚫고 xss공격을 성공시키는건 아직까지 방법을 찾을수 없으니 다른 방법을 찾아봐야 합니다.
아무리 찾아봐도 도저히 방법이 보이지 않았는데
인터넷을 찾다보니 다음과 같은것을 발견했습니다.
Angular 템플릿 인젝션을 수행하는 페이로드가 존재한다는것을 이제 알았습니다.
각 버전별로 페이로드가 상이하기 때문에 먼저 이 사이트의 버전을 확인해보면
1.2.0 버전이라는것을 알수 있습니다.
그러므로 이 버전의 페이로드를 찾아보면 다음과 같은 페이로드가 존재합니다.
{{a='constructor';b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,'alert(1)')()}}
이 페이로드는 URL 뒤에 ?query= 방식으로 페이로드를 전송할수 있습니다.
하지만 이 페이로드를 사용해보면 별다른 이벤트가 발생하지 않습니다.
왜 작동하지 않는것인지 확인해보니
이 부분을 잘보면, 웹사이트로 전송된 페이로드에서 다른 문자들은 멀쩡하지만
왼쪽 중괄호가 전부다 없어졌다는것을 알수 있습니다.
왼쪽 중괄호가 필터링이 되는것인진 몰라도 일단 이 페이로드를 제대로 전송해야하기 때문에 어떻게든 우회할 방법을 찾아야 합니다.
URL 인코딩으로는 우회되지 않는것으로 확인됩니다.
그런데 잘 생각해보면, URL을 통해서 html 코드에 페이로드를 주입시키는 방법을 통해서 공격을 하고있는것입니다.
html 문서에서 특수문자를 입력할때 깨지지 않게 하기 위해서 주로 쓰는 방법은 바로 HTML 엔티티입니다.
요즘은 거의다 UTF-8을 쓰기 때문에 깨질일이 별로 없기때문에 신경쓰지 않아도 되지만,
이 웹사이트에서는 간혹 깨지는 특수문자가 존재하므로 HTML 엔티티를 사용해서 페이로드를 수정해야 합니다.
HTML Symbols, Entities, Characters and Codes — HTML Arrows (toptal.com)
이 웹사이트는 각종 HTML 엔티티를 찾을수 있는 사이트입니다.
이 웹사이트를 잘 찾아보면 다음과 같이 왼쪽 중괄호의 엔티티를 찾을수 있습니다.
HTML에 직접적으로 띄워지는것이기 때문에 HTML CODE를 사용해서 페이로드를 수정하면 다음과 같습니다.
{{a=%27constructor%27;b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,%27alert(1)%27)()}}
이 페이로드는 아까전에 말했다시피 URL 뒤에 ?query= 를통해서 전송할수 있습니다.
이 페이로드를 사용해서 공격해보면 성공적으로 alert가 실행된것을 확인할수 있습니다.
'워게임 > xssgame.com' 카테고리의 다른 글
[xssgame] CSP (0) | 2022.06.07 |
---|---|
[xssgame] Angular (0) | 2022.06.07 |
[xssgame] Google Reader (0) | 2022.06.07 |
[xssgame] Gallery (0) | 2022.06.06 |
[xssgame] Time's out! (0) | 2022.06.06 |