정보보안

DVWA 실습 (Brute Force)

#fdd4ff 2023. 10. 19. 17:13

방문자의 통계를 보니 정보보안 포스팅을 많이 보는 것같았다. (하나만 올리기도 했고 별 내용이 없어서 너무 죄송했습니다...ㅠㅠ)
KISIA 에서 교육받은 내용을 노션에 정리해놓았었는데, 블로그에도 올리면 좋을 것같아 포스팅해본다.
(내용이 다소 틀릴 수도 있습니다..) 
!당연한 얘기지만 해당 포스팅의 내용을 악용해서는 안됩니다!

 

Brute Force

사용자 패스워드를 알아내기 위한 공격
- dictionary 공격
- 가장 많이 사용하는 비밀번호를 먼저 대입한다. (맞을 확률이 높으니까)

칼리 리눅스를 통해 DVWA에 접속한다. (/opt/lampp/lampp restart 설정을 해야 DVWA에 접속)

Security Level 조정을 통해 문제의 난이도를 바꿀 수 있다.

 

Brute Force 탭을 클릭하여 문제를 살펴보자.
해당 문제를 풀 때의 상황은 2가지로 나뉠 수 있겠다.

1. 계정은 알고 있는데 비밀번호를 brute force를 통해 알아보기
2. 계정도 모르니 dictionary attack 해보기

오늘은 brute force만 다뤄보려고 한다. (노션에서 옮기는 게 너무 힘들다 ㅠㅠ)
우선 Username과 Password를 모르니 임의로 입력해보면 incorrect라는 오류 메세지가 뜬다.

그렇다면 우리는 Username와 Password를 알아내는 것이 목적이 되겠다.
가장 밑에 있는 View Source 버튼을 클릭하면 해당 페이지의 웹 소스를 확인할 수 있다.

코드를 보면 입력값에 대한 검증 부분이 없다.

⚠️ 입력된 값을 검증하는 절차가 없는 것이 위 코드의 큰 취약점

칼리 리눅스에 설치 되어있는  burpsuite 프로그램 실행하여 brute Force 공격을 실행해보자.
temp 프로젝트를 만든 후 intersect 는 off로 설정한다. (Proxy의 옵션에서 Proxy listener 가 설정되어있는지 확인)

그 후 웹 브라우저로 돌아가 FoxyProxy를 확인하여 프록시를 켜준다.

다시 로그인 시도를 한 뒤, burpsuite 프로그램에서의 HTTP history를 확인해보자.

밑에 RAW 값을 보면 내가 입력한 username과 password를 확인할 수 있다.

HTTP history에 나온 것들을 오른쪽 클릭 후 Send to Intruder를 클릭

postions 탭에 들어가면 아까의 RAW의 값이 뜨는 것을 확인할 수 있다.
얘네를 통해 입력할 값들을 조작해서 넣을 수 있다.

⚠️ 변경할 수 있는 값들은 $같이 생긴 애들로 싸여있다. ⇒ 공격할 수 있는 포인트!

brute force 를 통해 비밀번호 획득하기
내가 대입할 부분은 $로 남겨두고 나머지는 다 클리어하기
(Clear 버튼 클릭  > 내가 대입할 값만 선택후 Add 버튼 클릭)

자 그러면 이제 무엇을 대입해야할 지 결정을 해야한다. 
당연히 맞는 Username과 password를 찾아서 대입해야겠지.


payloads 탭 클릭 > 대입할 것이 몇 개냐에 따라 payload set이 달라진다.
payload type brute forcer 클릭

- 대입할 문자 종류와 길이들을 설정할 수 있다.
- length에 따라 payload count가 늘어난다.
- 많아지면 많아질 수록 count는 unknown이 되기도 한다.

start attack을 하여 brute force 시작
Results 결과들을 보면 대입한 값인 payload와 status, error 유무, time out, length 뿐인데
비밀번호가 맞다고 저기서 어떻게 구분할 수가 있을까?

🔑 Length를 보고 판단해야 한다.
response 메세지의 길이를 나타내는 것이기 때문에 판별이 가능한 것.

그러면 Length 길이로 정렬해서 길이가 다른 payload를 찾으면 내가 원하는 username이나 password 값을 찾을 수 있다.