Wargame(Web)/Lord of SQLInjection

    (Lord of SQLInjection) succubus 문제

    (Lord of SQLInjection) succubus 문제입니다. 코드의 필터링부터 살펴보면 prob, _, . , (, ), ' 를 막고 있습니다. 그런데 이전 문제와는 다르게 id=admin 이 아닌 쿼리가 성공하기만 하면 문제가 해결된다고 합니다. 그러면 or 1=1# 같은 방식을 이용하면 문제가 해결되는데 싱글쿼터를 필터링 하고 있어서 입력이 불가능합니다. 필터링우회 키워드로 찾아보다가 백슬래시를 사용하면 뒤에 있는 싱글쿼터가 문자로 인식이 된다고 합니다. 즉 코드 id='$_GET[id]' and pw='$_GET[pw]' 를 보면 싱글쿼터가 기본적으로 감싸주고 있으니 이를 이용해 id='\' and pw='or 1=1#' 형태로 입력하면 id='\' and pw='or 1=1#' 빨간부분이..

    (Lord of SQLInjection) assassin 문제

    (Lord of SQLInjection) assassin 문제입니다. pw값이 like로 되어있습니다. 여기서 알아야 하는것은 like연산자입니다. 이전 라이트업에 작성했던 사이트에서 Like에 대한 언급이 있었는데 like는 _ 혹은 %가 와일드카드라 하여서 a% 처럼 시작하는 문자도 찾을 수 있지만 _ 언더바처럼 무슨 값이든 통과가 되는 특징이 있습니다. 즉 패스워드값이 맞지 않더라도 pw의 길이를 찾기에 용이 하다는 것입니다. 해서 pw의 길이를 찾기 위해 코드를 작성해 보면 위와 같이 작성이 가능합니다. _ 언더바를 1개씩 늘려가면서 패스워드의 길이를 찾는 것인데.... 100번을 해도 찾을 수가 없었습니다. 해서 패스워드가 길지 않기를 바라며 손수 노가다를 해봤는데 8번째에서 뜬금없이 guest..

    (Lord of SQLInjection) giant 문제

    (Lord of SQLInjection) giant 문제입니다. 이번에는 shit 부분에 삽입을 하는 방식인데 from 과 prob_giant 가 붙어있어서 쿼리가 실행인 안되고 있습니다. 즉 공백을 넣어줘야 한다는 것인데 필터링에서 공백, \n \t \r 을 막고 있습니다. https://g-idler.tistory.com/61 [SQL Injection] 필터링 우회 방법 모음 1. 공백 문자 우회 1) Line Feed (\n) - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자 - URL Encoding: %0a - ex) no=1%0aor%0aid='admin' 2) Tab (\t) - 커서를 한 tab만큼 이동시키.. g-idler.tistory.com 주석, 괄호,..

    (Lord of SQLInjection) bugbear 문제

    (Lord of SQLInjection) bugbear 문제입니다. 이번문제도 no가 있는걸보니 이부분을 활용하면 될것같습니다. 필터링을 먼저보면 싱글쿼터, substr ascii = or and like 0x 까지 필터링이 엄청 늘었습니다. 우회방법은 이전에 학습것 제외하고 새로우회할 필터링은 공백과 like 입니다. 공백은 abc 사이에 공백을 넣고싶을때 (a)b(c)형태로 괄호를 사용하면되고 like 대신 in ("admin")을 사용하면 된다고 합니다. 그럼 이를 토대로 admin을 출력하는 코드를 작성해보면 no=-1||(id)in("admin")# 위 코드가 되는데 값을 전달하면 admin이 출력됩니다. 이를 토대로 length를 사용해 pw워드의 길이와 값을 찾는 코드를 작성해주면 no=-1..

    (Lord of SQLInjection) darkknight 문제

    (Lord of SQLInjection) darkknight 문제입니다. 이번에도 블라인드 SQL로 해결하는 문제입니다. 필터링을 보면 먼저 싱글쿼터( ' )를 막고 있으며 substr ascii = 를 막고 있으니 싱글쿼터(') substr ascii = 은 각각 더블쿼터(") mid ord like 로 우회하겠습니다. 일단 admin을 출력하는 구문을 작성하는 것이 먼저이니 더블쿼터를 사용해야 하는데 pw는 이미 싱글쿼터가 열려있으니 no부분에 삽입하는 방식으로 해결해야 할것 같습니다. no=-1||id like "admin"# 필터링에 안걸리게 더블쿼터로 admin을 감싸는 방식으로 값을 전달해보면 admin이 출력되었으니 pw길이와 값을 찾는 코드를 작성해보면 no=-1||id like "admi..

    (Lord of SQLInjection) golem 문제

    (Lord of SQLInjection) golem 문제입니다. 이번 문제도 이전 문제와 마찬가지로 코드가 두개에 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); 위의 코드로 보아 패스워드가 정확히 일치해야만 해결되는 블라인드 SQL 인젝션 문제입니다. 일단 필터링을 보겠습니다. 이번 필터링은 or and substr ( = 가 필터링으로 걸려있습니다. 이전에 찾아본 필터링 우회로 or and substr = 은 || && mid like 로 해결이 가능하다는 것을 알고 있습니다. 이를 토대로 먼저 admin을 출력이 가능한 코드를 작성해보면 pw='||id like 'admin'# 으로 작성이 되는데 URL 인코딩을 거치면 p..

    (Lord of SQLInjection) skeleton 문제

    (Lord of SQLInjection) skeleton 문제입니다. 코드의 필터링부터 해석해보면 prob, _ , . , ( , ) 이 필터링 되고있습니다. query도 살펴보면 id=guest로 고정되어 있는데 solve가 실행되려면 id=admin이 되어야 한다고 합니다. 그렇다면 or 을 사용해 쿼리 값을 False로 만든다음 id=admin을 입력하면 문제가 해결될 것입니다. 그런데 우리가 입력할 pw 뒤에 and 1=0 구문으로 무조건 False가 나오게 되었습니다. 즉 뒤에 and 1=0을 무력화 시켜야 하므로 이를 해결하려면 주석처리가 필요한데 SQL 주석처리 키워드로 검색해 찾아보면 방법으로 #, -- - 등을 사용합니다. 위 내용들을 정리해 식을 작성해보면 ?pw=' or id='adm..

    (Lord of SQLInjection) vampire 문제

    (Lord of SQLInjection) vampire 문제입니다. 먼저 필터링 부분을 살펴보면 이전문제와 동일하게 싱글쿼터( ' )가 필터링 되고 있습니다. 다음으로 strtolower 함수를 사용했는데 이 함수는 대문자를 소문자로 바꾸는 함수입니다. 즉 이전문제 처럼 ADMIN으로 전달해도 admin으로 바꿘다는 것이죠 다음 코드를 살펴보면 필터링이 아닌 str_replace를 사용해 admin을 아예 지워버리고 있습니다. 이부분의 공격이 가능할것 같습니다. 이유는 replace의 함수 특징때문인데 이 함수는 문자열 "admin" 으로 판단하기에 ad나 min으로는 필터링에 걸리지 않는다는 것입니다. 해서 adadminmin 으로 입력한다면 중간에 괄호 친부분이 ad(admin)min 지워지면서 re..