본문 바로가기
보안

CSRF, Brute Force, Dictionary Attack 실습

by 김으껀 2022. 5. 17.

* CSRF (Cross Site Request Forgery: 교차 사이트 요청 위조)

- 공격 대상: Web Server

- Client의 권한을 이용해서 위조된 요청을 Web Server에게 보내는 공격

- 대표적 사례: 자동 댓글 달기, 좋아요 눌러지기 비밀번호 변경, 회원 탈퇴 요청, 회원 승급 요청 등

- 사용자들이 원하지 않았지만 스크립트의 소스 안에 공격자의 의도가 포함되어 있는 상태로 웹서버에 요청이 보내짐

 

실습) Metasploitable2에 DVWA에 접속

123456으로 패스워드 변경

admin/password로 로그인이 안된다. --> admin/123456으로 변경됨

F12 개발자 모드를 누르면 디버거에 <form>~</form> 부분이 패스워드 변경 부분인 것을 확인할 수 있다. --> 복사

메모장에 붙여 넣고 CSRF.html로 저장해준다.

수정 --> 주소표시줄을 복사해서 #을 지우고 붙여 넣기

value="" 입력

보기 편하게 input type은 password에서 text로 변경해준다.

 

CSRF.html을 internet explorer로 열어본다.

위와 같은 창이 뜨며 패스워드를 korea로 바꿔본다.

change를 누르면

이런 화면이 나온다.

admin/korea 로그인이 되는 것을 확인할 수 있다.

 

- 공격자는 Client의 권한을 이용해서 Web Server에 위조된 요청을 보낸다.

- 댓글, 관리자에게 전달되는 내용 등

 

실습) Burp Suite를 활용한 Dictionary Attack

Burp Suite를 켠다. Intercept는 off

gordonb 계정 로그인을 한번 실패한다.

HTTP history에서 로그인 시도를 실패한 내역을 확인할 수 있다. GET 요청 -> 일반적으로 POST로 보냄

첫째 줄을 우클릭하여 send to intruder

 

1234를 제외한 $~$부분은 Clear를 클릭하여 해제시킨다.

payloads에서 simple list 선택

password.txt를 Load 한다.

Start Attack을 한다.(데모 버전은 Time Throatle 적용)

1234 로그인 실패했던걸 계속해서 반복해서 하는 것 -> 패스워드를 찾아도 멈추지 않는다.

길이가 다른 abc123 이것만 패스워드인 것을 알 수 있다.

Response의 길이가 다른 것이 정답

 

 

' union select user, password from users #으로 다른 계정을 찾아 그 계정의 패스워드도 찾아보자

1337과, pablo 계정도 해본다.

1337 비밀번호 charley

pablo 계정의 패스워드 letmein인 것을 확인할 수 있다.

 

* 로그 보는 방법

cd /var/log/apache2

tail -30 access.log

 

 

실습) Brute Force 실습

admin 계정 패스워드를 1234로 바꿔준다.

앞에서 했던 HTTP history 내역 중 하나를 Intruder에 보낸다.

password 부분을 $1111$ 로 남겨놓는다.

payloads에 type을 Numbers로 설정한 뒤 From 1111~9999로 1씩 증가시키게 입력해준다.

공격 시작

1234만 길이가 다른 것을 확인할 수 있다. ----> 1234가 패스워드

 

* Brute Force

 

- 전수 대입법, 무차별 대입 공격이라고도 한다.

- 모든 가능한 경우의 수를 대입하는 공격

- 시간이 많이 걸리는 것이 단점이다.

- 대응방법

 1) 길고 복잡한 패스워드 사용

 2) 횟수 제한 및 패스워드 틀림 횟수 초과 시 잠금(lock) 설정  ----> 본인 확인 후 unlock (신분증, 휴대폰 인증 등)

 3) Captcha를 활용: 자동화 돈 스크립트를 대입하는 것을 차단해준다. 

 

* Kali Linux의 Medusa를 사용해서 Dictionary Attack 시도

 

metasploitable2에 계정 winner/smile이라고 만들어준다.

 

* adduser와 useradd의 차이점 -> adduser는 홈 디렉터리 생성, useradd는 계정만 만든다 (ubuntu와 debian계열)

 

$ sudo medusa --help 

  -h: host name

  -u: user name

  -P: password file

  -M: 실행 모듈   ex) ssh, ftp, telnet 등

 

* Dictionary 수정

$ cd /usr/share/john

$ sudo vi password.lst

dd  --> 한줄 삭제

.     --> 앞 명령 반복

123456 위에 주석들을 다 삭제해준다.

 

$ sudo medusa -h 192.168.5.129 -u winner -P password.lst -M ssh

----> 패스워드를 찾으면 멈춤

패스워드 smile을 찾고 멈췄다.

 

* 딕셔너리 만들기 실습

$ cd /usr/share/crunch

$ sudo man crunch

 

1) 숫자 4자리로 구성된 딕셔너리를 만들기

$ sudo crunch 4  4 0123456789 -o pw1.txt

0000-9999  ---> 10000 줄

$ less pw1.txt

주의사항) 너무 큰 파일을 생성하면 에러가 발생 우려 ex) 최대 500Mb 이하로 생성해야 한다.

 

2) 소문자 4자리로 구성된 딕셔너리를 만들기

$ less charset.lst  --> 파일 내용 보기

  ualpha: 대문자, lalpha: 소문자, numeric: 숫자, lalpha-numeric: 소문자와 숫자의 조합

$ sudo crunch 4 4 -f charset.lst lalpha -o pw2.txt

$ head -30 pw2.txt  --> 위에서 30줄만 보기

$ tail -30 pw2.txt  --> 밑에서 30줄만 보기

head --> old , tail --> new

 

3) 특정 문자가 들어가는 패턴을 생성하기 (sk뒤에 숫자 2개가 들어가는 패턴)

$ sudo crunch 4 4 0123456789 -t 'sk@@' -o pw3.txt

'  '를 사용하고 @를 넣으면 와일드 문자(아무거나 올 수 있음)로 사용되지만,

'  '를 사용하지 않는 경우 문자가 지정된다.

@ will insert lower case characters --> 소문자

, will insert upper case characters --> 대문자

% will insert numbers --> 숫자

^ will insert symbols --> 특수문자

 

4) skinfosec뒤에 숫자 세 자리, 특수문자 한자리로 된 딕셔너리를 만들려면?

$ sudo crunch 13 13 -t skinfosec%%%^ -o pw4.txt 

 

실습) Crunch로 만든 딕셔너리를 이용해서 Medusa로 공격하기

- Meta2에 girlsday / Sk#4

- 딕셔너리를 만들고 Medusa로 공격하기

(너무 많다..)

 

* Metasploitable2에서 로그 확인하기

$ cd /var/log

$ tail -f auth.log            ---> -f: finishless (실시간 로그 확인)

실시간으로 공격 로그가 찍힌다.

 

* 로그를 Kali Linux로 가져가서 분석하기

$ sudo cp auth.log /var/www

$ cd /var/www

$ sudo chmod 777 auth.log

Kali에서

$ sudo wget http://192.168.5.129/auth.log

$ sudo tail -10 auth.log

$ cat auth.log | awk '{print $12,$13,$14,$15}'| sort | uniq -c

uniq -c 는 중복을 제거하고 왼쪽에 개수를 표시하는 명령

sort는 정렬하라는 명령

 

$ echo 11 22 33 44 | awk '{print $4,$3,$2,$1}'

 

cat auth.log | awk '{print $5}' 

cat auth.log | awk '{print $5}' | sort -u 

* 명령어만 골라서 어떤 명령어가 가장 많이 사용되었는지 확인

$ cat auth.log | awk '{print $5}' | awk -F"[" '{print $1}' | sort | uniq -c | sort -rn

* FTP 로그 확인하기

- Kali에서 medusa로 FTP에 Dictionary Attack

- Meta2에서 FTP로그 확인

sudo tail -10 /var/log/vsftpd.log

sudo cp /var/log/vsftpd.log /var/www

sudo /var/www

sudo chmod 777 vsftpd.log

- Kali의 2번째 탭에서 다운로드

$ cat vsftpd.log | awk '{print $8,$12}' | sort | uniq -c | sort -rn

 

실습) 다른 로그도 위와 같은 방법으로 확인

 

* 파일을 가져오지 않고, Kali에서 Meta2로 SSH 접속 후 로그 확인

$ sudo ssh 192.168.5.129 -l msfadmin

$ sudo cat /var/log/vsftpd.log | awk '{print $8,$12}' | sort | uniq -c | sort -rn

(앞에서 실습했던것 보다 이 방법이 조금 더 빠르다.)

 

 

댓글