bof 원정대의 golem을 잡아보자!

* 소스코드 분석



(golem.c)


...! 스택영역을 사용해야하는데 버퍼부터 스택 밑바닥까지 싹 초기화 시킨다.

기존의 방법으로는 접근이 안된다... 그래도 한번 실화인지 눈으로 체크해보자.



(스택 초기화)


우리가 쓰던 그리고 찾아내었던 구석구석 0으로 전부 초기화가 되었다.

여기서는 LD_PRELOAD를 제외하고는 방법이 없었다..

LD_PRELOAD란 유닉스계열에서 전역후킹을 위한 방법이다. 

예를 들어 간단한 LD_PRELOAD를 이용한 getuid 후킹 파일을 만들어보겠다.



(hook.c 파일)


getuid를 후킹하려면 그 원형과 똑같은 포멧의 함수여야한다.
return은 7777로 후킹이 되었는지 확인해본다. getuid 함수를 호출할때 이 파일이 불려나가 일을 할 것이다.

컴파일을 해준다.



(hook.so)


컴파일 방식이 조금 다르다.

그 후 export!


(export)



이제 getuid함수가 호출되면 내가 만든 hook.so가 일을 할 것이다. getuid가 불리는 대표적인 명령어 id를 사용해 보겠다.


(id 명령어)



id를 사용해보니 uid 가 7777로 나온다. 바로 내가 만든 so 파일이 일을 한 것이다.

그렇다면 이걸 여기서 어떻게 이용한단 말인가?...
물론 여기서 후킹을 이용해 my-pass 명령을 실행하여 답을 알아내는 방식이 있지만 그 방법은 불법이므로 정석대로 가볼것이다!

gdb를 통해 메모리 낮은 쪽을 찬찬히 훑다보면 LD_PRELOAD로 export한 내용이 담겨있는 것을 볼 수 있다.



(hook파일)



이 것을 이용할 것이다.
바로 hook파일에 링크를 걸어 바로 저 위치에 쉘코드를 올리고 ret주소로 저 주소를 입력하는 것이다!!!!

늘 그렇듯 경로 생성!



(경로 생성)



생성 후! 링크를 걸어준다. 바로 내가 만든 후킹파일에!


(링크 생성)



이제 export해준다.


(export)



이제 내가 건 링크 파일이 스택영역에 담길 것이고 즉 쉘코드가 올라갈 것이다.


(메모리 상황)


짠!
내가 넣은 Nop코드와 쉘코드가 보인다. 이제 Nop영역의 아무 주소나 하나 골라서 ret주소에 입력해주면 공격에 성공하게 된다.




(공격 성공!)


쉘 획득!


'WarGame > 500 Project' 카테고리의 다른 글

(29/500) Lord of the BOF - bugbear  (0) 2017.06.20
(28/500) Lord of the BOF - darkknight  (0) 2017.06.20
(26/500) Lord of the BOF - skeleton  (0) 2017.06.20
(25/500) Lord of the BOF - vampire  (0) 2017.06.20
(24/500) Lord of the BOF - troll  (0) 2017.06.20


System 해킹을 공부하기에 앞서
실습환경을 구성해본다.

구성할 리눅스 버젼은 Red Hat 6.2 버젼으로 아주아주아주아주 오래된 버젼이다.
간단한 버젼으로 시스템에 입문할 것이다.

Red Hat은 오래된 리눅스이기도 하고 부팅에 문제가 있을 수 있다.
그래서 부팅할 때 맨 처음에 linux-up 이라고 입력을 해주면 된다.




(부팅 요령)



그 후 호스트 이름을 바꿔 줄 것이다.



(/etc/sysconfig/networ)




호스트 이름을 TFA로 바꿔주었다.



(호스트 이름 변경)




그 후 원격 쉘을 이용하여 공부할 것인데 연결이 가능하도록 만들어 줄것이다.
지금 설치된 Red Hat에 PAM 설정이 되어있기 때문에 몇가지 설정 파일을 수정해주어야 한다.

먼저 /etc/securetty에서 원격 터미널을 넣어주어야한다.




(/etc/securetty 설정 파일)




(pts 추가)



pts 는 원격 터미널로 8개 까지 채워준다.

그 후 pam.d 디렉토리에서 login 설정 파일을 수정해 줄 것이다.



(/etc/pam.d/login)




(pam_securetty.so 주석)




맨 윗줄을 주석처리해준다.

그 후 Xshell 에서 원격으로 로그인 할 수 있었다.



(원격 접속)




그 후 기본적으로 Red Hat에 있는 어셈블러가 아닌
인텔 기반의 어셈블러로 공부하기 위해 따로 nasm을 설치 해주었다.



(nasm 다운로드)




그 후 설치해준다!



(설치1)




(설치2)



설치 후 nasm cp 명령으로 /usr/bin 에 복사해준다.
이유는 PATH 경로에 넣기 위해서이다. 어디서든 nasm 명령어로 사용할 것이기 때문이다.



(cp)




그 후 nasm 명령어를 입력하면 명령어로 입력되는 모습을 볼 수 있다.



(설치 완료)




이로써 시스템 공부할 실습환경을 만들었다.




제로보드 설정까지 완료했으므로
이제 제로보드를 이용하여
게시판을 만들어보겠다.

관리자 계정으로 로그인 하고
왼쪽 상단에 Add Group을 눌러준다.




(Add Group 클릭)



클릭 후 그룹 이름을 써주고
확인을 누른다. (기본으로 설정해준다.)



(그룹 생성)



그룹이 생성된 모습이다.



(그룹 생성 모습)



여기서 왼쪽 상단에 게시판 항목에 Add를 클릭한다.



(게시판 Add)



게시판 Add 입력 항목이다.
여기서 이름을 작성해주고
기본 보호 설정을 해제 해 줄것이다. (먼저 웹 취약점을 공부하기 위해서)




(게시판 작성 페이지)



HTML 설정을 모두 허용으로 바꾸어준다.



(HTML 설정)



업로드 기능을 체크하여 자료실 기능을 사용으로 바꾸어준다.




(업로드 허용)



그리고 게시판 생성을 누르면
아래와 같이 게시판이 생성된 모습이 보인다.



(게시판 생성 후 모습)



이 페이지는 게시판의 목록을 볼 수 있다.

방금 우리가 만든 게시판을 확인해보자.

Preview를 클릭하여 본다.



(게시판 모습)



우리가 제로보드를 이용하여 만든 게시판의 모습이다.

회원가입을 하여 글을 작성해보겠다.! (테스트)



(회원가입)



그 후 로그인 하여 글을 작성해보겠다.



(글 작성)



보면 글이 잘 써지는 걸 확인해 볼 수 있다.




(작성된 모습)



글 목록에서도 보인다!



(게시판 목록 모습)



여기까지 게시판을 만들었다.

이제 이 게시판을 이용하여 웹 취약점을 살펴 보겠다. :)





Web Hacking - 실습환경 웹서버 구축(제로보드)(1) 에 이어서 웹서버를 설정할 것이다.

install.php 경로로 들어오면 아래와 같은 화면이 나온다.




(707 퍼미션 요구 화면)



빨간 글씨로 707 퍼미션이 되어있지 않다고 나와있다.

zboard 디렉터리의 권한 설정을 해준다.
#> chmod 707 zboard



(권한 설정 화면)




위와 같이 설정이 잘되면
아래와 같이 빨간 글씨가 사라지고 설치 시작 버튼이 나온다.



(설치 시작 화면)



클릭을 해주면
아래와 같이 입력하는 란이 나오는데
여기서 아직 우리가 DB를 만들지 않았다.



(입력 화면)



zboard DB를 만들어보자!

먼저 mysql에 접속해준다.



(mysql 접속)



접속 후 show databases; 명령어를 이용하면
현재 있는 DB가 보인다.



(현재 DB)



여기서
create 명령어를 사용하여 zboard라는 DB를 만들어준다.



(DB 생성)



다시
show databases;
명령어를 이용하여 현재 DB를 확인해보면
zboard가 생성된 것을 확인 할 수 있다.



(생성된 DB)



자 생성해주고!
입력을 해주고
설정완료를 눌루면 다음과 같이 에러가 나온다.



(에러 화면)



위 에러는 우리가 지금 옛날 버젼의 zboard를 쓰기 때문에
쿼리 명령문중 바뀐 내용이 있기 때문이다.

우리는 그 명령문을 수정해 줄 것이다.

수정해줄 파일은
zboard 디렉터리 안에있는 schema.sql 파일이다.



(vi 편집기로 schema.sql 열기)




vi 편집기로 schema.sql 을 열어준다.

그리고 수정해주어야 할 것!

1. password varchar(20) -> password varchar(50)
옛날에는 20사이즈면 충분했지만 더 길어진 해쉬값으로 50까지는 늘려주어야한다.



(password 사이즈 수정)



파일 안에 있는 varchar 사이즈를 50으로 바꾸어준다 전부! (password만)

2. primary key는 default 값이 될 수 없다. 하지만 옛날 버젼에서는 가능했는지 다음과 같은 명령 구문이 들어있는데 이 둘이 충돌이 되기 때문에 삭제해주어야한다.
primary key는 사용할 것이기 때문에 default '0' 만 삭제해 준다.




(default '0' 삭제)




(삭제된 모습)



이렇게 primary key와 충돌하는 default 값을 전부 지워준다.

그렇게 되면 아래와 같이
에러없이 넘어갈 수 있다.

그러면 다음 칸에 아이디, 패스워드를 입력하고 [정보입력완료]를 누르면 된다.




(관리자 정보 입력)



그 후 관리자 계정과 비밀번호로 접속해 준다.


(관리자 계정 접속)



그러면 아래와 같이 관리자 페이지가 나온다.




(관리자 페이지)



여기까지가 제로보드 서버 구축 및 설정이다. :)


웹 해킹에 들어가기 앞서
웹서버를 구축할 것이다.
(취약점이 많은!)

그 취약점들을 먼저 공부해 볼 것이기 때문이다.

리눅스에서 웹서버를 구축하기 전에
리눅스의 방화벽을 전부 해제해 줄 것이다.
(실제 서버에서는 해제하면 안된다!, 하지만 우리는 공부할 것이기 때문에 해제해 주도록 한다!)

리눅스에는 방화벽이 두개가 있다.
1. iptables
2. SELinux
이렇게 두개다!

iptables를 삭제해 줄것이다.
/etc/sysconfig/iptables  를 삭제해준다.



(iptables 삭제)



SELinux를 해제해 줄것이다.

vi /etc/sysconfig/selinux 에 들어가서 (vi 편집기 이용)
SELINUX에 disabled로 고쳐준다.



(SELinux 해제)



잘 해제 되었는지 확인해본다.
iptables -L   (명령)
했을 때 체인 룰이 아무것도 안나오면 설정이 안되있는 것이다.


getenforce를 입력하였을 때
Disabled라고 나오면 해제된 것이다.


(해제 모습)



그 후 yum을 이용하여
httpd.i386
php.i386
php-mysql.i386
mysql.i386
mysql-server.i386

을 설치해준다.



(설치된 모습)



httpd를 실행시켜준다. (아파치 웹서버이다.)



(실행 모습)



netstat -ant로 확인해볼 수 있다. (웹서버 포트는 80번 포트)



(웹서버 실행중)



혹은
현재 실행중인 프로세스를 확인해서 확인할 수 도 있다.
명령어 #> ps -ef | grep httpd



(프로세스 확인)



그렇게 되면 외부 호스트에서 IP주소로 접속하였을 때
아파치 화면이 뜬다.



(아파치 화면)



이제 MySQL 실행시켜줄 것이다.
MySQL은 DB이다.

명령어 #> service mysqld start

netstat -ant로
3306이 열려있으면 실행된 것이다.



(MySQL 실행)



mysql에 접속해 보겠다.
#> mysql -u root
(처음 접속, 비밀번호 설정 안했을 때) 이렇게 들어간다.



(접속 화면)



접속이 되면
mysql>
이렇게 프롬프트가 바뀐다.

비밀번호를 설정해 주겠다.
명령어
#> mysqladmin -u root password (쓸 비밀번호)



(비밀번호 설정)



비밀번호를 설정한 후에는 접속 방법이 조금 다르다.

#> mysql -u root -p
이렇게 접속하면
비밀번호 입력하는 란이 나온다.
여기에 아까 설정해준 비밀번호를 입력하면 된다.


(비밀번호 입력 접속)



이제 제로보드를 설치할 환경이 다 갖추어 졌다.

제로보드를 /var/www/html  경로에 다운받아준다.
현재 제로보드가 tar형태이므로 풀어줄 것이다.
명령어
#> tar xvf zboard.tar



(타르 파일 풀기)




(푼 모습)



해제하고 나면 해당 경로에 디렉터리 하나와 파일 하나가 생긴다.



(풀린 모습)



여기서 /etc/php.ini  파일을 하나 고쳐줄 것이 있다.



(vi /etc/php.ini )



vi 편집기를 이용해 들어와서
아래 표시된 부분을 On으로 고친다.



(고쳐진 모습)



그 후 외부 호스트에서
IP/zboard/install.php 경로로 접속을 하면 아래와 같이 나온다.



(접속 모습)



여기서 한글이 깨지는 것을 발견할 수 있는데
웹브라우저가 인코딩을 안해주기 때문이다.
인코딩 해주는 프로그램을 추가해준다.



(인코딩 프로그램 추가)



추가해 준 후 해당 페이지에서 오른쪽 클릭을 해서
Korea 로 인코딩 눌러준다.



(Korea 클릭)



그렇게 되면 아래와 같은 화면으로 잘 나오게 된다.!







오늘은 스캔 공격을 할 것이다.
스캔 자체도 공격이므로
실제 사용시 처벌받는다. (그러므로 가상환경에서 혹은 자기 공유기 안에서만 하도록한다.!)
스캔은
보통 공격 전에 공격대상의 시스템을 확인 할 때 사용된다.

어느 포트가 열려있고, OS는 뭐를 쓰고있고 방화벽은 어떻게 있고 등등
스캔을 통해서 사전 정보를 입수한다.

스캔 공격을 하기 전에
피해자의 호스트에서 열수 있는 포트는 열기 위하여 아래와같이
서비스를 실행해준다.



(포트 개방)



그 후 공격자 호스트에서
nmap을 이용하여 스캔해준다.



(스캔)



스캔 결과를 보면 열려있는 포트 번호가 주룩 나와있다.

어떤 식으로 스캔을 하는 걸까?
피해자의 호스트에서 와이어샤크로 패킷을 분석했다.



(패킷 분석)



패킷을 보면 SYN 패킷과 RST 패킷이 잔뜩 보인다.

nmap은 기본적으로 다른 설정을 안해주면 TCP Half Scan을 한다.
스텔스 스캔이라고도 하는데
SYN 패킷을 걸고 응답이 ACK로 오면 RST로 끊어주고
응답이 RST로 오면 닫혀있다는 것을 아는 것이다.



(패킷 분석)



패킷을 보면 SYN 패켓에 대해 ACK 패킷이 오니까 바로 RST 패킷을 보내 끊어주었다.

이번엔 TCP Full Scan을 해보겠다.



(TCP Full Scan)




(패킷 화면)



패킷을 보면
연결을 다 해주는 것을 확인 할 수 있다.
이 때문에 흔적이 남는 단점이 있다.
원리는 Half Scan과 같다. 다만 RST를 보내지 않고 연결을 해준다는 것이 다르다.

이번엔 Fin 패킷을 보내는 Fin Scan을 해보겠다.
명령어는 -sF 이다.



(FIn Scan)




(패킷 화면)



패킷을 보면 FIN 패킷이 날라오는 것을 확인 할 수 있다.

FIN 패킷은 열려있으면 아무 응답이 없고, 닫혀있으면 RST가 오는 원리를 이용한다.

같은 원리인 크리스마스 Scan을 해보겠다.
명령어 -sX



(X-mas Scan)




(패킷 화면)



패킷을 보면 모든 Flag가 설정되있는 것을 볼 수 있다.

그 다음으로는 Null Scan이 있다.
Null 스캔도 Fin, X-mas Scan과 원리가 같다.
명령어는 -sN이다.



(NULL Scan)




(패킷 화면)



패킷을 보면 아무 Flag도 설정되있지 않아
<None>으로 표시되는 것을 확인 할 수 있다.

또 명령어 -O를 입력해주면
해당 시스템의 운영체제 정보를 확인 할 수 있다.



(-O 명령어)



조금 더 상세하게 운영체제 정보까지 파악 할 수 있다.

오늘은 공격전 상대의 정보를 파악하는데 필요한 스캔 공격을 알아보았다.





리눅스에서 방화벽은 iptables가 있다.

iptables 설정을 해보겠다.

리눅스 터미널에서 iptables -L 명령어로 현재
iptables 정책들을 확인할 수 있다.



(현재 설정)



아무 설정이 안되있는 것을 확인 할 수 있다.
Chain이란 규칙들 모음이라고 생각하면 된다.
기본적으로 3개의 Chain이 만들어져있다.
INPUT (들어오는 것에 대한)
FORWARD ( 포워딩하는 것에 대한)
OUTPUT (나가는것에 대한)

간단하게 INPUT , OUTPUT의 규칙을 하나씩 추가해보겠다.
80번 tcp로 들어오는 것과 80번 포트에서 나가는 것을 허용하는 것이다.



(설정 입력)



iptalbes 옵션
-A  : 새로운 규칙 추가
-D  : 기존 규칙 삭제
-C  : 패킷 테스트
-I  : 새로운 규칙 삽입
-R  : 기존의 규칙을 교체
-L  : 적용된 규칙 리스트 출력
-F  : 규칙 초기화
-Z  : 모든 체인의 패킷과 바이트 카운터 값을 0으로 변경
-N  : 새로운 체인을 만든다.
-X  : 체인 삭제
-P  : 기본 정책 변경

(소문자 옵션)
-p  : 정책을 적용할 패킷의 프로토콜
-m  : 정책에 사용할 모듈
-s  : 패킷의 발신지 IP주소
-d  : 패킷의 수신지 IP주소
-i  : 규칙에 적용할 인터페이스
-j  : 룰을 적용할 타겟
-y  : syn 패킷 거부
-f  : 두 번째 이후 조각에 대해 규칙 명시

규칙을 입력하고 확인해본다.




(적용된 리스트)



이렇게 적용된 규칙들은 껐다 켜지면 다 사라진다..

리붓하고
다시 확인해본 모습



(다 사라진 모습)



이제 정책을 저장해보겠다.
다시 규칙을 입력한다.
아래 규칙은 내부로 들어오는 트래픽 중 목적지 포트번호가 21, 25, 80, 110, 143, 443, 587번인 tcp프로토콜인 트래픽을 허용하고 내부로 들어오는 트래픽 중 목적지 포트가 53번인 udp 프로토콜 트래픽을 허용한다는 뜻이다.



(규칙 적용)





이번에는 OUTPUT 체인을 설정하겠다.
외부로 나가는 트래픽 중 출발지 포트가 21, 25, 80, 110, 143, 443, 587번인 tcp 트래픽을 허용하고 외부로 나가는 트래픽 중 출발지 포트가 53번인 udp 프로토콜 트래픽을 허용한다.


(OUTPUT 설정)





체인을 만들어보겠다.
ICMP 체인을 만든다.



(체인 생성)




그 체인 안에 ping 메세지를 차단하는 규칙을 적용해보겠다.



(ICMP 설정)





iptables -L 로
규칙들을 확인한다.



(적용된 모습)




이제 이 체인들을 저장한다.


(저장)



그리고 부팅될때 바로 적용이 될 수 있도록
vi 편집기로
/etc/network/interfaces 에 한줄 추가해준다.



(추가한 모습)




리붓 하고 다시
iptables -L을 한 모습이다.



(저장된 모습)



껏다 켜도 체인이 적용되있는 것을 확인 할 수 있다.

이 규칙들이 적용됬는지
ping 메세지를 보내보겠다.
(아까 ping 요청 메세지를 차단했으므로 ping 응답이 오지 않을 것이다.)



(ping 전송)




ping 메세지 응답이 오지 않는 것을 확인 할 수 있다.
고로
방화벽 설정이 잘 되었다는 것이다.
:)



'Linux' 카테고리의 다른 글

모의해킹(Kali) - DNS 서버 구축  (0) 2017.01.13


( 이 포스트의 해킹은 실제 사용시 불법이고, 절대 사용해서는 안됩니다.)
오늘은 어제에 이어서 SET 툴을 이용해
Spear Phishing Attack Vectors를 해보겠다.
사회공학적 해킹 방법으로
파일에 위장 파일을 감추어 전송하는 것이다.
(트로이목마)

setoolkit을 실행한다.



(setoolkit 실행)



1 번. Social-Engineering Attacks 을 선택한다.



(1번 선택)



그 후 우리가 사용할 Spear-Phishing Attack Vectors를 선택한다.




(1번 선택)



그 후 1번을 선택한다.
여기서 2번 3번 설정을 다 할 수 있다.




(1번 선택)




그 다음에 사용할 수 있는 리스트가 나온다. 우리가 사용할 파일을 선택하는 것이다.
그 파일에 위장시켜서 메일 보내는 것이다.
우리는 pdf 파일을 이용해서 보낼 것이다.
13번 선택한다!



(13번 선택)



그 다음으로는
pdf 파일을 선택하는 건데 기존에 있던 pdf 파일에 첨부할 것인지
아니면 빈 pdf 파일을 이용할 것인지 선택하는 것이다.
우리는 연습이므로
2번 빈 pdf 파일을 선택한다.




(2번 선택)



그 후 연결 방법을 선택하는 것인데
2번을 선택할 것이다.
Reverse_TCP란 피해자 컴퓨터에서 나에게 통신 요청을 하게 하는 것이다.
우리가, 공격자가 통신 요청을 하면 방화벽에서 막힐 수 있기 때문에
피해자가 통신요청을 하게 하는 것이다.
2번 선택



(2번 선택)



그 다음으로 우리에게 통신요청을 하게 할 것이므로
공격자의 IP 주소와 포트번호를 적어준다.



(IP와 포트번호 입력)



그렇게 되면
pdf 파일에 exe실행파일을 심는 작업이 이루어진다.
다 이루어진 후에
메일을 전송할 것인지 물어본다.



(yes 입력)



당연히 yes 넘어간다.

그리고 파일의 이름을 그대로 둘것인지
아니면 파일의 이름을 수정할 것인지 선택하는게 나온다.
2번을 선택해서 pdf 파일의 이름을 지정해준다.



(pdf 파일 이름 지정)



그 후 나머지는 비슷하다.



(2번 선택)





(파일 보내기)




메일 제목, 송신자 메일 주소, 이름 등등을 설정해주고
메일을 전송한다.
그러면 아래와 같은 화면으로 대기상태로 들어가게 된다.




(대기상태)



이제 부터 피해자가 pdf 파일을 열 때 까지 기다리면 된다.

피해자의 입장이다.




(메일 수신)



스팸의심으로 메일이 왔다.
아마 pdf 파일에 exe 파일이 심어져 있어서 스팸으로 간주되지 않았을까 생각이 든다.

어쨋든!
파일을 받아서 실행시켜보았다.



(파일 열기)




피해자의 화면에서는 아무 이상이 없다. 별다른 뭐가 없어보인다.

하 지 만!

공격자의 화면을 보겠다 이제




(연결이 된 모습)



?!?!?
공격자의 화면을 보니 연결이 된 모습이 보인다.
피해자가 연결요청을 한것이다.

sessions -l 을 이요해서
연결 할 수 있는 리스트를 확인한다.



(연결 가능 리스트)



1개가 있다 물론 방금 피해자가 열어본 호스트이다.

sessions -i 1 을 이용해 1번과 연결한다.



(연결)




(연결된 모습)



위는 연결된 모습이다.

연결된 모습에서 help 를 입력하면 할 수 있는 다양한 기능들이 나온다.

대표적인 스크린샷을 해보았다.
명령어로 screenshot을 입력한다.



(스크린샷 입력)




아래 파일이 저장된다고 나온다.
이제 이 스크린샷을 확인해보겠다.

리눅스의 이미지 뷰어를 사용한다.




(이미지 뷰어)




(스크린샷 파일)




저장이 된 경로를 따라 들어가보니
스크린샷 파일이 하나 들어있는 것을 확인할 수 있다.




(스크린샷 확인)



스크린샷을 확인해보니
피해자 컴퓨터의 화면이 그대로 나와있는 것을 확인할 수 있다.!!

다른 명령어로 파일이 뭐가있는지
컴퓨터 시스템의 정보등을 확인 할 수 있다.



(파일 내용)





(시스템 정보)




이처럼 트로이목마와 같이
메일을 이용한 공격 기법
사회공학적인 해킹 기법을 구현해 보았다.




(모든 해킹은 실제 사용시 불법이므로 실제 사용은 절대 안됩니다.
 모든 책임은 행한자에게 존재합니다.)

오늘은 SET을 이용해 볼것이다.

SET 이란?
Socail Engineering Toolkit : 사회공학적 해킹을 할 수 있는 도구들의 모음이다.

칼리리눅스에는 SET이 내장되어있다. 화면 왼쪽 위에 Applications 목록에 8번 항목 Exploitation Tools 목록에 SET이 들어있다.



(SET 위치)



우리는 SET을 최신 버젼으로 이용하기 위해서
SET을 지우고 다시 설치할 것이다.




(기존 SET 삭제)




(SET 다시 설치)




(설치 완료 모습)




우리는 SET 모듈에서 스팸메일을 보내볼 것이다.
정확히 말하면 Mass Mailer Attack은 웜을 이용한 공격이지만
SET Mass Mailer Attack 에서는 웜을 만드는 기능이 없다.
하지만 발신자 메일 주소를 가짜로 보내거나 다수의 수진자에게 메일을 전송하는 공격은 가능하다.

setoolkit을 실행시켜준다.



(setoolkit 실행)




(경고창)




경고창이 무시무시하게 뜬다. 법적 책임은 각자 본인에게 있습니다.
책임을 질거면 y를 선택하면 된다.




(첫 메뉴 화면)




첫 메뉴 화면이다.
여기서 다양한 툴들이 존재하는데
우리는 1번 항목인 Social -Engineering Attacks을 할것이다.

공격에 앞서!
설정해주어야할 것이 하나 있다.
터미널을 하나 열어서 setoolkit의 set.config 파일을 수정해주어야한다.




(setoolkit/set.config 파일 열기)




(수정)




위 빨간색 표시처럼 sendmail을 on으로 열어두는 것이다.
우리가 메일을 직접 보낼 것이기 때문에 ON으로 바꾸어주야한다.

다시 돌아와서
1을 입력해준다. (Social-Engineering Attacks)




(1번 선택)




그 후 5번을 선택한다.
Mass Mailer Attack



(5번 선택)




그 다음으로 메일 보내기를 시작할 것인지 묻는 화면인데
y를 누르면 된다.



(Yes 선택)




1 번 은 Single 하나의 메일 주소에 메일을 보내는 것이고
2 번은 여러개의 메일에 보내는 것이다.

먼저 1번부터 해보자. :)
1번 선택



(1번 선택)




선택후 gamil을 사용할 것인지 아니면 현재 설치된 메일 서버로 보낼 것인지 선택하게 되어있다.
이 공격을 하기전에 메일 서버를 설치해 두었으므로 (메일 서버 구축은 따로 포스팅 하겠다.)
메일 서버를 이용해 보낼 것이다. 2번 선택
그리고 가짜 메일 주소
그리고 가짜 보내는 사람 이름
우선순위 높은 것으로 하겠느냐. yes
파일 첨부 : no
평문으로 보내는 것 : p
그리고 제목하고 내용을 쓰면 메일이 전송된다.




(메일 발송)



확인해보니 naver.com로 보냈는데 메일이 필터링 되서 수신되지 않았다...!

그래서 nate로 바꾸어서 다시 전송해보았다.







(메일 수신 화면)



(메일 내용)



메일이 아주아주 잘 왔다.
:)

그렇다면 이번에는
한번에 여러 계정으로 메일을 보내보겠다. (이게 읽기 제일 싫은 스팸메일..)

먼저 maillist 텍스트 파일을 만들어서 보낼 메일 주소를 다 적는다.
나는 naver, nate, gmail을 선택해서 보냈다.



(maillist)




위와 같은 과정이고
다만 Single , Mass 선택에서
2번 Mass를 선택하면 된다.



(2번 선택)



그리고 보낼 메일주소들이 적힌 파일들의 주소를 적어준다.
/root/maillist.txt 로 적어주었다.
그리고 나머지 과정은 위와 전부 같다.




(메일 전송)





(전송된 모습)




전송된 모습이다.
이제 직접 확인해 보겠다.
역시 naver는 필터링으로 걸러져 오지 않았다.
다만 nate와 gmail은 바로 잘 온것을 확인할 수 있다.





(메일이 전달된 모습)




(메일이 전달된 모습)





여기 까지 SET을 이용해 Mass Mailer Attack을 구현해보았다.
여기서 phishing URI를 활용하면 진짜 Mass Mailer Attack을 구현할 수 있는데
직접 실험해 보겠다. 또 다음에는 SET을 이용해 다른 공격을 해보겠다.


 

 

 

어제에 이어서  DNS서버 구축을 마무리 해보겠다.

도메인 설정

 설정 도메인 : 100.A.localdomain.com  (내가 해야할 DNS  서버 이름)

 

 

(vi 편집기를 이용해 복사한 zone 파일을 연다.)

 

 

복사된 샘플 zone 파일이다.

 

(복사된 샘플 zone 파일)

 

 

레코드(항목)
  - SOA ( Start Of Authority ) 도메인에대한 권한을 가지고 있는 것
  - NS ( Name Server ) : Name 서버에 대한 주소
  - A  (Address) : 주소.

 - IN   ( Internet 클래스 )
 TTL : 조회해간 IP주소를 얼마동안 참조할 것인가. 1D 는 하루동안 참조한다는 뜻이다.
 @ : 대체문자  나의 경우 100.A.localdomain.com 파일이름을 대신 적어주는 것이다.
      도메인 이름으로 주소를 적는다면 100.A.localdomain.com.  이렇게 마지막에 점을 찍어줘야한다.
      도메인 이름이 끝난다는 표시이다. 반드시 찍어줘야한다.
 
 serial : 도메인 네임에 대한 식별자. 보통은 날짜를 적어주는 것이 일반적이다. 
 refresh : TTL과 같다.
 expire : 파기시간
 minumum : 최소시간

 

 

 

(설정)

 

 

나는 이렇게 설정하였다.
DNS 서버 이름은 100.A.localdomain.com 이고
내가 가지고 있을 win 호스트의 주소를 적어주었다.

 

 

(파일 권한 보기)

 

 

DNS  서버를 실행시키기 전에 파일 권한을 확인해보았다.

읽기 권한이 없으면 zone파일에서 읽어서 주소를 알려줘야하는데
못알려주기 때문이다.
위 화면처럼 확인해보니 root 권한만 존재했다.

파일의 권한 설정을 해주었다.

 

 

(파일 권한 설정)

 

 

권한부여까지 끝났으면
DNS 서버를 실행시켜준다.

 

 

 

(DNS 서버 실행)

 

 

 

실행 화면을 확인해보겠다.

현재. 내 DNS 주소와 win 호스트 하나의 주소밖에 입력되지 않았다.

 

 

 

(nslookup 으로 확인해보는 화면)

 

 

 

확인해본결과 도메인 네임에 대한 주소를 잘 알려주고 있다.

 

 

(호스트 추가한 모습)

 

 

 

나 이외에 다른 호스트들도 추가한 모습이다.

 

 

 

(다른 도메인 네임의 영역까지 주소가 잘 전달되는 모습)

 

 

 

나는 A 도메인 안의 100이라는 DNS 서버를 만들었고
전체적으로 localdomain이라는 DNS 서버로 묶여져있었다.

마지막까지 잘 동작하는 것을 확인한 모습이다.

+ Recent posts