# Related site issues/LOS

14.Giant 풀이. if(strlen($_GET[shit])>1) exit("No Hack ~_~");변수 shit은 길이가 1이하로 제한.if(preg_match('/|\n|\r|\t/i',$_GET[shit])) exit("HeHe");즉 문자열 길이가 1을 넘으면 X. space, \n(줄 바꿈), \r(줄 처음), \t(tab)을 필터링 해놨다.다시 말해 %20, %0A, %0D, %09가 필터링 되어있다.한 칸을 차지하는 공백 문자를 써야된다.%20을 대신할만 한 문자는............%0A,%0D,%09 (
13.Bugbear 풀이. 필터링이 너무 많다..우회를 해야 될 거 같다.no에는 ['] 처리가 안되어 있다.if(preg_match('/prob|_|\.|\(\)/i',$_GET[no])) exit("No Hack ~_~");if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");if(preg_match('/\'|substr|ascii|=|or|and| |like|0x/i', $_GET[no])) exit("HeHe");일단 darkknight 문제랑 거의 똑같다고 볼 수 있는데 or and space like 0x를 필터링이 되어 있다.or => ||, and => &&, space => %09[Tab], %0a ~ %0d, LIKE => IN, hex와 % 및 이용해서..
12.Darkknight 풀이. 필터링 된 것이 한 개가 아니다. if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe");싱글 쿼터['] substr ascii = 필터링이 되어 있다.PW 부분을 사용하려면 [']을 사용해야 되지만, 막아놨으니 no쪽을 손봐야 될 거 같다.즉 [']은 ["}로 대체되고, =은 부등호나 LIKE로 대체된다.이 문제 역시 blind sql injection.?pw=1234&no=123%20or%20id%20LIKE%20"admin"%20and%20length(pw)%20like%208 역시나 PW의 길이는 8.blind sql inj..
11.Golem 풀이. 필터링 우회가 핵심.if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe");음..........() or and substr를 사용 못하게 되어 있다.$query = "select pw from prob_golem where id = 'admin' and pw='{$_GET[pw]}'";if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem");즉 admin의 pw를 찾는 blind sql injection 문제.일반적인 blind sql in..
10.Skeleton 풀이. 일단 연산자 우선 순위에 집중. 1=0은 무조건 FALSE. 주석 처리 하거나 없앤다.if($result['id'] =='admin') solve("skeleton");id = 'admin' 을 만족하면 풀리는 것이 비해 id = 'guest; and pw ='{$_GET[pw]}' and 1=0 즉 and 1 = 0 이라는 조건이 붙었는데 뒤에는 주석으로 생략.연산자 우선 순위를 집중해서 보면 and가 or보다 빠르고, 주석으로 1=0을 없애는 것이 문제의 핵심.id ='guest' and pw ='0' or id ='admin' and pw >0 # and 1=0
9.Vampire 풀이. 이젠 Troll 문제랑 비슷한 느낌의 문제.이 문제의 핵심은 필터링에 대해서는 별 것 없고 str_replace를 사용한다는 것.str_replace는 대,소문자를 구별한다는 것이다.즉 admin이랑 ADMIN이랑 다르게 인식한다.결국 Troll이랑 풀이가 동일하다. 위와 같은 방법으로 문제는 풀 수 있지만 Troll이랑 별 차이가 없기에 다른 풀이로 풀어보겠다.str_replace("admin","",$_GET[id])는 'admin'이란 패턴, 빈 칸으로 만들어준다.'adadminmin'으로 입력을 한다면 가운데 admin은 사라지게 될 것이고, admin을 입력한 효과랑 동일.다시 말해 $_GET[id] = str_replace("admin","",$_GET[id]);str..
8.Troll 풀이. if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");if(@ereg("admin",$_GET[id])) exit("HeHe");일단 ereg() 함수는 패턴과 일치하는 문자열이 발견될 경우에는 TRUE,발견되지 않을 경우는 FALSE. 중요한 건 대소문자를 구분을한다.ereg(string pattern, string string, array[regs]);if($result['id'] == 'admin') solve("troll"); id = 'admin'를 만족하면 문제를 풀린다.ereg 때문에 admin은 쓰지는 못하지만 대소문자 구별은 하니까 Admin을 사용.(mysql에서는 기본적으로 대소문자 구별).Cf) ereg는 정규 표현 ..
7.Orge 풀이. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 기존 blind 문제에서 or and를 사용못하게 된 문제.$query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'";if(($result['pw'])&&($result['pw'] == $_GET['pw'])) solve("orge");admin의 pw를 찾는 blind sql injection 문제.즉 and(&&), or(||)만 바꿔서 사용하면 될 거 같다.일단 pw의 길이부터 확인해본다.?pw=..
Allblackk
'# Related site issues/LOS' 카테고리의 글 목록 (2 Page)