이론만 막 배우니 머리에 들어오는게 없는거 같아 찾아본게 이 gruyere이다.
앞에 나오는 이상한 영어들은 일찌감치 집어치우고 실습부터 했다.
![]()
먼저 들어가니 이런 사이트가 있었다.
밑으로 내려가서 Continue >>버튼을 누르고 들어가니
![]()
또 이런 영어들이 나를 반겨주는데 앞에서 말했듯이 집어치우고
https://google-gruyere.appspot.com/start를 눌러 본격적으로 시작한다.
![]()
이렇게 게시판같은 페이지가 뜨는데 일단 로그인부터 해보자.
![]()
회원가입창에서 가입을 해주고
![]()
로그인을 한다.
![]()
로그인을 해주면 이런 화면이 뜨는걸 볼 수 있다.
그리고 시작부터 gruyere의 허술함이 들어난다.
https://google-gruyere.appspot.com/469790294992189573147013988367009809944/login?uid=junnyontop-pixel&pw=124QWEasd
이렇게 url에 id와 pw노출시킨 것이다.
위에 newSnippet을 눌러보니 게시글을 올릴 수 있는거 같다.
Limited HTML is now supported in snippets (e.g., <b>, <i>, etc.)!이렇게 html태그를 허용해주는거 같다.
그래서 바로 script태그로 테스트 해보니 script태그는 안먹히는거 같다.
차례로 My Snippets을 눌러주니
https://google-gruyere.appspot.com/469790294992189573147013988367009809944/snippets.gtl주소가 이렇게 생겼다.
혹시나 https://google-gruyere.appspot.com/469790294992189573147013988367009809944/snippets.gtl?uid=이렇게 아무거나 찍어 보니
https://google-gruyere.appspot.com/469790294992189573147013988367009809944/snippets.gtl?uid=cheddar
여기서
![]()
이렇게 다른 사람의 게시글을 훔쳐볼 수 있었다.
?uid=cheddar이걸 유용하게 써먹을 수 있을듯 하다.
혹시 관리자의 글도 볼 수 있을까 싶어,
?uid=admin,?uid=Admin이런걸 시도해 보니
대소문자 구분은 안하는거 같고 많은 걸 시도해 보던 도중...
?uid=administrator이걸 시도해보면
주소창은 https://google-gruyere.appspot.com/469790294992189573147013988367009809944/snippets.gtl?uid=administrator인데
화면엔
![]()
Admin으로 표시되어있다.
뭔가 힌트를 얻은거 같지만 관리자의 게시글을 훔쳐볼순없었다.
다음으로 옆에있는 Profile을 누르니
![]()
이렇게 프로필을 수정할 수 있었다.
https://google-gruyere.appspot.com/469790294992189573147013988367009809944/editprofile.gtl여긴 주소가 이런데 아까 봤던 그걸 사용해 보자.
https://google-gruyere.appspot.com/469790294992189573147013988367009809944/editprofile.gtl?uid=cheddar
![]()
역시 맞았다!
이걸로 다른사람의 프로필도 수정할 수 있다.
그리고 여기에 Private Snippet이란 항목이 있다.
여기에 uid=administrator를 사용해보면 게시글을 볼 수 있을지도 모른다.
![]()
성공이다.
추가로 My password is secret. Get it?라는 정보도 획득했다.
이 정보에 따르면 관리자의 pw는secret같다.
로그아웃을 해주고
로그인 창에서 User name:administrator,Password:secret으로 작성해주니
관리자로 로그인을 성공했다!
![]()
관리자로 로그인한 상태의 페이지이다.
이제 xss공격을 해볼거다.
아까 html태그를 허용했지만 script태그는 안되던 New Snippet을 클릭하고,
<img src="" onerror="alert('xss')">
이렇게 작성해주면
You are not an author.라고 뜨면서 안된다.
Profile에 들어가면
![]()
이렇게 선택지가 더 생긴걸 볼 수 있다.
Is author을 Yes로 변경해주고 다시 작성해주면
![]()
잘 뜨는것을 볼 수 있다.
추가로 쿠키까지 가져가 비밀번호 없이 로그인하는 것 까지 해보겠다.
<img src="" onerror="alert('쿠키: ' + document.cookie);">
아까처럼 스니펫에 이걸 추가하면
GRUYERE=31131337|administrator|admin|; GRUYERE_ID=404477456041413703389788683660411129398
쿠키가 나온다 이렇게 나온 쿠키를
로그아웃 후,
document.cookie = "GRUYERE=31131337|administrator|admin|";
콘솔창에 입력하면 로그인이 된다.
uid 같은 값은 누구나 수정할 수 있으므로, 서버에서 반드시 세션 기반의 검증을 거쳐야 한다.script 태그가 막혔더라도 onerror 같은 이벤트 핸들러를 통해 얼마든지 공격이 가능하다는 것을 깨달았다.