문제를 보자.
전 문제와 비슷해보인다.
sleep과 benchmark, _가 막힌것으로 보아 time based는 아니다.
error based를 이용해야하는데 이전 문제를 풀 때 사용한 if문이 막혔다.
이전과 다른 점이라면 exit() 안에 mysql_error()가 없어서 정확히 어떤 에러가 나왔는지는 알 수 없다.
하지만 뭐.. 에러가 나냐 안나냐만 알면 되므로 그건 중요하지 않다!
먼저 알아본 것은 if와 case 대신 사용할 수 있는 함수가 있는지였다.
그 결과 나온 함수들은 coalesce() , nvl() 두가지인데 nvl()함수는 오라클 전용이란다.. ( mysql에서 같은 의미의 함수는 ifnull() )
* coalesce()함수는 처음 파라미터부터 시작하여 null이 아닌 값을 출력해준다고 한다.
ex) coalesce(null,1,2.5,"test") 의 경우 1이 출력
coalesce(null,null,null,3,"test') 의 경우 3이 출력
하지만 이 함수의 경우 에러를 출력시키지 않는다는 함정이 있다..
우리는 에러를 출력시켜야한단 말이다 ㅠㅠ
일단 union 과 select를 막지 않았으므로 아까처럼 select 1 union select 2를 사용하는 것 아닐까?
query : select id from prob_dark_eyes where id='admin' and pw='' or id='admin' and (select 1 union select 2 where length(pw)>100)#'
이와 같이 진행하면 된다.
만약 pw의 길이가 100이 넘는다면 select 2도 동작을 하여 and부분에 union으로 두가지 select가 되어 에러가 출력된다.
query : select id from prob_dark_eyes where id='admin' and pw='' or id='admin' and (select 1 union select 2 where length(pw)=8)#'
해당 쿼리 실행시 에러가 발생되어 빈 화면이 떴다. where 부분의 조건이 맞아 select 2가 동작했기 때문!
efficient blind sql injection를 이용하여 문제 해결
'Solve Problem > LOS' 카테고리의 다른 글
[LOS] 문제풀이 11번 - 20번 (0) | 2019.05.26 |
---|---|
[LOS] 문제풀이 1번 - 10번 (0) | 2019.05.10 |
[LOS] 21번 문제 (0) | 2018.02.22 |
[LOS] 20번 문제 (0) | 2018.02.14 |
[LOS] 19번 문제 (0) | 2018.02.11 |