뉴비에욤
shit 파라미터를 입력하지 않으면 기본적으로 쿼리 문법이 "from", "prob_giant" 사이에 공백이 없기 때문에 문법 오류가 발생한다. 그런데 클리어 조건을 보면 쿼리 결과가 '1234'면 되는데 이미 "1234"를 select 하고 있다. 따라서 shit 파라미터에 공백을 넣어주면 되는데, "%20, %0a, (), /**/" 전부 다 안된다. 공백을 의미하는 수 많은 문자열 중에 필터링이 안되는걸 골라 넣으면 된다. http://localhost/giant_18a08c3be1d1753de0cb157703f75a5e.php?shit=%0b
필터링이 꽤 여러개 걸려 있다. ' ', 'or', 'and', 'like', '0x', 'substr', 'ascii', '=' 등등이 걸려있다. 이전 darkknight 문제와 비교해서 걸리는건 필터링에 'like'가 추가되었다는 점이기 때문에, 'like'만 우회하면 페이로드는 이전 문제와동일하다. 참고로 'like' 는 'IN" 연산자로 우회할 수 있다.
"substr*", "ascii", "=" 그리고 싱글 쿼테이션(')이 필터링 되고 있다. 이전 문제에서 싱글 쿼테이션을 사용하던 이유는 입력받는 파라미터 값이 쿼리 내에서 싱글 쿼테이션 내에 포함되어 있기 때문이다. 예를 들어 위 소스 내에서 우리가 입력할 수 있는 pw 파라미터는 싱글 쿼테이션 내에 포함되어 있어서, pw 파라미터를 공격하려면 반드시 싱글 쿼테이션을 입력해서 문자열 처럼 인식되지 않게 해야 한다. 그러나 no 파라미터는 아무것도 없기 때문에, no 파라미터를 공격할 때에는 싱글 쿼테이션을 안 써도 된다. 문제는 "substr", "substring" 함수가 전부 필터링이 된다는 점이다. 그런데 사실 두 함수 모두 문자열을 자르기 위해서 사용하는 함수이기 때문에 한 글자씩 자르기만 한다..