dnmap 분산 스캐닝
다량의 테스트를 진행할 때 사용
서버와 클라이언트로 구성하여 여러대의 클라이언트를 이용한 스캐닝 툴
dnmap 이용한 분산 nmap 수행하기
Topology
--------
|--------------------|
| nmap commands file | nmap cmd들이 적혀져 있다.
|--------------------|
|
|
V
|--------------|
| dnmap_server | 파일의 내용을 클라이언트에게 분산
|--------------|
|
| |--------------|
|- | dnmap_client |-> Packets to the net...
| |--------------|
|
| |--------------|
|-| dnmap_client |-> Packets to the net...
| |--------------|
|
| |--------------|
|-| dnmap_client |-> Packets to the net...
| |--------------|
1. commands.txt 파일이 존재해야한다.
2. 서버를 기동한다. ./dnmap_server -f conmands.txt
3. 클라이언트에게 분산하여 배분
Example commands in the file that are OK:
nmap -sS -p22 192.168.1.0/24 -v -n -oA 192.168.1.0
nmap -sS -p22 192.168.2.0/24 -v -n -oA 192.168.3.0
nmap -sS -p22 192.168.3.0/24 -v -n -oA 192.168.4.0
nmap -sP -p22 192.168.3.0/24 -v -n -oA 192.168.4.0
nmap -sS --top-ports 100 192.168.3.3 -v -n -oA 192.168.3.3.top100
nmap -sS --top-ports 100 192.168.3.4 -v -n -oA 192.168.3.4.top100
nmap -sS --top-ports 100 192.168.3.5 -v -n -oA 192.168.3.5.top100
네트워크 번호 형태
Example commands in the file you should avoid:
nmap -sS -p22 192.168.1.1 -v -n -oA 192.168.1.1
nmap -sS -p22 192.168.1.2 -v -n -oA 192.168.1.2
nmap -sS -p22 192.168.1.3 -v -n -oA 192.168.1.3
ip형식은 좋지않다.
■ dnmap(Distributed nmap) : 분산을 이용한 엔맵 수행
서버와 클라이언트로 구성되어 있으며 서버가 클라이언트로 nmap 명령을 보내면 클라이언트가 내용을 받아서 실행한다.
여러 검사를 혼자 수행할 경우 부하가 심해지는데 dnmap을 사용하면 부하를 클라이언트로 분산시키는 효과를 볼수 있다. 또한 nmap의 결과는 서버와 클라이언트 양쪽에 로그 파일로 저장된다.
[실습] dnmap 사용하기
실습 시스템
KaliLinux(dnmap CMD)
linux200(CentOS)
win2008(windows 2008)
Firewall(CentOS)
실습 환경
실습에서는 KaliLinux 내에 서버/클라이언트를 같이 구성한다.
① 패키지 설치 확인
(KaliLinux)
[참고] 패키지 관리 명령어 사용하는 방법에 대한 비교
■ (Debian 계열) Debian + Utuntu
# dpkg -l
# dpkg -l <PKG>
# dpkg -L <PKG>
# dpkg -S /bin/ls 파일이 어떤 패키지에 들어있는지 확인
# dpkg -s coreutils 패키지에 관련된 정보 출력
■ (RedHat 계열) RedHat + CentOS + Fedora
# rpm -qa
# rpm -q <PKG>
# rpm -ql <PKG>
# rpm -qf /bin/ls 파일이 어떤 패키지에 들어있는지 확인
# rpm -qi coreutils 패키지에 관련된 정보 출력
# dpkg -l dnmap (# dpkg -l | grep dnmap)
희망상태=알수없음(U)/설치(I)/지우기(R)/깨끗이(P)/고정(H) | 상태=아님(N)/설치(I)/설정(C)/풀림(U)/절반설정(F)/일부설치(H)/트리거대기(W)/ | / 트리거밀림(T) |/ 오류?=(없음)/다시설치필요(R) (상태, 오류가 대문자=불량) ||/ 이름 버전 Architecture 설명 +++-==============-============-============-================================= ii dnmap 0.6-1kali2 all Distributed nmap framework |
# dpkg -L dnmap
/. /usr /usr/share /usr/share/doc /usr/share/doc/dnmap /usr/share/doc/dnmap/README.gz /usr/share/doc/dnmap/copyright /usr/share/doc/dnmap/changelog.Debian.gz /usr/share/dnmap /usr/share/dnmap/server.pem /usr/bin /usr/bin/dnmap_client 실제 명령어 /usr/bin/dnmap_server 실제 명령어 |
② (dnmap_server 에서) 명령 파일 작성
# mkdir -p /root/bin
# cd /root/bin
# vi dnmap_command.txt
nmap -sS -p22 192.168.10.0/24 -v -n -oA 192.168.10.0 nmap -sS -p22 192.168.20.0/24 -v -n -oA 192.168.20.0 |
# man nmap ?
-sS -p -v -n -oA |
③ (dnmap_server 에서)dnmap 서버 실행
# dnmap_server -h
+----------------------------------------------------------------------+ | dnmap_server Version 0.6 | | This program is free software; you can redistribute it and/or modify | | it under the terms of the GNU General Public License as published by | | the Free Software Foundation; either version 2 of the License, or | | (at your option) any later version. | | | | Author: Garcia Sebastian, eldraco@gmail.com | | www.mateslab.com.ar | +----------------------------------------------------------------------+
usage: /usr/bin/dnmap_server <options> options: -f, --nmap-commands Nmap commands file 파일 커맨드 지정 -p, --port TCP port where we listen for connections. -L, --log-file Log file. Defaults to /var/log/dnmap_server.conf. -l, --log-level Log level. Defaults to info. -v, --verbose_level Verbose level. Give a number between 1 and 5. Defaults to 1. Level 0 means be quiet. -t, --client-timeout How many time should we wait before marking a client Offline. We still remember its values just in case it cames back. -s, --sort Field to sort the statical value. You can choose from: Alias, #Commands, UpTime, RunCmdXMin, AvrCmdXMin, Status -P, --pem-file pem file to use for TLS connection. By default we use the server.pem file provided with the server in the current directory.
dnmap_server uses a '<nmap-commands-file-name>.dnmaptrace' file to know where it must continue reading the nmap commands file. If you want to start over again, just delete the '<nmap-commands-file-name>.dnmaptrace' file |
# dnmap_server -f dnmap_command.txt
+----------------------------------------------------------------------+ | dnmap_server Version 0.6 | | This program is free software; you can redistribute it and/or modify | | it under the terms of the GNU General Public License as published by | | the Free Software Foundation; either version 2 of the License, or | | (at your option) any later version. | | | | Author: Garcia Sebastian, eldraco@gmail.com | | www.mateslab.com.ar | +----------------------------------------------------------------------+
=| MET:0:00:00.000514 | Amount of Online clients: 0 |= =| MET:0:00:05.005597 | Amount of Online clients: 0 |= ..... (중략) ..... |
④ (dnmap_clinet 에서)클라이언트 실행
# dnmap_client -h
+----------------------------------------------------------------------+ | dnmap Client Version 0.6 | | This program is free software; you can redistribute it and/or modify | | it under the terms of the GNU General Public License as published by | | the Free Software Foundation; either version 2 of the License, or | | (at your option) any later version. | | | | Author: Garcia Sebastian, eldraco@gmail.com | | www.mateslab.com.ar | +----------------------------------------------------------------------+
usage: /usr/bin/dnmap_client <options> options: -s, --server-ip IP address of dnmap server. -p, --server-port Port of dnmap server. Dnmap port defaults to 46001 -a, --alias Your name alias so we can give credit to you for your help. Optional -d, --debug Debuging. -m, --max-rate Force nmaps commands to use at most this rate. Useful to slow nmap down. Adds the --max-rate parameter. |
# dnmap_client -s 192.168.20.50
+----------------------------------------------------------------------+ | dnmap Client Version 0.6 | | This program is free software; you can redistribute it and/or modify | | it under the terms of the GNU General Public License as published by | | the Free Software Foundation; either version 2 of the License, or | | (at your option) any later version. | | | | Author: Garcia Sebastian, eldraco@gmail.com | | www.mateslab.com.ar | +----------------------------------------------------------------------+
Client Started... Nmap output files stored in 'nmap_output' directory... Starting connection... Client connected succesfully... Waiting for more commands.... Command Executed: nmap -sS -p22 192.168.10.0/24 -v -n -oA 192.168.10.0 ..... (중략) ..... |
⑤ (dnmap_server 에서)출력 내용 확인
일정한 시간이 흐른 이후에 결과가 nmap_output 디렉토리에 생성된다.
# cd /root/bin
# ls
nmap_output/ nmap_results/ |
nmap_output/ dnmap_client 출력 결과
nmap_results/ dnmap_server 출력 결과
# cd nmap_output
# ls
192.168.10.0.gnmap 192.168.10.0.xml 192.168.20.0.nmap 192.168.10.0.nmap 192.168.20.0.gnmap 192.168.20.0.xml |
# cat 192.168.10.0.top100.nmap
-> 출력 내용 생략
# cat 192.168.20.0.top100.nmap
-> 출력 내용 생략
dnmap.sh 파일 만들기
분산 nmap 수행
구조
(dnmap server) ---------------->
# vi dnmap_CMD.txt
nmap ......
nmap ...... (dnmap client1)
# ./dnmap.sh # nmap ......
-> resultA
(dnmap client2)
# nmap ......
-> resultB
<----------------
# cat result.txt
----------------------------------------------------------------------
(이론1) ssh/scp/sftp CMD 사용법
----------------------------------------------------------------------
■ ssh CMD 사용법
# ssh <USER>@<IP> (EX) # ssh 192.168.20.200
# ssh <USER>@<IP> <CMD> (EX) # ssh 192.168.20.200 hostname
사용시스템
- linux200 (192.168.20.200)
- KaliLinux (192.168.20.50)
(KaliLinux)
# ssh 192.168.20.200
root 사용자로 로그인
# hostname
# id
# exit
# cd ~/.ssh
# cat known_hosts
# ssh user01@192.168.20.200
user01 사용자로 로그인
$ hostname
$ id
$ exit
#
# cd ~/.ssh
# > known_hosts
# ssh 192.168.20.200 hostname
yes
root 사용자의 암호 입력
ssh <IP> <CMD> 상대 서버에서 명령어를 실행한 뒤 빠져나온다.
동작은 상대 서버에서 하고 출력만 보내준다.
# ssh user01@192.168.20.200 id
user01 사용자의 암호 입력
# ssh user01@192.168.20.200 "hostname ; id"
user01 사용자의 암호 입력
여러개의 명령어를 동시 수행할 수 있다.
----------------------------------------------------------------
■ scp CMD 사용법
# scp file1 192.168.20.200:/tmp
# scp file1 192.168.20.200:/tmp/file2
# scp 192.168.20.200:/tmp/file2 /test
# scp -r dir1 192.168.20.200:/tmp
scp <file> <IP>:/<경로>
# cd ~/.ssh
# > known_hosts
# scp /root/bin/reverse_test.exe 192.168.20.200:/tmp
root 사용자의 암호 입력
# ssh 192.168.20.200 ls -l /tmp/reverse*
root 사용자의 암호 입력
# scp 192.168.20.200:/tmp/reverse* /test
root 사용자의 암호 입력
# ls -l /test/reverse*
# scp -r /test 192.168.20.200:/tmp
root 사용자의 암호 입력
# ls -l /test
# ssh 192.168.20.200 ls -l /tmp/test
root 사용자의 암호 입력
------------------------------------------
(이론2) 인증 없이 명령어 수행
------------------------------------------
-------- hostA ------ ------- hostB -----------
# ssh-keygen CMD
- id_rsa
- id_rsa.pub --------------------> authorized_keys
(KaliLinux)
# ssh-keygen -t rsa (# ssh-keygen -t dsa)
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa) : 저장할 위치, enter시 기본값 Enter passphrase (empty for no passphrase): 인증서 암호, enter시 암호 없음 Enter same passphrase again: |
<ENTER>
<ENTER>
<ENTER>
scp <IP> <cmd> 수행할때 사용자가 관리자의 암호를 알아야만 수행할 수 있다.
root사용자의 암호가 유출되는 것을 방지하기 위해 서버에서 지정해준 임의에 암호를 원격사용자가 사용할 수 있게한다.
ssh,scp명령어 수행시만 사용할 수 있다.
# cd ~/.ssh
# ls
id_rsa private key file, ex개인이 갖는것, 복구할때 쓰임
id_rsa.pub public key file, ex은행이 갖는것, 암호화 할때 쓰임
# scp id_rsa.pub 192.168.20.200:/root/.ssh/authorized_keys
root 사용자의 암호 입력
# ssh 192.168.20.200 ls -l /root/.ssh
-> root 사용자 암호 입력 없이 명령어 수행 가능
# ssh 192.168.20.200
# hostname
# id
# exit
# scp 192.168.20.200:/etc/hosts /test
# cat /test/hosts
# cd ~/.ssh
# ls
# mv id_rsa.pub authorized_keys
# service ssh restart
# ssh 192.168.20.50 hostname
(Debian 계열) # update-rc.d ssh enable
# service ssh restart
(RedHat 계열) # chkconfig sshd on
# service sshd restart
.ssh 디렉토리가 없을 때
# ssh localhost 입력시 자동 생성된다.(known_hosts파일 생성)
----------------------------------------
(이론3) 스크립트를 작성해 보자 (여러대의 서버를 마음대로 설정하기)
----------------------------------------
# cmd.sh CMD
(EX) cmd.sh hostname
(KaliLinux)
# service ssh restart
# cd /root/bin
# vi cmd.sh
#!/bin/bash
echo "----------- KaliLinux -----------" ssh 192.168.20.50 $* echo echo "----------- linux200 -----------" ssh 192.168.20.200 $* echo |
# chmod 755 cmd.sh
# ./cmd.sh hostname
# ./cmd.sh cat /etc/hosts
두 서버를 동시에 명령하여 출력할 수 있다.
# ./copy.sh file1 /tmp
---------------------------------
scp file1 192.168.20.50:/tmp
scp file1 192.168.20.200:/tmp
---------------------------------
# cd /root/bin
# vi copy.sh
#!/bin/bash
scp $1 192.168.20.50:$2 scp $1 192.168.20.200:$2 |
# chmod 755 copy.sh
# ./copy.sh /etc/hosts /tmp
# ./cmd.sh ls -l /tmp/hosts*
------------------------------------------------------------------------------------------------
프로그램 작성.
(프로그램 실행)
# cat nmap_CMD.txt
-------------------------------------
nmap CMD 1(192.168.10.0/24 스캐닝) : nmap -sS -p22 192.168.10.0/24 -v -n -oA 192.168.10.0
nmap CMD 2(192.168.20.0/24 스캐닝) : nmap -sS -p22 192.168.20.0/24 -v -n -oA 192.168.20.0
-------------------------------------
# vi dnmap.sh
--------------------------------------
######Client IP_Address########
index=0
while read ip
do
client ip[$index]=$ip
index=`expr $index + 1`
done < nmap_client.txt
#####Output_Directory#########
if [ ! -d /nmap_output ] ; then
mkdir -p /nmap_output
fi
######MAIN##########
line_count=0
CLIENT_L=`wc -l nmap_client.txt | awk '{ print $1 }'
while read CMD
do
while read DUMMY_LOOP
do
INDEX=`expr $LINE_COUNT % $CLIENT_L`
FILE_NAME=`echo $CMD | awk '{ print $3 }' | awk -F/ '{ print $1 }'`_nmap.txt
ssh ${client_ip[$INDEX]} "$CMD" > /nmap_output/$FILE_NAME
LINE_COUNT=`expr $LINE_COUNT + 1`
done < nmap_cmd.txt
done < nmap_cmd.txt
######file check#####
echo **
echo " ls -l /nmap_output "
--------------------------------------
hint. sed -n '1p' nmap_CMD.txt sed -n '2p' nmap_CMD.txt NUM=1 sed -n "${NUM}p' CMD.txt ssh 192.168.20.200 'sed -n "${NUM}p" CMD.txt' |
출력결과
# ./dnmap.sh
-> nmap_CMD.txt 파일 읽기
-> (clinet 1) nmap CMD 1 clinet 1 = KaliLinux(192.168.10.0/24)
# ssh 192.168.20.50 "nmap CMD 1"
-> (client 2) nmap CMD 2 client 2 = linux200 (192.168.20.0/24)
# ssh 192.168.20.200 "nmap CMD 2"
# cd nmap_output
# ls
192.168.10.0_nmap.txt
192.168.20.0_nmap.txt
#
'Learning > └◆Network Hacking' 카테고리의 다른 글
포트 스캔을 통한 보안 장비 설치 여부 확인 (0) | 2017.01.03 |
---|---|
운영체제 스캐닝 (Banner Grabbing) (0) | 2016.12.29 |
zenmap(xnmap) 스캐닝 (0) | 2016.12.29 |
nmap 스캐닝 (0) | 2016.12.29 |