> For the complete documentation index, see [llms.txt](https://redryan.gitbook.io/studyjoon/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://redryan.gitbook.io/studyjoon/rad/or-web-hacking/dvwa-or-damn-vulnerable-web-application/brute-force.md).

# Brute Force

## **무작위 대입 공격이란?**

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2F1VOTeDcbuwjSUz2aAKGf%2Fimage.png?alt=media&amp;token=ef3b253b-4af7-4617-a2e6-b912ad3a7a9c" alt=""><figcaption></figcaption></figure>

***

* **계정 | 패스워드 목록 파일을 생성하여 맞는 계정과 비밀번호를 무작위로 찾아낸다.**
* 자주 사용하거나, 범용, 짧은 글자수\이름\패스워드 등의 설정일 때 취약한 부분이 발생한다.
* **대응 방안**
  * 복잡한 비밀번호 설정
  * 로그인 횟수를 제한하여 계정 잠금 설정
  * 이중 인증(2FA) : 두 가지 인증 요소를 요구하는 보안 방식
    * SMS 코드 (휴대폰으로 전송)
    * 인증 앱 (Google Authenticator, Authy 등)
    * 하드웨어 토큰 (YubiKey)
    * 생체 인증 (지문, 얼굴 인식)

## **\[실습]**

## **방식 1 :  딕셔너리 공격**

1. admin \ 1234 입력해보기

   <div align="left"><figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FsSHa3ZuwwAT6xljBREAN%2Fimage.png?alt=media&amp;token=cf03cc86-3e64-40ac-8521-4d5423289e64" alt=""><figcaption><p>로그인 페이지 화면</p></figcaption></figure></div>

* 부정확하다는 메시지가 나온다, **만약 계정이 맞다면 다른 안내 메시지가 나올 것이다.**
  * **TIP | admin 조차도 모르는 상태라면 유저 목록, 패스워드 목록 파일을 생성하여 John the Ripper로 작업을 하면 된다.**
    * John the Ripper : 비밀번호 크래킹 툴, 다양한 암호 해시를 공격해 비밀번호를 복구하는데 사용
    * Brute Force, Dictionary Attack, Hybrid Attack 등을 지원

2. F12 개발자 도구를 눌러서 확인한다.

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FnAqkEoIL7aoGpgABxj14%2Fimage.png?alt=media&amp;token=25c27ec2-fcc9-4c90-aac2-701afa3147e3" alt=""><figcaption></figcaption></figure>

* ### **세션쿠키(Session Cookie)**

  사용자가 사이트 탐색 시에 관련한 설정들과 선호사항을 저장하는 임시 쿠키정도라고 생각하면 된다. 브라우저를 닫는 순간 삭제된다.
* ### **지속쿠키(Persistent Cookie)​**

  지속쿠키는 세션쿠키와 다르게 삭제되지 않고 더 길게 유지가 가능하다. 지속쿠키는 디스크에 저장되며, 브라우저를 닫거나 컴퓨터를 재시작해도 남아닜다. 사용자 로그인 항상 유지와 같은 곳에 사용한다.

3. Burp Suite 을 이용하여 무작위 대입 공격을 진행한다.

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2F4VFItsw6bEUx8AvQRvoK%2Fimage.png?alt=media&amp;token=e189f773-dbbb-4684-8867-3aed416400fb" alt=""><figcaption><p>딕셔너리 공격 방식</p></figcaption></figure>

* password 메모장을 깃허브에서 다운 받거나 자주 사용되는 비밀번호 리스트를 따로 개인용으로 하나 만들어두면 좋다.
* <https://github.com/duyet/bruteforce-database/blob/master/38650-password-sktorrent.txt>
* Load 를 클릭하여 메모장을 넣고 공격을 시작한다.

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2Fw9mXj6Lf5voSjTs1A6P8%2Fimage.png?alt=media&amp;token=df4a7dd7-43f8-4bf5-87c3-7ff0167ccdcd" alt=""><figcaption></figcaption></figure>

* password라는 payload가 응답의길이값인 length을 보니 5365로유독 눈에 띈다.&#x20;
* 결정적으로 Welcome to the password pratected area admin 이라는 html을 전송 받았다.

4. 무작위 공격이 성공하여 admin 계정으로 로그인 되었다

<div align="left"><figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FjYOQFV9e8hUNCnH6ElNi%2Fimage.png?alt=media&amp;token=e123e265-ebd6-4503-a789-0beba1ee36be" alt=""><figcaption></figcaption></figure></div>

## **방식 2 : 자동 브루트 포스 공격**

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2F9vSMfczp42MzqBitLhDL%2Fimage.png?alt=media&amp;token=d2d11393-749b-450e-b12f-fd7afe4e9c77" alt=""><figcaption><p>자동 브루트 포스 공격  화면</p></figcaption></figure>

* 메모장이 아닌 Payload type = Brute forcer로 변경한다

<div align="left"><figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FKhvBMYxPGuwR1YQzOWdb%2Fimage.png?alt=media&amp;token=9df23aa0-da19-4ed7-92aa-b5d030206a3f" alt=""><figcaption></figcaption></figure></div>

* Character set 를 세상에 존재하는 문자열을 다 넣고 자동화 한다.
* 실질적으로 글자수가 많으면 많을수록 거의 불가능에 가까워져서상당한 시간이 소요된다.
