본문 바로가기

Learning/└◆Network Hacking

dnmap 분산 스캐닝

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