Wargame
-
<Webhacking.kr> old-19Wargame/Webhacking.kr 2021. 12. 1. 13:47
old-19 id 입력 창이 있고 기본 값으로 admin이 들어있다. 제출을 누르면 admin이 아니라고 한다. 1을 제출하면 0을 제출하면 URL에 ?id=0이 붙어있지만 입력 창은 변하지 않는다. 로그아웃 버튼을 눌려도 로그아웃이 되지 않는다. 'EditThisCookie'를 통해 userid의 쿠키를 지우면 로그아웃이 된다. 이것으로 보아 쿠키가 관련있는 것 같다. 1을 제출했을 때의 쿠키 값은 "YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI%3D"라는 문자열을 가진다. %3D가 있는 것으로 보아 URL Encoding 되어있는 것 같다. URL Decoding하면 "YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI="가 나온다. "YzR..
-
<Lord of SQL Injection> frankensteinWargame/Lord of SQL Injection 2021. 12. 1. 11:55
frankenstein GET 방식으로 전달받은 pw에서 prob, _, ., (, ), union을 필터링한다. 에러메시지를 출력하는 걸로 보아 Error Based SQL Injection 기법을 수행할 수 있다. 첫 번째 쿼리에서는 id가 frankenstein이고 두 번째 쿼리의 id는 admin이다. 따라서, id='admin'을 넣어 줘야 한다. 괄호를 필터링하기 때문에 앞에서 풀었던 것 처럼 if 문을 사용할 수 없다. 따라서 case when 조건 then 결과1 else 결과2 end 문을 사용할 수 있다. substr()이나 length()도 사용할 수 없기 때문에 like와 %를 사용할 수 있다. 조건이 성립할 경우를 구분하기 위해 에러를 출력하게 한다. MySQL에서 처리할 수 있는..
-
<Webhacking.kr> old-18Wargame/Webhacking.kr 2021. 11. 30. 19:11
old-18 SQL Injection 문제인 듯 하다. view-source를 통해 페이지 소스 코드를 살펴보면 전달받은 no에서 공백, /, (, ), |, &, select, from, 0x를 필터링한다. id가 admin이면 문제가 풀린다. admin의 no가 2라고 힌트가 주어져 있다. 즉, select id from chall18 where id='guest' and no=0 or no=2의 형태로 만들면 된다. 빨간 부분은 테이블에 없기 때문에 select id from chall18 where no=2의 형태가 된다. 위의 쿼리를 수행하면 id가 admin이 된다. 공백을 필터링하기 때문에 %09로 우회했다. 입력 창에 %09를 입력하면 %2509로 바뀌어 입력되고 GET 방식이므로 URL ..
-
<Webhacking.kr> old-15Wargame/Webhacking.kr 2021. 11. 29. 14:21
old-15 문제에 접속하자마자 접근이 거부되었다. 접속하는 순간 페이지 소스 코드를 보기위해 마우스 오른쪽 버튼은 동작하지 않고, 개발자 도구(F12)는 아무것도 출력되지 않았다. Burp Suite를 이용해서 페이지 소스 코드를 살펴보면 alert를 이용하여 "Access_Denied"를 경고창을 띄운다. 그리고 /는 루트 경로를 의미하기 때문에 빨간 줄의 경로로 이동한다. 즉, Burp Suite를 이용해 Response에서 script의 두 줄을 지우면 된다.
-
<Webhacking.kr> old-14Wargame/Webhacking.kr 2021. 11. 29. 13:52
old-14 하나의 입력 창이 있다. 페이지 소스 코드를 보면 자바스크립트로 만들어진 ck()가 있다. var ul=document.URL; document.URL은 현재 주소로 "https://webhacking.kr/challenge/js-1/" ul=ul.indexOf(".kr"); ".kr"이 나오는 인덱스를 반환한다. 따라서 18을 반환한다. ul=ul*30; 이므로 ul=540이다. 따라서, 입력 창에 540을 입력하면 문제를 풀 수 있다.
-
<Lord of SQL Injection> blue dragonWargame/Lord of SQL Injection 2021. 11. 29. 13:30
blue dragon GET 방식으로 전달받은 id와 pw에서 prob, _, .을 필터링한다. $query의 결과를 $result 배열에 저장한다. 이 $result['id']의 값이 있으면 "Hello admin"을 출력한다. 그 뒤, 전달받은 id와 pw에 싱글 쿼터('), '\'를 필터링한다. 두 번째 $query의 결과를 $result 배열에 저장하고 $result['pw']의 값이 전달한 pw와 값이 같으면 문제가 풀린다. 앞의 문제 처럼 한 줄 주석을 사용해서 먼저 풀어보았다. ?id=admin%23&pw=%0a을 입력해서 쿼리를 select id from prob_blue_dragon where id='admin#' and pw=' ' 의 형태로 만들어 보면 아무것도 출력하지 않는다. 필터..