Wargame(Web)/Lord of SQLInjection

    (Lord of SQLInjection) alien 문제

    (Lord of SQLInjection) alien 문제입니다. 먼저 제공되는 소스코드를 보면 쿼리가 두개 존재합니다. 그런데 GET으로 받는 건 no한번뿐이며 한번 입력한 no가 첫번째 쿼리와 두번째 쿼리에 사용되고 있습니다. 문제를 해결하기 위해서는 어떻게 해야하는지 if($_GET['no']){ $r = mysqli_fetch_array(mysqli_query($db,$query)); if($r['id'] !== "admin") exit("sandbox1"); $r = mysqli_fetch_array(mysqli_query($db,$query)); if($r['id'] === "admin") exit("sandbox2"); $r = mysqli_fetch_array(mysqli_query($db,..

    (Lord of SQLInjection) zombie 문제

    (Lord of SQLInjection) zombie 문제입니다. 이전 ouroboros문제와 비슷한 코드입니다. 처음에는 콰인쿼리를 이용한 문제인가 싶어 여러 시도를 했는데 필터링을 보면 rol up join ace @ 가 필터링에 걸려 replace를 사용할수 없어 다른 방식이 필요하다는 것을 알았습니다. 먼저 ouroboros처럼 pw에 값이 존재하지 않는지 확인하기 위해 pw='||'1'='1 을 전달해보면 True임에도 어떠한 값도 출력되지 않는 것으로 pw에 값이 존재하지 않는 것을 확인했습니다. 일단 ouroboros와 다르게 언더바(_) 를 필터링 하고 있지 않아 infomation_schema를 사용해 하나씩 알아봤습니다. 가장먼저 테이블의 이름확인 가능한 아래 코드를 이용해 확인해보면 ..

    (Lord of SQLInjection) ouroboros 문제

    (Lord of SQLInjection) ouroboros 문제입니다. 먼저 이번문제는 라이트업을 참고해 해결한 문제입니다. 먼저 제공되는 필터링부터 보면 prob, _ , . , rollup, join, @ 을 막고 있습니다. pw의 값이 정확히 일치한다면 solve가 실행되어 문제가 해결된다고 하니 아래 구조를 이용해 pw를 하나씩 찾는 문제라고 생각했습니다. pw='' || '1'='1' 문제사이트에서 실행해보면 아무일도 일어나지 않으며 만약 pw가 비어있다면 union을 활용해야 하는데 이또한 어떻게 해야할지 감이 오지를 않았습니다. 이 문제를 먼저푼 지인의 도움으로 Quine라는 것을 활용한다는 것과 라이트업을 봐도 이해가 어렵다는 말을 들어 몇개의 라이트업을 참고해 정리하였습니다. Quine ..

    (Lord of SQLInjection) phantom 문제

    (Lord of SQLInjection) phantom 문제입니다. 먼저 제공되는 소스코드를 살펴보면

    (Lord of SQLInjection) frankenstein 문제

    (Lord of SQLInjection) frankenstein 문제입니다. 먼저 필터링을 살펴보면 prob , _ , . , ( , ) , union 을 필터링 하고 있습니다. 다음으로 코드를 보면 위 코드와 아래코드로 나뉘어 있으며 위 코드에서는 frankenstein으로 id가 고정되어 있지만 아래코드에서 문제해결을 위해서는 id=admin 이면서 pw의 값을 정확히 일치해야만 문제가 해결된다고 합니다. 일단 id를 admin으로 변경해야 했기에 ?pw=' || id='admin' and ? 위 구조처럼 pw에서 싱글쿼터(')로 먼저 id='admin'을 작성했습니다. 위코드에서 가장 아래쪽 if문을 살펴보면 error발생시 error을 출력해준다고 합니다. 이부분이 Error Based SQL 인..

    (Lord of SQLInjection) blue_dragon 문제

    (Lord of SQLInjection) blue_dragon 문제입니다. 제공되는 소스코드에서 먼저 필터링 부터 보면 id와 pw 두곳 모두 prob _ . 을 필터링 하고 있습니다. 그다음으로 내려가면 어떤 쿼리인지를 보여주는데 id와 pw를 입력받고 있습니다. 이후 쿼리를 실행한 뒤 if 구문으로 ' 와 \\ 를 필터링 해서 No Hack 이라는 결과를 출력하고 있습니다. 이부분을 이해하는데 상당히 오래걸렸습니다. 이문제에서 첫 걸음으로 생각 해야하는 부분은 쿼리를 실행하고 나서 필터링을 한다는 점입니다. 이러한 필터링 구문은 쿼리 실행전에 존재해 입력자체를 막는 경우가 보통이라 코드를 제대로 해석하지 못해 작성자는 이해하는데 오랜시간이 걸렸습니다. 정리하면 보통은 1번과 같은 구조인데 현재 소스코..

    (Lord of SQLInjection) red_dragon 문제

    (Lord of SQLInjection) red_dragon 문제입니다. 제공되는 코드를 살펴보면 id는 최대길이가 6까지 가능하며 넘어갈시 too long string 를 출력하고 있습니다. 길이가 짧은 만큼 no 부분을 활용하라는 문제같은데 no는 is_numeric()라는 함수로 숫자만을 입력받고 숫자가 아니라면 1을 출력하고 있습니다. 다음으로 query를 자세히 살펴보면 GET['id] 를 싱글쿼터 ' ' 로 감싸고 있으며 no는 감싸고 있지 않습니다. 우리의 목표는 한줄건너띈 부분을 보면 id가 admin인 값의 no값을 정확히 맞춘다면 solve("red_dragon") 문제가 해결된다고 합니다. 그럼 먼저 admin을 출력하는 것이 관건인데 이는 이전 문제에서 많이 사용했던 주석처리를 이용..

    (Lord of SQLInjection) green_dragon 문제

    (Lord of SQLInjection) green_dragon 문제입니다. 먼저 필터링을 살펴보면 prob, _, . , ' , " 가 필터링되고 있습니다. query가 실행되는 부분을 살펴보면 처음에는 GET방식으로 id pw를 입력받고 결과는 result라는 변수에 대입해 if문으로 한번더 id와 pw를 확인하는 구문을 실행하고 있습니다. 이때 query2를 페이지에 출력해주고 있는데 id가 admin이면 문제가 해결된다고 합니다. 문제를 천천히 살펴보다 아래 구문에 대해 익숙한 느낌을 받아 LOS의 이전문제 들을 찾아봤습니다. 그러다 이전에 풀었던 서큐버스 문제와 유사함을 찾을 수 있었습니다. https://skysquirrel.tistory.com/77 (Lord of SQLInjection) ..