본문 바로가기

web/Lord of SQLInjection

(25)
Lord of SQLInjection - 25번 : green dragon 문제 살펴보기 일단 문제 길이가 상당하다. 그런데 blind sql injection 문제들과는 생긴게 조금 다르다. 코드를 분석해보도록 하자. if(preg_match('/prob|_|\.|\'|\"/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match('/prob|_|\.|\'|\"/i', $_GET[pw])) exit("No Hack ~_~"); id 파라미터와 pw 파라미터에 값을 넣을 수 있다. 두 파라미터 모두 prob, _, ., ', "를 필터링한다. $query = "select id,pw from prob_green_dragon where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; ... $result = @mysqli_..
Lord of SQLInjection - 24번 : evil wizard 문제 살펴보기 hell fire 문제와 상당히 유사하다. 주석을 보면 "same with hell_fire? really?"라고 적혀있다. 스포를 하자면 unintend 같지만 hell fire 문제와 같은 방법으로 문제를 풀었다. 문제 풀이에 필요한 코드를 살펴보도록 하자. if(preg_match('/prob|_|\.|proc|union|sleep|benchmark/i', $_GET[order])) exit("No Hack ~_~"); hell fire 문제와 같이 order 파라미터를 통해 데이터를 전달할 수 있다. 그런데 필터링되는 문자열이 늘었다. prob, _, ., proc, union, sleep, benchmark가 필터링된다. hell fire 문제에서는 sleep과 benchmark가..
Lord of SQLInjection - 23번 : hell fire 상당히 많은 삽질이 있었던 문제다. 문제가 크게 어렵진 않은데 python 코드를 잘못짜서 상당히 오래 걸렸던 문제... 문제를 살펴보도록 하자. 문제 살펴보기 새로운 유형의 문제가 등장했다. 문제 길이로만 보아서는 또 blind sql injection 문제가 아닐까 생각되는데 우선 코드를 살펴보도록 하자. if(preg_match('/prob|_|\.|proc|union/i', $_GET[order])) exit("No Hack ~_~"); pw가 아닌 order 파라미터를 통해 데이터를 전달할 수 있다. prob, _ ., proc, union을 필터링하고 있다. union based sql injection 문제는 아닌 것 같다. $query = "select id,email,score from ..
Lord of SQLInjection - 22번 : dark eyes 문제 살펴보기 iron golem 문제와 상당히 유사하다. 문제 풀이에 필요한 코드를 살펴보도록 하자. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/col|if|case|when|sleep|benchmark/i', $_GET[pw])) exit("HeHe"); 역시나 prob, _, ., ()가 필터링 되고 있다. 그리고 col, if, case, when, sleep, benchmark도 필터링 된다. 이전 문제에서 사용했던 if문을 사용할 수 없게 되었다. 이를 우회하는게 이번 문제의 목표인 것 같다. $query = "select id from prob_dark_eyes where id='adm..
Lord of SQLInjection - 21번 : iron golem 시험 끝나고 때 아닌 코로나 이슈로 앓다가 오랜만에 글을 올린다. 왜 두 번이나 걸리는거야... 비염 환자가 코로나까지 걸리니까 진짜 죽을 맛이었다. 이제 어느 정도 숨이 쉬어지니까 문제를 보도록 합시다. 문제 살펴보기 문제 길이를 보아하니 이번에도 blind sql injection 문제인 것 같다. 문제 풀이에 필요한 코드를 살펴보도록 하자. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/sleep|benchmark/i', $_GET[pw])) exit("HeHe"); prob, _, ., ()는 항상 있는 필터링이니까 넘어가자. sleep, benchmark를 필터링하고 있다. time based..
Lord of SQLInjection - 20번 : dragon 문제 살펴보기 해당 query를 보면 자체적으로 "and pw=" 부분을 주석처리하고 있다. 풀이에 필요한 코드를 보도록 해보자. $query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); ... if($result['id'] == 'admin') solve("dragon"); pw 파라미터를 통해 데이터를 전달할 수 있는데 해당 부분이 #으로 주석처리 되어 있다. 그런데 해당 select문이 id='admin'인 행을 반환하면 문제가 풀린다고 한다. 바로 풀어보도록 하자. 문제 풀이 과정 #은 해당 줄에서 #이후의 ..
Lord of SQLInjection - 19번 : xavis 상당히 아이언맨이 보고싶어지는 문제 이름이다. 문제를 보러 가자. 문제 살펴보기 흠...역시 코드 길이를 보아하니 blind sql injection 문제인 것 같다. 문제 풀이에 필요한 부분을 분석하도록 하자. if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe"); pw 파라미터로 값을 전달할 수 있는데 'regex', 'like'를 사용하면 안된다고 한다. $query = "select id from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$..
Lord of SQLInjection - 18번 : nightmare sql의 implicit type conversion을 이용한 문제이다. 자세한 내용은 아래 두 링크를 참고하길 바란다. https://learn.microsoft.com/ko-kr/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-ver16 https://learn.microsoft.com/ko-kr/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-ver16 문제 살펴보기 문제의 전체 코드는 위와 같다. 필요한 부분만 추출하여 보도록 하자. if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("N..