[힌트]
1. 주석처리
# : %23, ' : %27
2. Blind SQL을 통해서 패스워드를 한글자 한글자 비교해서 찾아야 함
3. length()를 사용해 패스워드 길이를 찾아야 함
length() 사용법 : ex) length('pw') = 5 -> 반환 값 5일 경우 1(True), 아닐 경우 0(False)
4. ascii와 substr을 이용해서 각 자리마다 하나씩 패스워드 찾기
ascii : Ascii code 표를 이용해서 문자를 10진수로 변경할 수 있다.
ex) ascii('a') = 97 -> 반환 값 : 1(True)
substr : 문자열에서 일부 문자열을 추출한다.
ex) substr('pw', 1, 1) -> 반환 값 : 'p'
ex) substr('pw', 1, 2) -> 반화 값 : 'pw'
id : admin으로 이미 알려줘있고, pw가 맞아야만 문제가 풀리는 것을 볼 수 있다.
' or 1=1#을 적용해도 admin의 패스워드와 비교하기 때문에, 패스워드를 하나하나 알아낼 수 밖에 없다.
패스워드를 알아내기 위해서는 일단 패스워드의 길이가 몇자리인지를 알아야 한다.
길이를 알아내기 위해서는 [힌트]에 적어놨듯이, length()를 사용해야 한다.
pw=' or length(pw) > 5#
위의 예문과 같은 입력을 통해, 값을 비교하고, 정확한 길이를 알아낸다.
pw=' or length(pw) = 8#을 입력 시 위와 같은 결과가 뜨는 것을 확인할 수 있다.
그 후 ascii와 substr을 이용해서 패스워드를 하나씩 비교해서 찾아보았다.
ascii(substr(pw,1,1)=0
이런 식으로 입력을 통해 계정의 패스워드를 알아올 수 있다.
여기서 주의할 점은, id='admin'을 조건으로 명시하지 않는다면, 다른 계정의 패스워드를 받아오기 때문에
잘못된 결과를 가져오게 된다. 따라서 앞에 문장이 거짓으로 해놓았다면, or 뒷문장에는 꼭 admin 조건을 추가해주어야 함을 잊지 말자.
정답
Blind SQL문제는 확실히 Python 코딩을 통해서 푸는 것이 좋아보인다...
진짜 해당 문제 확인하고 비교하고 하면서 2시간은 넘게 소요된 것 같다..
'Webhacking' 카테고리의 다른 글
[LOS] Level 6 darkelf 문제풀이 (0) | 2019.05.31 |
---|---|
[LOS] Level 5 wolfman 문제풀이 (0) | 2019.05.31 |
[LOS] Level 3 goblin 문제풀이 (0) | 2019.05.24 |
[LOS] Level 2 Cobolt 문제풀이 (0) | 2019.05.24 |
[LOS]Level1 gremlin 문제풀이 (0) | 2019.05.24 |