los - zombie assassin
·
Lord_of_SQL-Injections_I
적절한 필터링과 함께, id와 pw 파라미터에서의 싱글 쿼테이션 사용 또한 제한되고 있다. 그리고 클리어 조건은 쿼리 결과 id 값이 존재만 하면 된다.(admin 이던 guest 이던 상관 없음) 사실 이 문제는 PHP의 버전 취약점도 내포한다. PHP 5.3 버전에서는 ereg 함수를 이용하여 문자열을 비교할 때 앞에 널문자가 포함되어 있으면 비교가 되지 않는다. 즉, " ' " 은 필터링이 되어도 " %00' " 은 필터링이 되지 않는다. http://localhost/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php?id=%00%27%20or%20id%20LIKE%20%27%%27%23
los - assassin
·
Lord_of_SQL-Injections_I
필터링 부분이 확 줄은 대신에 쿼리에서 pw를 비교하는데 '=" 대신 "like" 연산자를 사용하고 있다. 그리고 쿼리 결과 내 id 값에 따라 "Hello guest", "Hello admin" 을 출력하고 있다. like 연산자에서 비교할 문자열은 정규식을 사용하여 비교하는 것이 가능하기 때문에 비밀번호 각 자리수마다 문자열을 대입해서 결과가 id='admin' 인 것을 뽑아내면 된다.
los - giant
·
Lord_of_SQL-Injections_I
shit 파라미터를 입력하지 않으면 기본적으로 쿼리 문법이 "from", "prob_giant" 사이에 공백이 없기 때문에 문법 오류가 발생한다. 그런데 클리어 조건을 보면 쿼리 결과가 '1234'면 되는데 이미 "1234"를 select 하고 있다. 따라서 shit 파라미터에 공백을 넣어주면 되는데, "%20, %0a, (), /**/" 전부 다 안된다. 공백을 의미하는 수 많은 문자열 중에 필터링이 안되는걸 골라 넣으면 된다. http://localhost/giant_18a08c3be1d1753de0cb157703f75a5e.php?shit=%0b