본문 바로가기

Webhacking

[LOS] Level 4 Orc 문제풀이

[힌트]

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