웹고트 Injection flow - Blind String SQL Injection
Wargame | CTF/WebHacking

웹고트 Injection flow - Blind String SQL Injection

아래 양식을 통해 사용자는 계좌 번호를 입력하고 계좌 번호가 유효한지 여부를 결정할 수 있습니다. 이 양식을 사용하여 참 / ​​거짓 테스트를 개발하여 데이터베이스의 다른 항목을 검사하십시오.

참조 값 : 'A'= 65 'Z'= 90 'a'= 97 'z'= 122

목표는 cc_number가 4321432143214321 인 행에 대한 테이블 핀의 필드 이름 값을 찾는 것입니다.이 필드는 varchar 유형의 문자열입니다. 발견 된 이름을 공과에 합격하도록 양식에 기입하십시오. 검색된 이름 만 양식 필드에 입력해야 철자 및 대소 문자에주의를 기울여야합니다.

SUBSTIRING 함수는 문자열을 자르는 함수로, 함수 원형은 다음과 같습니다.  

SUBSTRING(컬럼 또는 문자열, 시작위치, 길이) 

101 and (SUBSTRING((select name from pins where cc_number=4321432143214321),1,1)>'A') 해당 SQL문을 주입하여 첫번째 글자가 A보다 큰지(아스키값) 질의했더니 valid가 떳네요. 일단 첫글자는 'A' 이상의 문자입니다.

101 and (SUBSTRING((select name from pins where cc_number=4321432143214321),1,1)>'Z') 를 썼더니 Invalid가 떴습니다. 첫번째 문자는 A와 Z 사이임을 알 수 있습니다.

여러 시도를 통하여 첫번째 문자는 J임을 알아냈습니다. 이런식으로 계속 한글자씩 노가다를 통하여 해당 cc_number에 해당하는 사용자 이름을 찾아줍니다. 

101 and ((select name from pins where cc_number='4321432143214321')='Jill') 최종적으로 Jill 이라는걸 알아 냈습니다. 사용자의 이름이 4글자라서 참 다행이네요