Wargame/Root-me = Web - Client
-
XSS DOM Based - Filters BypassWargame/Root-me = Web - Client 2022. 11. 14. 21:38
XSS DOM Based - Filters Bypass 앞서 풀었던 문제의 형태이다. 문제 제목에서부터 filter를 우회하라고 나온다. number 값으로 필터링될 것 같은 값을 넣어보면 "+, ", ;"가 필터링 되는 것을 확인할 수 있다. "+"는 concat()으로, "는 '로 우회하면 된다. ";"는 개행문자로 우회할 수 있다. GET 방식이므로 URL에 number 값으로 "'\nalert(1)\n//"을 주면 단순히 문자열로 인식되는 것 같다. \n을 URLEncoding하면 %0a가 되는데 %0a를 사용하여 number 값을 "'%0aalert(1)%0a//"으로 주면 alert(1)이 동작하는 것을 확인할 수 있다. 그럼 이를 이용하여 사용자의 쿠키 값을 탈취하면 된다. 관리자에게 URL..
-
XSS - Stored 2Wargame/Root-me = Web - Client 2022. 11. 9. 20:29
XSS - Stored 2 문제 설명을 살펴보면 관리자 세션 쿠키를 탈취하여 관리자 구역에 접근하라 한다. 우선 Message에 스크립트 문을 입력해보면 실행되지 않는다. 아래 부분에 Message 입력값이 그대로 출력되는 것으로 보아 단순히 문자열로 받는 것 같다. 쿠키 값을 한 번 살펴보면 status 쿠키에 invite라는 값을 가지고 있다. invite를 admin으로 변경해보면 우측 상단의 Status와 아래 부분 status가 admin으로 바뀐 것을 확인할 수 있다. status 쿠키의 값을 스크립트문으로 해 보면 실행이 되지 않는다. 저 부분의 소스코드를 살펴보면 class에도 똑같이 들어가는 것을 볼 수 있다. 따라서, ">로 닫아주고 해보면 class가 닫히고 스크립트 문이 실행되게 된..
-
XSS DOM Based - IntroductionWargame/Root-me = Web - Client 2022. 11. 8. 21:55
XSS DOM Based - Introduction 0과 100사이 중 하나의 숫자를 입력한다. var random = Math.random() * (99); var number = '7'; if(random == number) { document.getElementById('state').style.color = 'green'; document.getElementById('state').innerHTML = 'You won this game but you don\'t have the flag ;)'; } else{ document.getElementById('state').style.color = 'red'; document.getElementById('state').innerText = 'Sorry,..
-
<Root-me> Install filesWargame/Root-me = Web - Client 2022. 1. 5. 18:25
Install files 빈 페이지를 출력한다. 문제 설명을 살펴보면 phpBB를 알고있냐고 물어본다. phpBB는 전자 게시판 프로그램으로 PHP 언어로 작성되었고, 데이터베이스로 MySQL이나 PostgreSQL을 사용한다. phpBB는 파일이 업로드되면 /phpbb/install을 추가하여 브라우저가 /phpbb/install/을 가리키도록 해야한다. 따라서, "./phpbb/install"에 접근하면 install.php 파일을 확인할 수 있다. install.php 파일에 접근하면 빨간 부분의 FLAG 값을 얻을 수 있다.
-
<Root-me> XSS - Stored 1Wargame/Root-me = Web - Client 2022. 1. 4. 14:55
XSS - Stored 1 관리자의 쿠키를 탈취하라고 한다. XSS Stored 공격은 웹 서버에 저장되었다가 실행된다. request bin과 같은 HTTP 요청을 받을 수 있는 사이트를 이용해 Message에 를 입력하면 사진 파일이 올라가게 되는데, 이를 관리자가 보게되면 자바스크립트 코드에 의해 관리자의 쿠키를 request bin 주소로 요청하게 된다. ADMIN_COOKIE라는 키를 가진 관리자의 쿠키를 획득할 수 있다.
-
<Root-me> CSRF - 0 protectionWargame/Root-me = Web - Client 2021. 12. 24. 13:24
CSRF - 0 protection 인트라넷에 접속하기 위해 계정을 활성화시키라고 한다. 먼저 Register를 통해 woong으로 가입을 하고 로그인을 한다. Profile을 살펴보면 Status 체크박스가 비활성화되어있다. Private를 살펴보면 기다리라고 한다. Contact를 살펴보면 이메일과 코멘트를 입력할 수 있다. 문제 제목이 CSRF인 만큼, Contact를 통해 계정을 활성화시켜야 할 것 같다. Profile 페이지의 소스 코드를 살펴보면 우리에게 필요한 부분은 form 태그로 감싸진 부분이다. 필요한 부분만 추리면 그리고 action을 Profile의 full URL로 변경하고, status가 체크되어야 하므로 disabled를 checked로 바꾼다. 여기까지만 입력하면 form이 ..
-
<Root-me> CSP Bypass - Inline codeWargame/Root-me = Web - Client 2021. 12. 22. 22:11
이름을 입력하라고 한다. 문제 제목이 CSP(Content Security Policy)니 응답 헤더에서 CSP를 먼저 확인해보면 "script-src 'unsafe-inline'"이므로 Inline Javascript(태그 내에 직접 자바스크립트 명령어를 작성하는 방법)을 수행할 수 있다. 다시 문제로 돌아와 아무 이름을 입력한다. CSP(Content Security Policy)를 설정했기 때문에 XSS에 대해 패치하지 않았다고 한다. 그리고 봇만 볼 수 있는 FLAG를 빼내라고 한다. URL을 보면 page?user=woong 부분을 보아 방금 입력한 이름이 GET 방식으로 전달되는 것을 알 수 있다. "XSS에 대해 패치하지 않았다"라고 하니 먼저, user=alert(1)을 입력해보면 요청이 ..
-
<Root-me> Javascript - Obfuscation 3Wargame/Root-me = Web - Client 2021. 12. 20. 22:53
비밀번호를 입력하라고 한다. 페이지 소스 코드를 보면 function dechiffre(pass_enc){ var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65"; var tab = pass_enc.split(','); var tab2 = pass.split(','); var i,j,k,l=0,m,n,o,p = ""; i = 0; j = tab.length; k = j + (l) + (n=0); n = tab2.length; for(i = (o=0); i < (k = j = n); i++ ){ o = tab[i-l]; p += String.fromCharCode((o = tab2[i])); if(i == 5) break;} for(i = (..