los - bugbear
·
Lord_of_SQL-Injections_I
필터링이 꽤 여러개 걸려 있다. ' ', 'or', 'and', 'like', '0x', 'substr', 'ascii', '=' 등등이 걸려있다. 이전 darkknight 문제와 비교해서 걸리는건 필터링에 'like'가 추가되었다는 점이기 때문에, 'like'만 우회하면 페이로드는 이전 문제와동일하다. 참고로 'like' 는 'IN" 연산자로 우회할 수 있다.
los - darkknight
·
Lord_of_SQL-Injections_I
"substr*", "ascii", "=" 그리고 싱글 쿼테이션(')이 필터링 되고 있다. 이전 문제에서 싱글 쿼테이션을 사용하던 이유는 입력받는 파라미터 값이 쿼리 내에서 싱글 쿼테이션 내에 포함되어 있기 때문이다. 예를 들어 위 소스 내에서 우리가 입력할 수 있는 pw 파라미터는 싱글 쿼테이션 내에 포함되어 있어서, pw 파라미터를 공격하려면 반드시 싱글 쿼테이션을 입력해서 문자열 처럼 인식되지 않게 해야 한다. 그러나 no 파라미터는 아무것도 없기 때문에, no 파라미터를 공격할 때에는 싱글 쿼테이션을 안 써도 된다. 문제는 "substr", "substring" 함수가 전부 필터링이 된다는 점이다. 그런데 사실 두 함수 모두 문자열을 자르기 위해서 사용하는 함수이기 때문에 한 글자씩 자르기만 한다..
los - golem
·
Lord_of_SQL-Injections_I
'or', 'and', 'substr', '=', 등 자주 사용하던 것들이 필터링 되어 있다. 필터링만 우회하면 기존의 blind sql injection 문제들과 크게 다른점은 없다. 우회 X 우회 O or || and && substr substring = LIKE
los - skeleton
·
Lord_of_SQL-Injections_I
id='guest' 값이 고정으로 들어가고, 입력한 pw 다음에 'and 1=0'이 실행된다. 마지막 'and 1=0' 조건이 거짓이 되고 쿼리 내 존재하는 모든 조건이 'and' 연산자로 묶여 있기 때문에 무조건 거짓이 된다. 따라서 뒤에 있는 조건을 실행되지 않게 하면서 id='admin'을 뽑으면 된다. http://localhost/skeleton_a857a5ab24431d6fb4a00577dac0f39c.php?pw=%27%20or%20id=%27admin%27%23
los - vampire
·
Lord_of_SQL-Injections_I
이전 'troll'과 유사한 문제이다. 'admin'을 str_replace 함수를 통해 필터링을 하고 있지만 역시 대소문자 구분에 따른 필터링은 하지 않는다. http://localhost/vampire_e3f1ef853da067db37f342f3a1881156.php?id=AdMin
los - troll
·
Lord_of_SQL-Injections_I
실행되는 쿼리 결과값이 id='admin' 일 때 클리어 되는 문제지만, 필터링 부분을 보면 'admin' 문자열 자체를 검사하고 있다. 'admin'을 입력해야 하는데, 'admin'을 필터링하고 있으니 말도 안된다고 생각할 수 있지만, 필터링 하는 함수를 보면 'admin' 만큼은 'ereg' 함수를 사용하고 있다. 해당 함수의 가장 큰 문제점은 대소문자 필터링이 불가능하다는 것이다. 즉, 'admin'은 필터링이 되어도 'AdMiN', 'admiN' 등은 필터링이 되지 않는다. http://localhost/troll_05b5eb65d94daf81c42dd44136cb0063.php?id=AdMiN
los - orge
·
Lord_of_SQL-Injections_I
blind sql-injection 인 것만 빼면 이전 darkelf와 크게 달라진 것은 없다.
los - darkelf
·
Lord_of_SQL-Injections_I
id='guest'로 고정되지만, 클리어는 'admin'을 원하고 있다. 이전처럼 'or' 연산자를 써야하는데 필터링 부분에 'or' 연산자가 추가되었다. 따라서 'or' 인듯, 'or 아닌 'or' 같은 역활을 하는 무언가를 입력해야 한다. (즉, 필터링 우회) http://localhost/darkelf_c6a5ed64c4f6a7a5595c24977376136b.php?pw=%27%20||%20id=%27admin%27%23
los - wolfman
·
Lord_of_SQL-Injections_I
필터링에 공백이 추가되었다. (공백을 URL Encoding 시키면 '%20'이 나옴) 쿼리에는 id값이 'guest' 로 고정되지만 클리어 조건은 'admin'인 것을 보아 goblin 문제랑 유사하다. 문제는 공백인데, sql injection을 연습할 때 가장 중요한 것은 필터링을 우회하는 것이다. 공백은 단순히 %20 뿐만 아니라 /**/, (), %0 등등 다르게 사용될 수 있는 것들이 무수히 많다. http://localhost/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27%0aor%0aid=%27admin%27%23
los - orc
·
Lord_of_SQL-Injections_I
클리어 조건을 보면 드디어 'pw'를 체크하기 시작한다. 필터링은 별로 신경 쓸 만한 것은 없지만 이전 문제들과 다르게 blind sql injection 문제인 것을 알 수 있다. 중간에 공백 라인을 기준으로 위쪽 부분은 blind sql-inejction 값이 참이면 "Hello admin"을 출력하고, 최종적으로 입력한 'pw'가 올바르면 아래쪽 부분에서 "ORC CLEAR"를 출력할 것이다.