# Related site issues/LOS

22.Dark_Eyes 풀이. if(preg_match('/prob|_|\.|\(\)/i',$_GET[pw])) exit("No Hack ~_~");if(preg_match('/col|if|case|when|sleep|benchmark/i',$_GET[pw])) exit("HeHe"); Benchmark라는 단어를 보니 바로 이전 문제인 iron_golem 문제랑 유사할 것 같았다.col,if,case,when 필터링이 추가되어 있는 상황. if(mysql_error()) exit(); echo "query: {$query} ";mysql error가 뜨면 error 내욜을 보여주지 X.문제에 접근 방식은 iron_golem 과 비슷하게 하면 될 것이다.단지 이 문제는 iron_golem과 다르게 err..
21.Iron_golem 풀이. if(preg_match('/sleep|benchmark/i', $_GET[pw])) exit("HeHe");Sleep이랑 benchmark가 필터링 되어 있다.Sleep은 쿼리를 초 단위로 지연 시킬 수 O.Select * from [테이블명] WHERE SLEEP(5)=0; 참조 => https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_sleep http://BENCHMARK(count,expr) https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_benchmark 즉, Sleep과 Benchmark..
20.Dragon 풀이. $query = "select id from prob_dragon where id='guest'# and pw = '{$_GET[pw]}'";쿼리를 보게 되면 id ='guest'# 주석이 달려있다.guest 뒤에 # 주석 처리가 있어서 무엇을 get으로 어떤 것을 보내든 다 무시된다.주석을 벗어나는 방법은 line feed(%0a) 이용.id가 guest로 되어있어서 거짓 조건을 줘서 없앤 다음에 id='admin'을 입력.%0a==> 줄바꿈 문자를 사용하여 우회.일단 pw의 값에 %0A 입력 ==> ?pw=%0A. 다음 줄로 넘어가게 되고, 그럼 이제 #, 주석으로 인해 쓰지 못했던 부분 입력.?pw='%0a and 0=1 || id='admin'%23 입력. Cf) 주석을 ..
19.Xavis 풀이. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/regex|like/i',$_GET[pw])) exit("HeHe");정규표현식이랑 LIKE를 필터링하고 있다.다른 코드를 봐도 특별히 주의해야 할 코드는 없고, 즉 admin의 pw만 알면 되는 Blind sql injection 문제.일단 비밀번호 길이를 알아본다.pw=' or id='admin' and length(pw)=40%23 입력. 일단 pw의 길이가 40이라는 것을 알았다.일단 정말 길이가 40일지 아닐지 아니면 NULL을 통해 특정 값부터는 값이 없을 수 있기에 확인해본다.substr 사용. ?pw=%27||substr..
18.Nightmare 풀이. if(preg_match('/prob|_|\.|\(\)#|-/i',$_GET[pw])) exit("No Hack ~_~");if(strlen($_GET[pw])>6) exit("No Hack ~_~"); pw는 6자리까지 사용할 수 있다. 조건을 참으로만 만들어주면 문제를 해결할 수 있을 거 같다.#,-- 주석이 필터링 되어 있어서 ;%00 세미콜론 뒤에 NULL 넣어준 것. 일단 그냥 id값만 나오게 하면 된다.필터링 되어있는 #과 --를 빼고, 나머지 ;%00, /**/ 되는지 확인해본다. 일단 admin이 뜬 걸 보니 ;%00과 /**/은 쓸 수 있는 것으로 알 수 있다.초반에 pw의 길이는 최대 6자리니까 둘 다 해보도록 하겠다.SQL에서 문자열은 0이기에 어떤 문자..
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만 만족하면 된다.일단 비밀..
Allblackk
'# Related site issues/LOS' 카테고리의 글 목록