WebHacking/Lord of SQL injection

Lord Of SQL Injection [ 19.Xavis ]

EunHwan 2017. 9. 16. 18:55





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

하지만, 한가지 다른점이 있습니다. 일단 비밀번호의 길이를 알아내보면 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