목록Lord_of_SQL-Injections_I (27)
뉴비에욤
blind sql-injection 인 것만 빼면 이전 darkelf와 크게 달라진 것은 없다.
id='guest'로 고정되지만, 클리어는 'admin'을 원하고 있다. 이전처럼 'or' 연산자를 써야하는데 필터링 부분에 'or' 연산자가 추가되었다. 따라서 'or' 인듯, 'or 아닌 'or' 같은 역활을 하는 무언가를 입력해야 한다. (즉, 필터링 우회) http://localhost/darkelf_c6a5ed64c4f6a7a5595c24977376136b.php?pw=%27%20||%20id=%27admin%27%23
필터링에 공백이 추가되었다. (공백을 URL Encoding 시키면 '%20'이 나옴) 쿼리에는 id값이 'guest' 로 고정되지만 클리어 조건은 'admin'인 것을 보아 goblin 문제랑 유사하다. 문제는 공백인데, sql injection을 연습할 때 가장 중요한 것은 필터링을 우회하는 것이다. 공백은 단순히 %20 뿐만 아니라 /**/, (), %0 등등 다르게 사용될 수 있는 것들이 무수히 많다. http://localhost/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27%0aor%0aid=%27admin%27%23
클리어 조건을 보면 드디어 'pw'를 체크하기 시작한다. 필터링은 별로 신경 쓸 만한 것은 없지만 이전 문제들과 다르게 blind sql injection 문제인 것을 알 수 있다. 중간에 공백 라인을 기준으로 위쪽 부분은 blind sql-inejction 값이 참이면 "Hello admin"을 출력하고, 최종적으로 입력한 'pw'가 올바르면 아래쪽 부분에서 "ORC CLEAR"를 출력할 것이다.
쿼리에서는 id 값이' guest'로 고정되어 실행되는데, 클리어 조건은 'admin'을 원하고 있다. no 파라미터 값을 2로 입력하면 "Hello guest"가 출력되는것으로 보아 admin의 no 값은 1로 추정할 수 있다. 그런데 no 파라미터 값을 1로 입력하면 논리 연산이 거짓으로 되고, no=2 or 1 로 입력하면 쿼리 결과가 'admin','guest' 둘 다 나오기 때문에 쿼리 결과의 개수를 제한시켜야 한다. http://localhost/goblin_e5afb87a6716708e3af46a849517afdc.php?no=2%20or%201%20limit%201,1
필터링은 무시하고, 클리어 조건을 보면 쿼리에 대한 결과 값 중 id 값이 'admin' 이여야만 한다. 다행히 'pw'는 체크하지 않기 때문에 간단하게 클리어 할 수 있다. http://localhost/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=1%27%20or%20%271=1%27%20and%20id=%27admin%27%23
가장 기본적인 필터링이 적용된 문제이다. "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 쿼리에 대한 실행 결과가 있기만 하면 클리어 되는 문제이기 때문에 가장 기본적인 id=1' or '1=1'"# 을 입력한다. http://localhost/gremlin_280c5552de8b681110e9287421b834fd.php?id=1%27%20or%20%271=1%27%23