# Related site issues

17.Succubus 풀이. if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/\', $_GET[id])) exit("HeHe");if(preg_match('/\', $_GET[pw])) exit("HeHe");$query = "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 음... 그 전 문제인 zombie_assassin과 상당히 유사한 문제이고, 차이점은 ereg이 아니라 preg_match로 필터..
16.zombie_assassin 풀이. if(preg_match('/\\\|prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");if(preg_match('/\\\|prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 음....[']를 우회만 하면 되서 차라리 익숙한 ereg 함수의 취약점을 이용한다.ereg의 가장 큰 취약점은 NULL 문자 전까지만 체크한다라는 것이다.참고로 예전 문제에서도 봤다싶이 encoding 값은 %00.또 '%00을 하면 ereg 범위 안, %00'을 하면 ereg 범위 바깥.즉 id로 로그인만 되면 되는 문제.일단 우회가 되는지부터 확인.?id=%00%27 입력. 우회가 된다. 우회가 된다는 것은..
15.Assassin 풀이. if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";where 절에서 = 대신 like 절을 사용하여 패스워드를 확인하고 있다.[']을 우회하지 못하게 preg_match로 막아놨다.만약 eregi라고 하면 우회할 수 있다. cf) like 사용법.like %abc => abc로 끝나는 값.like abc% => abc로 시작하는 값.like %abc% => abc가 들어가는 값.if($result['id'] == 'admin') solve("assassin"); id == admin만 만족하면 된다.일단 비밀..
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
Allblackk
'# Related site issues' 카테고리의 글 목록 (4 Page)