Web/Lord of SQLInjection
-
Lord of SQLInjection-4 (orc)Web/Lord of SQLInjection 2022. 3. 12. 17:31
4단계(orc)의 경우 같은 쿼리가 2번 수행된다. 다만 1번째 쿼리에는 필터링이 적용되어있지 않고 2번째 쿼리에서만 addslashes를 통한필터링이 적용되어있다. database에 쿼리를 수행한 결과와 파라미터의 값이 동일해야 solve를 호출하기때문에 admin의 정확한 password를 알아야만 문제 해결이 가능하다. 이 경우 필터링이 적용되지 않은 1번째 쿼리의 결과를 통해 admin의 password를 알아내야 한다. database의 내용을 추출하는 방법에는 여러가지가 있지만 이번 단계의 경우 substr()을 통해 admin 사용자의 pw를 한 자리씩 비교해 password를 추출했다.(스크립트를 돌려본 결과 비밀번호에 특수문자나 공백문자 등은 포함되어 있지 않아 data에서 제외함) ..
-
Lord of SQLInjection-3 (goblin)Web/Lord of SQLInjection 2022. 3. 12. 16:49
id는 guest로 고정되어 있으며 no 파라미터의 비교를 통해 사용자를 식별하고 있다. $result['id']가 admin일 경우 문제가 해결된다. 이전 단계와는 달리 문자열에 사용되는 특수문자(single quote, double quote, back quote)에 대한 필터링이 존재해 admin이라는 문자형 데이터를 직접 입력하는것은 불가능하다. 하지만 위와 같이 hex value나 mysql에서 지원하는 각종 함수 등을 이용하면 간접적으로 문자형 데이터 입력이 가능하다.
-
Lord of SQLInjection-2 (cobolt)Web/Lord of SQLInjection 2022. 3. 12. 16:27
[풀이] 1단계와 마찬가지로 문제풀이에 방해가 되는 필터링은 없으며 사용자의 입력값이 그대로 sql 구문으로써 해석되는 것을 확인할 수 있다. 다양한 풀이가 존재하지만 간단하게 id 파라미터에 인젝션을 시도하면 문제 해결이 가능하다. * mysql의 경우 -- 주석 뒤에 공백이 필요하다. (공백은 URL encoding 시 %20으로 변환된다) 다만 pw파라미터를 통해 인젝션을 시도할 경우 사용자의 입력값이 md5 메소드의 인자로 들어가기 때문에 ')를 통해 메소드를 벗어나야 한다.
-
Lord of SQLInjection-1 (gremlin)Web/Lord of SQLInjection 2022. 3. 12. 16:14
[풀이] login_chk()를 통해 사용자 로그인 여부(세션확인)를 확인하고 미로그인 상태라면 상위 디렉토리(홈페이지)로 사용자를 리다이렉트한다. 또, 정규표현식을 통해 다른 테이블로의 접근을 차단해 다른 단계의 문제풀이를 차단해놓은 것을 확인할 수 있다. 그 외에 사용자 입력값을 필터링하는 로직은 없기 때문에 그냥 인젝션을 시도하면 된다. $result['id']가 참이기만 하면 문제 해결이 가능하다. 풀이는 다양하지만 gremlin의 경우 union을 이용해 문제를 해결했다.