1. 브루트 포스 공격 개요
[그림 1-1] 브루트 포스 공격
[출저: 화이트헤커를 위한 웹 해킹의 기술]
브루트 포스 공격이란 특정 정보(사용자의 패스워드)를 알아내는 공격이다. 만약 패스워드가 일치하지 않아도 계속 바꿔가며 공격할 수 있고 시간이 오래 걸리지만 언젠가는 계정 정보가 일치해 로그인이 가능하게 된다. 패스워드가 너무 쉽거나 추측 가능하게 설정하면 브루트 포스 공격에 의해 너무 쉽게 노출될 수 있다. 하지만 특수문자를 섞어서 설정하면 공격에 시간이 상당히 많이 소요되기 때문에 패스워드가 쉽게 노출될 수 없게 된다. 브루트 포스 공격 방지를 위해 페이지 내에 방어도 중요하지만 사용자의 비밀번호 설정 방식도 브루트 포스 공격을 예방하는 방법 중 하나가 될 수 있다.
2. 브루트 포스 공격 실습
(1) 자동 브루트 포스 공격
[그림 2-1] Intruder
브루트 포스 탭에서 계정 정보를 입력 한 후 프록시를 잡는다. 계정은 admin, 1234임을 알 수 있고 현재 정보를 Intruder 탭으로 보낸다.
[그림 2-2] Positions
페이로드 포지션에서 현재 패스워드 값을 알아내는게 목적이기 때문에 패스워드 부분에만 $를 표시한다.
[그림 2-2] payloads
페이로드 설정에서 Payload type을 Brute Forcer로 선택한다. Payload Options에서 Character set이 자동 지정되는데 영문자부터 숫자 9까지 지정된다. 이 부분에 특수문자들을 추가하면 Payload count는 늘어나고 Max length 숫자를 높이면 unknown이 표시된다. 그만큼 브루트 포스 공격을 하는데 있어서 많은 시간이 소요된다는 의미다.
[그림 2-3] 브루트 포스 공격
브루트 포스 공격 화면이다. 문자를 하나씩 넣어가며 자동화 공격을 시도하고 있다. 만약 응답 요청 길이가 다른 숫자 값으로 나온다면 그 문자열이 사용자 계정의 비밀번호다. 하지만 Brute forcer를 이용한 공격은 많은 시간이 걸리기 때문에 비효율적인 방법의 브루트포스 공격이 될 수 있다.
(2) Dictionary 브루트 포스 공격
[그림 2-4] Intruder
브루트 포스 탭에서 계정 정보를 입력 한 후 프록시를 잡는다. 계정은 admin, 1234임을 알 수 있고 현재 정보를 Intruder 탭으로 보낸다.
[그림 2-5] Positions
페이로드 포지션에서 현재 패스워드 값을 알아내는게 목적이기 때문에 패스워드 부분에만 $를 표시한다.
[그림 2-6] payloads
Payload type을 Simple list로 선택한 후 Payload Options에서 사용자들이 가장 많이 사용하는 패스워드를 담은 txt 파일을 만든 후 업로드 한 후 Start Attack 버튼을 누른다.
[그림 2-7] 브루트 포스 공격
브루트 포스 공격 시도 결과 응답 요청 길이가 다른 것이 있다. 2번 응답 요청 길이는 5293이지만 1번 응답 요청 길이는 5358이다. 이 때 사용자 계정 비밀번호는 1234라는 것을 알 수 있다. 패스워드가 올바르지 않은 경우면 로그인 실패 페이지가 응답되지만 패스워드가 올바른 경우면 로그인 성공 페이지가 출력되게 된다. 즉, 1번 요청은 로그인에 성공한 페이지가 응답된 것이라고 생각할 수 있다.
[그림 2-8] 소스 코드
소스 코드를 보면 비밀번호는 md5로 해쉬화 해서 취약점은 발생하지 않는다. 하지만 username은 별다른 조치 없이 SQL 문에 그대로 입력 됨을 볼 수 있다. 하지만 쿼리 구문 아래 코드에서 SQL 결과 값이 1개일 때만 로그인 된다는 것을 알 수 있다. 이 경우에 사용자 비밀번호를 알지 못해도 SQL 인젝션 취약점이 발생할 수 있음을 추측할 수 있다.
'웹해킹 > DVWA' 카테고리의 다른 글
SQL 인젝션 공격 (1) (0) | 2020.01.28 |
---|---|
브루트 포스 공격 대응 방안 (0) | 2020.01.26 |
Reflected XSS 공격 (2) (0) | 2020.01.21 |
Reflected XSS 공격 (1) (0) | 2020.01.21 |
Stored XSS 공격 (0) | 2020.01.21 |