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