TeamH4C

[빡공팟 5기] W5 : DVWA 실습 - Brute Force

이유갬 2022. 10. 18. 21:39

[DVWA 실습환경]

가상머신에서 kali Linux 로 Docker 를 이용하여 서버를 구축했다.

 

[Brute Force 공격의 정의]

무차별 대입 공격이라고 불리며

특정한 암호 값을 알아내기 위해서 가능한 값을 모두 대입하는 것을 말한다.

하지만, 비밀번호의 자릿수가 길고 복잡한 경우에는 시간이 매우 오래 걸리고 컴퓨팅 성능이 중요하다.

 

[공격의 유형]

일반적인 공격 : 가능한 모든 조합을 시도하는 것이다.

1. 역 무차별 대입 공격 : 많은 계정을 대상으로 하며, 소수의 흔한 비밀번호를 반복적으로 시도하는 것이다.

2. 인증 정보 스터핑 : 사이트 또는 서비스에서 훔친 사용자 이름과 비밀번호를 사용하여 다른 서비스의 계정을 하이재킹하는 것이다.

3. 사전 공격(Dictionary) : 사람들이 많이 사용하고 다른 데이터 침해에서 얻은 취약한 비밀번호를 사전으로 만들어 돌아가면서 시도하는 것이다.

4. 레인보우 테이블 공격 : 공격자는 평문 비밀번호와 각 비밀번호의 해시값이 저장된 사전 계산된 사전을 통해서 해싱 함수를 반대로 되돌리면서 비밀번호를 알아낸다.

 

[공격을 보안하는 방법]

1. 길고 복잡하며 문자, 숫자, 특수문자를 섞어 사용하는 것이 이상적이다.

2. 비밀번호 입력 횟수에 제한을 둔다.

3. sleep() 함수를 사용하여 비밀번호 인증에 속도 제한을 건다.


[초기 화면]

- username 이 admin 이라는 조건이 주어짐.

 

[View Source]

- 사용자의 입력을 그대로 받는다.

-> password 입력을 $pass 변수로 받고 이를 암호화 시킨다.

-> password 입력을 그대로 받고 암호화 시키므로 암호화 부분에는 신경 쓸 것이 없다.

- SQL 문을 이용하여 사용자의 username 과 password 에 해당하면 로그인에 성공한다.

 

[풀이]

1. 사전 공격 -> 2번은 오래 걸리므로 우선 이 방법을 채택했다.

2. 비밀번호로 사용 가능한 문자, 숫자, 특수 문자의 조합으로 공격

 

- Brute Force 공격은 BurpSuite 의 intruder 를 이용하면 된다.

-> 소스를 보면 sleep() 함수나 비밀번호 입력 제한이 없으므로 가능하다.

-> sleep() 함수를 사용하면 속도에 제한이 걸려 매우 오래 걸린다.

 

1. 깃허브에서 취약한 패스워드 리스트를 복사해서 txt 파일을 생성한다.

2. DVWA 사이트에서 admin 과  1234 (임의의 비밀번호) 를 입력한 후 버프 스위트를 이용하여 패킷을 잡는다.

3. command + R 을 눌러 repeater 로 이동시킨 다음 Send to intruder 로 보낸다.

 

4. Positions 부분에서 하이라이팅 된 부분을 clear 를 통해 다 제거하고 패스워드에 리스트들을 무차별적으로 대입 할 것 이므로 password=1234

비밀번호가 들어가는 부분만 하이라이팅한다.

5. Payloads 탭으로 들어가 유형을 Simple list 로 지정한 다음 Load 를 통해서 방금 생성한 txt 파일을 선택하면 위 사진과 같이 목록으로 뜬다.

6. Attack Start 버튼을 누른다.

7. 무차별 대입 공격이 시작되고 Length 부분이 혼자 다른 패킷이 존재한다.

8. 해당 패킷의 password 부분을 살펴보면 비밀번호가 password 인 것을 확인할 수 있다.

9. 해당 패스워드를 이용하여 로그인을 시도한다.

10. 로그인에 성공했다!

 

[다른 방법]

파이썬으로 스크립트 짜기

- 버프 스위트를 community 버전으로 사용하고 있어 속도에 제한이 있다.

- 만약, 로그인에 비밀 번호 횟수 제한이나 속도 제한이 걸려있다면 버프 스위트로 공격하는 것이 불가능하다.

- 따라서, 파이썬으로 스크립트를 짜서 공격하는 방법도 알아둘 필요가 있다.

 

1. 파이썬에는 GET, POST 메소드를 이용하여 HTTP 요청을 보낼 수 있는 requests 모듈이 존재한다.

이를 이용하여, 스크립트를 짤 수 있다.

2. 우선 패킷의 구조를 알아야 스크립트를 짤 수 있다.

 

 

3. 요청 패킷을 전송하는 것을 보면

GET 메소드로 해당 URL 과 파라미터를 통해 username 과 password 를 전달한다. 그리고 브라우저는 HTTP 요청을 할 때 쿠키도 함께 전송하므로 쿠키값도 필요하다.

4. 따라서, 위 패킷을 바탕으로 파이썬으로 코드를 짜면 된다.

5. 순서대로 코드를 살펴보면,

- 모듈을 imports 하고,

- 쿠키를 셋팅하고,

- 파라미터를 셋팅한다. 이때, password 는 dict.txt 에 존재하는 단어를 사용할 것이므로 비워놓는다.

- 그리고 dict.txt 의 비밀번호의 리스트들을 passwords 의 리스트에 추가한다.

- 반복문을 통해서 passwords 의 값들을 기준으로 password 를 이용하여 파라미터의 비밀번호에 차례대로 대입한다.

 

6. 코드가 조금 길어서 짧게 다시 수정해보았다.

- dict.txt 의 비밀번호 리스트를 그냥 바로 읽어오면서 password 에 넣을 수 없을까? 생각하며 수정한 코드이다.


[참고자료]

- 파이썬 : https://newstroyblog.tistory.com/m/202

 

파이썬 브루트포스 공격(BruteForce Attack) 사전파일 만들기

무차별대입공격(BruteForceAttack) 이번 포스팅에서는 파이썬 언어를 활용하여 브루트 포스 공격(BruteForce Attack)을 진행해보려고 합니다 먼저 설명에 앞서서 브루트 포스 공격(BruteForce Attack)에 대해서

newstroyblog.tistory.com

- 사전 파일 : https://github.com/danielmiessler/SecLists

 

GitHub - danielmiessler/SecLists: SecLists is the security tester's companion. It's a collection of multiple types of lists used

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, ...

github.com