Wargame(Web)/Lord of SQLInjection

    (Lord of SQLInjection) troll문제

    (Lord of SQLInjection) troll문제입니다. 사이트에 접속해 코드를 살펴보면 ( ' ) 싱글쿼터와 admin이 필터링 되어있습니다. 위 두가지를 사용하지 않고 id=admin 을 만들라는 것인데 이전 문제에서 SQL구조를 공부하다 보니 잊지 말아야 되는 부분이 있었는데 SQL은 대소문자를 구분하지 못한다는 것입니다. 즉 admin=ADMIN은 True가 된다는 것이죠 필터링에서는 admin만을 체크하고 있으므로 ADMIN으로 값을 전달해보면 문제가 해결되었습니다.

    (Lord of SQLInjection) orag문제

    (Lord of SQLInjection) orag문제입니다. 먼저 코드를 봤을때 눈에 확들어오는게 코드가 두개라는 것입니다. 중간에 빈칸을 기준으로 위 코드 아래코드라 부르겠습니다. 먼저 위 코드는 필터링으로 or and 를 막고 있으며 id값이 guest로 고정되어 있습니다. 위 코드는 이전 문제 울프맨과 다크엘프와 같은 결의 코드이니 비슷한 방식으로 해결이 가능 할 것입니다. 다음으로 아래코드를 살펴보면 add슬래시라는 함수로 pw값을 감싸고 있습니다. add슬래시라는 함수가 무엇인지는 검색을 통해 알아보니 https://blog.naver.com/crehacktive3/221104369034 PHP 환경에서 addslashes() 함수, mysql_real_escape_string() 함수, mag..

    (Lord of SQLInjection) darkelf문제

    (Lord of SQLInjection) darkelf문제입니다. 이전 울프맨 문제와 비슷한 결의 문제입니다. 6번째 줄 코드를 보면 or and를 필터링하고있습니다. 울프맨과 똑같이 or 을 || 형태로 사용하면 바로 해결될것 같습니다. 이전 울프맨을 해결할때 썻던 pw='||id='admin 을 그대로 전달해보면 문제가 해결되었습니다. 라이트업이라고 하기에 너무 빈약한데 울프맨에서 이미 or을 || 형태로 바꾸는 법을 배워서 금방해결이 가능했습니다.

    (Lord of SQLInjection) wolfman문제

    (Lord of SQLInjection) wolfman문제입니다. 소스코드를 먼저 해석해보면 필터링으로 prob, _ , 점(.), ( , ) 가 필터링되어 사용시 No hack이 출력 공백을 사용시 No whitespace 가 출력됩니다. 가장 마지막부근을 보면 id=='admin' 이 된다면 문제가 해결된다고 합니다. 그렇다면 우리에게 필요한것은 공백을 사용하지 않거나 우회하는 방법입니다. 일단 id가 admin이 되도록 인젝션코드를 작성해보면 pw=' or id='admin 으로 작성하면 될것입니다. or을 그대로 사용시 공백이 필요하기에 or 우회를 키워드로 찾아보면 || 형태로 사용하는 방식이 있습니다. || 형태로 사용시에 띄어쓰기가 필요없다는 부분을 알게되었고 이를 이용해 식을 작성하면 pw..

    (Lord of SQLInjection) orc 문제

    (Lord of SQLInjection) orc 문제입니다. 일단 문제에 접속해보면 이전 문제와는 다르게 코드가 2개로 보입니다. 윗줄 코드와 아랫줄 코드로 나눌 수 있는데 짧게 해석하자면 id가 admin으로 쿼리가 True값이 되면 Hello admin이 출력되지만 아래 코드에서 우리가 입력한 pw의 값이 db에 있는 admin의 pw값과 같을 경우에면 solve("orc")가 출력되면서 문제가 해결된다고 합니다. 즉 이전처럼 주석처리라던가 우회하는 방식으로는 해결이 불가능한 블라인드 SQL문제라고 이해할 수 있습니다. 또한 이경우에는 정확한 pw값을 전부 찾아서 입력해야만 하는 문제입니다. 작성자는 드림핵에서 이러한 문제를 학습한적이 있는데 이진탐색과 비트연산등 여러가지 방식으로 해결이 가능하다고 ..

    (Lord of SQLInjection) goblin 문제

    (Lord of SQLInjection) goblin 문제입니다. 문제사이트에 접속하면 일단 소스코드부터 해석해봐야 겠죠? 첫 필터링은 이전 문제들과 같은 필터링으로 DB공격을 막는건데 다음 필터링이 새로보는 문제입니다. ' " `를 막는 필터링입니다. 즉 이전문제에서 사용한 ' -- and pw=' ' 같은 형태는 어렵다고 해석이 가능합니다. 게다가 쿼리를 자세히보면 where id ='guest' and no= 형태로 id값은 guest로 고정되어 있는데 우리가 접속해야하는 id는 admin 입니다. 이부분이 힌트이자 문제인데 우리는 no만을 입력해야하지만 and 형태로 연결되어 있으므로 다른 방식이 가능합니다. T and F or T 형태 인데요 and 는 T T 일때 T를 출력하는데 or 은 T ..

    (Lord of SQLInjection) cobolt 문제

    (Lord of SQLInjection) cobolt 문제입니다. 문제사이트에 접속하면 이전 고블린문제와 같은 형태로 이루어져있습니다. 소스코드 부터 해석해보겠습니다. 고블린문제 처럼 필터링이 걸려있는데 같은 필터링인것으로 보아 데이터베이스 자체를 공격하거나 조회하지 말라는 걸로 볼 수 있습니다. 쿼리 부분을 자세히보면 id와 pw를 GET방식으로 입력받는데 id가 admin이어야 접속이 되며 pw 워드는 입력받은 값을 md5 형태로 자동암호화 합니다. md5에 대해 알아보면 md5는 암호화만 존재할 뿐 복호화가 존재하지 않는 암호화 방식이라 찾는것이 어려우니 이전 고블린 문제처럼 and 부분을 뒷부분 부터 무력화화는 주석처리 공격을 시도해보겠습니다. 역시 주석처리 공격은 id와 pw를 동시에 입력받는 ..

    (Lord of SQLInjection) gremlin 문제

    (Lord of SQLInjection) gremlin 문제입니다. 문제 사이트에 접속하면 소스코드와 맨윗단에 쿼리가 어떻게 실행되는지 출력되어 있습니다. 먼저 소스코드를 해석해보자면 prob, _ , . , \ 등이 필터링 되어 있고 이를 사용하면 No Hack 가 출력된다는 군요 즉 from 절을 보면 알 수 있듯이 prob을 이용한 테이블 데이터베이스의 공격은 하지말라는 걸로 이해할 수 있습니다. 그럼 문제해결을 위해 봐야할 부분은 id 와 pw 를 GET방식으로 받으며 두개가 일치할 시 문제가 해결되는 것을 볼 수 있습니다. 가장 간단한 문제인데 id='' and pw='' 를 모두 받는 형태로 이루어져 있어 주석을 이용한 공격이 가능합니다. 즉 id만 맞다면 주석처리를 이용해 and 부터 뒷부분..