반응형


문제를 보자.

전 문제와 비슷해보인다.

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
블로그 이미지

rootable

,