Wargame
-
<Webhacking.kr> old-13Wargame/Webhacking.kr 2021. 11. 28. 21:31
old-13 제출 칸에 1을 입력하면 0을 입력하면 2를 입력하면 1을 입력하면 1을 2를 입력하면 0을 0을 입력하면 아무것도 출력하지 않는다. 1이면 참 0이면 거짓인 것 같다. 페이지 소스 코드를 살펴보면 SQL INJECTION result0 제출 칸에서 필터링 되는 문자를 살펴보면 사칙연산(+, -, *, /), #, --, , =, like, and, 공백, &&, ||, where, ascii, union 등 감을 못잡아 https://k-owl.tistory.com/156를 참고해서 풀었다. ■데이터베이스 이름 길이 찾기 database()는 데이터베이스 이름을 돌려주는 함수다. 공백을 필터링 하기 때문에 ()를 사용한다. GET 방식이므로 ?no=(0)or(if(length(databas..
-
<Lord of SQL Injection> red dragonWargame/Lord of SQL Injection 2021. 11. 28. 15:07
red dragon GET 방식으로 전달받은 id에서 prob, _, .을 필터링한다. 그리고 전달받은 id의 길이가 7보다 크면 "too long string" 메시지를 출력한다. 전달받은 no가 숫자로만 이루어졌다면 전달받은 그대로 $no가 되고, 숫자가 아닌 다른 문자가 있다면 $no는 1이 된다. select no from prob_red_dragon where id='admin' 을 수행한 결과의 no 값과 전달받은 no의 값과 타입이 모두 같으면 문제가 풀리게 된다. ?id=admin'%23을 입력하면 "Hello admin"을 출력한다. 참인지 거짓인지 구분하기 위해서 no에는 숫자만 입력해야 한다. #(한줄 주석)을 사용해서 and no를 주석처리 하고 %0a(line feed)로 줄 바꿈..
-
<Webhacking.kr> old-12Wargame/Webhacking.kr 2021. 11. 27. 17:42
old-12 자바스크립트 문제인 것 같다. 페이지 소스 코드를 살펴보면 javascript challenge 감정 표현으로 이루어진 코드를 살펴볼 수 있다. 구글링을 통해 찾다 보니 자바스크립트의 aaencode 라는 것을 알게 되었다. aadecode 사이트를 통해 풀어보면 var enco=''; var enco2=126; var enco3=33; var ck=document.URL.substr(document.URL.indexOf('=')); for(i=1;i
-
<Lord of SQL Injection> green dragonWargame/Lord of SQL Injection 2021. 11. 27. 16:40
green dragon GET 방식으로 전달받은 id와 pw에서 prob, _, ., ', " 를 필터링한다. $query를 통해 id와 pw를 가져와 $result 배열로 저장한다. $result['id']가 참이면 $query2를 통한 id를 $result 배열로 저장한다. $result['id']가 'admin'이면 문제가 풀린다. '\' 뒤에 특수문자가 오면 일반 문자로 인식한다. ?id=\&pw= or 1=1%23을 입력하면 항상 참이지만 아무 것도 출력하지 않는다. prob_green_dragon 테이블이 비어있음을 짐작할 수 있다. 따라서 union select를 이용해야 한다. ?id=\&pw=union select 1,2%23을 입력하면 select id,pw from prob_green..
-
<Lord of SQL Injection> evil wizardWargame/Lord of SQL Injection 2021. 11. 26. 13:13
evil wizard 앞서 풀었던 'hell fire'와 비슷하지만 sleep과 benchmark를 필터링한다. 출제자의 의도와 달리 앞의 문제에서 exp(1000)을 이용해 문제를 풀었기 때문에 이 문제도 똑같이 풀면된다. ■참과 거짓 구분하기 ?order=1 and id='rubiya' and if(substr(email,1,1)='r', exp(1000), 1)을 입력하면 rubiya의 email 첫 글자가 'r'로 참을 나타내므로 exp(1000)에 의해 테이블의 데이터가 출력되지 않는다. ?order=1 and id='rubiya' and if(substr(email,1,1)='a', exp(1000), 1)를 입력하면 테이블의 데이터가 출력된다. 즉, 참일 때는 테이블의 데이터가 출력되지 않고..
-
<Webhacking.kr> old-11Wargame/Webhacking.kr 2021. 11. 25. 15:02
old-11 "Wrong" 메시지만 출력한다. view-source를 통해 페이지 소스 코드를 살펴보면 정규표현식과 자신의 IP주소로 이루어진 $pat이 있다. 이 $pat이 GET 방식으로 전달받은 val과 같으면 문제가 풀리게 된다. [1-3] : 1~3 중 하나의 숫자 [a-f]{5} : a~f 중 하나의 문자를 5번 반복 _ : '_' 문자 .*~.* : .* 뒤에 0개 이상의 문자열을 .*까지 반복 \t : tab을 의미(URL encoding 방식으로 %09) 따라서, ?val=1aaaaa_자기 IP주소%09p%09a%09s%09s를 입력하면 문제를 해결할 수 있다. 만약, 자신의 IP주소를 입력해도 되지 않는다면 검색엔진에 "내 IP 주소 확인"을 통해 IP 주소를 확인해보자.
-
<Lord of SQL Injection> hell fireWargame/Lord of SQL Injection 2021. 11. 25. 13:19
hell fire 전달받은 order에서 prob, _, ., proc, union을 필터링한다. 올바른 email을 찾으면 문제를 해결할 수 있다. select id,email,score from prob_hell_fire where 1 order by {$_GET[order]} 위 소스 코드에서 3개의 열(id, email, score)를 가지는 것을 알 수 있다. order를 3개의 열 중 하나인 id순으로 정렬하기 위해 ?order=id를 입력하면 소스 코드에 나와있는 대로 id가 "admin"이면 email은 "**************"로 출력하고, id가 "rubiya"인 경우 email은 "rubiya805@gmail.cm"인 것을 확인할 수 있다. 올바른 email을 찾기 위해 email..
-
<Lord of SQL Injection> dark eyesWargame/Lord of SQL Injection 2021. 11. 24. 18:25
dark eyes 전달받은 pw에서 prob, _, ., ()를 필터링한다. 그리고 이전의 문제와 달리 col, if, case, when, sleep, benchmark를 필터링한다. ?pw='를 입력하면 빈 화면을 출력한다. 즉, 쿼리에 오류가 있으면 exit()을 통해 빈 화면을 출력한다. pw의 길이는 ?pw=' or id='admin' and (select 1 union select (length(pw)=문자열 길이))%23로 알아볼 수 있다. (and가 or보다 우선순위가 높음) ?pw=' or id='admin' and (select 1 union select (length(pw)>10))%23을 입력하면 빈 화면을 출력하고 ?pw=' or id='admin' and (select 1 uni..