Lord Of SQL Injection [ 19.Xavis ]

2017. 9. 16. 18:55WebHacking/Lord of SQL injection





이전 단계에서 여러번 풀었었던 비밀번호를 추측해내는 문제입니다

하지만, 한가지 다른점이 있습니다. 일단 비밀번호의 길이를 알아내보면 40(byte)입니다



비밀번호가 상당히 기네요 ascii 함수나 hex함수를 이용해서 비밀번호를 추측해보겠습니다



SELECT id FROM prob_xavis WHERE ascii( substr( pw , 1 , 1 ) )=0 %23

=> 패스워드의 첫번째 글자부터 한개의 문자를 추출하여 아스키코드 16진수로 변환

=> 문자들의 처음문자부터 자리수 모든 문자들이 0값입니다 왜이럴까요?


현재 문제에서 비밀번호가 유니코드로 되어있어서 입니다. 

아래 예를 확인해보겠습니다



예를 들어서, U+00b8 이라는 유니코드 문자를 hex()함수의 인자로 넣으면? hex(U+00b8) = 00 

앞글자 1바이트만 16진수로 변환하여 출력해줍니다. 따라서 모든 문자들이 00 만을 반환하게 되어 비밀번호를 추측할 수 없습니다

( 아스키코드도 1byte만 가져와서 반환하는 동일한 방식으로 동작 )

hex()함수나 ascii()함수가 아닌 ord() 함수를 사용하면 온전한 문자를 얻을 수 있다

=> ord(U+00b8) = 184 ( 아스키코드 10진수 값 )



1> 184        %b8 

2> 249 %f9 

3> 197 %c5 

4> 176 %b0 

5> 198  %c6

6> 208  %d0

7> 196  %c4

8> 161  %a1

9> 164  %a4

10> 187  %bb