이번 문제의 특징이라면 지정된 패턴을 검색하는 like문과 regex문이 필터링된다.
정규 표현식 (Regexp)문은 특정한 규칙으로 문자열을 찾아내는 것입니다. 예를 들면 Y/N으로 데이터를 구분해야 할 때 소문자도 비교해야하는경우,
정규표현식으로 [yY] 조건을 통해 y 또는 Y만 구분되도록 하는 것.
항상 블라인드 인젝션을 할때마다 pw의 길이가 8이여서 대입해 보았지만 실패하고 추측할 수 없어서 코드를 짰고 pw길이는 40으로 나왔다.
파이썬 스크립트를 실행해봤을때 문자열의 첫번째 문자부터 아스키코드 범위를 벗어난 문자임을 알 수 있었다. db에는 문자형태로 저장되기때문에 정확히 한 문자가 몇바이트의 어떤 값을 가지는지 정수로 표현하여 알 수 있는 ord()를 이용해서 첫번째 문자를 분석해보기로 한다.
문자가 1바이트의 표현 영역을 벗어나진 않았다. 문자 하나당 4바이트를 사용해서 pw길이가 40으로 나오긴 했지만 실제로 문자 각각은 125~255사이에 값을 가졌다.
그렇다면 왜 substr(pw,1,1) <= 으로 가져왔을때는 4바이트 문자를 하나씩 가져오고 length(pw)<== 할때는 문자열길이를 40으로 세는가?
각각의 함수의 작동방식의 차이라고 추측된다.
아스키코드를 벗어나고 255이하의 범위를 가진 ansi코드 차트를 이용했다. 물론 유니코드 u+00xx 차트를 이용해도 무관했다.
'Web Hacking > Lord of SQL injection' 카테고리의 다른 글
20.los iron_golem (0) | 2018.03.30 |
---|---|
19.los dragon (0) | 2018.03.30 |
17.los nightmare (0) | 2018.03.29 |
16.los succubus (0) | 2018.03.28 |
15.los zombie_assassin (0) | 2018.03.27 |