이번문제는 블라인드 인젝션 문제이다. 1차적으로 pw의 길이를 알아내고 한글자씩 문자를 찾아내기로 한다.
sleep과 benchmark를 필터링하기 때문에 딜레이를 이용한 블라인드 인젝션은 불가능하다.
대신 if(mysql_error()) exit(mysql_error()); 코드가 처음으로 추가 되었는데, 에러 발생시 오류를 출력하는 기능의 조건문이다.
이 부분을 응용해서 공격하는 기법을 Error based SQL injection이라고 한단다.
에러가 발생시 오류를 출력하기 때문에 if문을 이용해서 조건이 참이될때만 에러가 나야만 블라인드 인젝션이 가능하다.=쿼리의 참, 거짓의 구분이 가능하다.(쿼리 문장에서부터 오류가나면 안됨. 거짓일 때도 오류가 나면 안됨. 무조건 참일때만)
여러 사람들이 select 1 union select 2 문을 사용하던데 본인은 pow()라는 숫자의n제곱 기능을 이용해서 참이 되면 연산 범위 오류가 나도록 했다.
아래와 같이 1부터 15까지는 정상적이 쿼리가 echo되었지만 16에서 오류가 출력되었다. 이 말은 조건문이 참이 되었다는 것을 뜻하고 pw의 길이는 16 이라는 것을 알 수 있었다.
아스키코드 범위를 초과하는 문자열이 나왔던 xavis문제 이후로 ord로 비교하는 버릇이 생겼다. 나름 좋은 점이 있는듯 하다.
예상하고 달랐던 점은 pw의 길이가 16이라고 했지만 5부터 16자리까지는 Null문자로 채워져 있었다.
'Web Hacking > Lord of SQL injection' 카테고리의 다른 글
24.los umaru (0) | 2018.04.03 |
---|---|
21.los dark_eyes (0) | 2018.04.02 |
19.los dragon (0) | 2018.03.30 |
18.los xavis (0) | 2018.03.29 |
17.los nightmare (0) | 2018.03.29 |