los - giant
·
Lord_of_SQL-Injections_I
shit 파라미터를 입력하지 않으면 기본적으로 쿼리 문법이 "from", "prob_giant" 사이에 공백이 없기 때문에 문법 오류가 발생한다. 그런데 클리어 조건을 보면 쿼리 결과가 '1234'면 되는데 이미 "1234"를 select 하고 있다. 따라서 shit 파라미터에 공백을 넣어주면 되는데, "%20, %0a, (), /**/" 전부 다 안된다. 공백을 의미하는 수 많은 문자열 중에 필터링이 안되는걸 골라 넣으면 된다. http://localhost/giant_18a08c3be1d1753de0cb157703f75a5e.php?shit=%0b
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