0w0
[primalsecurity] 0x1 – Port Scanner 본문
Primalsecurity/Primalsecurity_Python-tutorials
[primalsecurity] 0x1 – Port Scanner
0w0 2019. 12. 18. 04:43728x90
반응형
반복문(for)을 사용해서 포트스캐닝 수행 코드 분석
IP/포트 조합을 기반으로 네트워크 소켓 연결 반복 스캐닝
1
2
|
>>> for port in range(1000,1024):
... print("[+] The port is : "+str(port))
|
출력 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[+] The port is : 1000
[+] The port is : 1001
[+] The port is : 1002
[+] The port is : 1003
[+] The port is : 1004
[+] The port is : 1005
[+] The port is : 1006
[+] The port is : 1007
[+] The port is : 1008
[+] The port is : 1009
[+] The port is : 1010
[+] The port is : 1011
[+] The port is : 1012
[+] The port is : 1013
[+] The port is : 1014
[+] The port is : 1015
[+] The port is : 1016
[+] The port is : 1017
[+] The port is : 1018
[+] The port is : 1019
[+] The port is : 1020
[+] The port is : 1021
[+] The port is : 1022
[+] The port is : 1023
>>>
|
내부 소켓 모듈을 사용하여 소켓을 연결
1
2
3
4
5
6
7
8
9
|
>>> import socket
>>>
>>> s = socket.socket()
>>> s.connect(('127.0.0.1', 22))
>>> s.send('Primal Security n')
17
>>> banner = s.recv(1024)
>>> print banner
OpenSSH
|
소켓 모듈 호출 후 connect() 함수를 호출하여 IP/Port 연결
send() 함수로 연결된 지점으로 데이터 전송
recv() 함수로 해당 포트로 응답을 받음
예외처리(try/except) 방식
1
2
3
|
>>> try:
... s.connect(('127.0.0.1', 23))
... except: pass
|
예외처리 적용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
>>> for port in range(20,25):
... try:
... print("[+] Attempting to connect to 127.0.0.1:"+str(port))
... s.connect(('127.0.0.1', port))
... s.send('Primal Security n')
... banner = s.recv(1024)
... if banner:
... print("[+] Port "+str(port)+" open: "+banner)
... s.close()
... except: pass
...
17
[+] Attempting to connect to 127.0.0.1:20
[+] Attempting to connect to 127.0.0.1:21
[+] Attempting to connect to 127.0.0.1:22
[+] Port 22 open: OpenSSH
[+] Attempting to connect to 127.0.0.1:23
[+] Attempting to connect to 127.0.0.1:24
[+] Attempting to connect to 127.0.0.1:25
|
7line의 조건 문을 사용해서 probe에 대한 응답이 있을 경우 open port로 출력하도록함
배열로 포트 적용
1
2
3
4
5
6
7
8
9
10
|
>>> ports = [22, 445, 80, 443, 3389]
>>> for port in ports:
... print port
...
22
445
80
443
3389
>>>
|
중첩 for 문으로 배열로 적용한 타겟과 포트 probe 보내기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
>>> hosts = ['127.0.0.1', '192.168.1.5', '10.0.0.1']
>>>
>>> ports = [22, 445, 80, 443, 3389]
>>>
>>> for host in hosts:
... for port in ports:
... try:
... print("[+] Connecting to "+host+":"+str(port))
... s.connect((host, port))
... s.send('Primal Security n')
... banner = s.recv(1024)
... if banner:
... print("[+] Port "+str(port)+" open: "+banner)
... s.close()
... except:pass
...
[+] Connecting to 127.0.0.1:22
[+] Port 22 open: OpenSSH
[+] Connecting to 127.0.0.1:445
[+] Connecting to 127.0.0.1:80
[+] Connecting to 127.0.0.1:443
[+] Connecting to 127.0.0.1:3389
[+] Connecting to 192.168.1.5:22
[+] Connecting to 192.168.1.5:445
[+] Connecting to 192.168.1.5:80
[+] Connecting to 192.168.1.5:443
[+] Connecting to 192.168.1.5:3389
[+] Connecting to 10.0.0.1:22
[+] Connecting to 10.0.0.1:445
[+] Connecting to 10.0.0.1:80
[+] Connecting to 10.0.0.1:443
[+] Connecting to 10.0.0.1:3389
|
dir(socket)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
>>> dir(socket)
['AF_APPLETALK', 'AF_DECnet', 'AF_INET', 'AF_INET6', 'AF_IPX', 'AF_IRDA', 'AF_SNA', 'AF_UNS
PEC', 'AI_ADDRCONFIG', 'AI_ALL', 'AI_CANONNAME', 'AI_NUMERICHOST', 'AI_NUMERICSERV', 'AI_PA
SSIVE', 'AI_V4MAPPED', 'AddressFamily', 'AddressInfo', 'CAPI', 'EAGAIN', 'EAI_AGAIN', 'EAI_
BADFLAGS', 'EAI_FAIL', 'EAI_FAMILY', 'EAI_MEMORY', 'EAI_NODATA', 'EAI_NONAME', 'EAI_SERVICE
', 'EAI_SOCKTYPE', 'EBADF', 'EWOULDBLOCK', 'INADDR_ALLHOSTS_GROUP', 'INADDR_ANY', 'INADDR_B
ROADCAST', 'INADDR_LOOPBACK', 'INADDR_MAX_LOCAL_GROUP', 'INADDR_NONE', 'INADDR_UNSPEC_GROUP
', 'IPPORT_RESERVED', 'IPPORT_USERRESERVED', 'IPPROTO_ICMP', 'IPPROTO_IP', 'IPPROTO_RAW', '
IPPROTO_TCP', 'IPPROTO_UDP', 'IPV6_CHECKSUM', 'IPV6_DONTFRAG', 'IPV6_HOPLIMIT', 'IPV6_HOPOP
TS', 'IPV6_JOIN_GROUP', 'IPV6_LEAVE_GROUP', 'IPV6_MULTICAST_HOPS', 'IPV6_MULTICAST_IF', 'IP
V6_MULTICAST_LOOP', 'IPV6_PKTINFO', 'IPV6_RECVRTHDR', 'IPV6_RECVTCLASS', 'IPV6_RTHDR', 'IPV
6_TCLASS', 'IPV6_UNICAST_HOPS', 'IPV6_V6ONLY', 'IP_ADD_MEMBERSHIP', 'IP_DROP_MEMBERSHIP', '
IP_HDRINCL', 'IP_MULTICAST_IF', 'IP_MULTICAST_LOOP', 'IP_MULTICAST_TTL', 'IP_OPTIONS', 'IP_
RECVDSTADDR', 'IP_TOS', 'IP_TTL', 'IntEnum', 'IntFlag', 'MSG_BCAST', 'MSG_CTRUNC', 'MSG_DON
TROUTE', 'MSG_MCAST', 'MSG_OOB', 'MSG_PEEK', 'MSG_TRUNC', 'MSG_WAITALL', 'MsgFlag', 'NI_DGR
AM', 'NI_MAXHOST', 'NI_MAXSERV', 'NI_NAMEREQD', 'NI_NOFQDN', 'NI_NUMERICHOST', 'NI_NUMERICS
ERV', 'RCVALL_MAX', 'RCVALL_OFF', 'RCVALL_ON', 'RCVALL_SOCKETLEVELONLY', 'SHUT_RD', 'SHUT_R
DWR', 'SHUT_WR', 'SIO_KEEPALIVE_VALS', 'SIO_LOOPBACK_FAST_PATH', 'SIO_RCVALL', 'SOCK_DGRAM'
, 'SOCK_RAW', 'SOCK_RDM', 'SOCK_SEQPACKET', 'SOCK_STREAM', 'SOL_IP', 'SOL_SOCKET', 'SOL_TCP
', 'SOL_UDP', 'SOMAXCONN', 'SO_ACCEPTCONN', 'SO_BROADCAST', 'SO_DEBUG', 'SO_DONTROUTE', 'SO
_ERROR', 'SO_EXCLUSIVEADDRUSE', 'SO_KEEPALIVE', 'SO_LINGER', 'SO_OOBINLINE', 'SO_RCVBUF', '
SO_RCVLOWAT', 'SO_RCVTIMEO', 'SO_REUSEADDR', 'SO_SNDBUF', 'SO_SNDLOWAT', 'SO_SNDTIMEO', 'SO
_TYPE', 'SO_USELOOPBACK', 'SocketIO', 'SocketKind', 'SocketType', 'TCP_FASTOPEN', 'TCP_KEEP
CNT', 'TCP_MAXSEG', 'TCP_NODELAY', '_GLOBAL_DEFAULT_TIMEOUT', '_GiveupOnSendfile', '_LOCALH
OST', '_LOCALHOST_V6', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__l
oader__', '__name__', '__package__', '__spec__', '_blocking_errnos', '_intenum_converter',
'_realsocket', '_socket', 'create_connection', 'dup', 'errno', 'error', 'errorTab', 'fromfd
', 'fromshare', 'gaierror', 'getaddrinfo', 'getdefaulttimeout', 'getfqdn', 'gethostbyaddr',
'gethostbyname', 'gethostbyname_ex', 'gethostname', 'getnameinfo', 'getprotobyname', 'gets
ervbyname', 'getservbyport', 'has_ipv6', 'herror', 'htonl', 'htons', 'inet_aton', 'inet_nto
a', 'inet_ntop', 'inet_pton', 'io', 'ntohl', 'ntohs', 'os', 'selectors', 'setdefaulttimeout
', 'socket', 'socketpair', 'sys', 'timeout']
|
728x90
반응형
'Primalsecurity > Primalsecurity_Python-tutorials' 카테고리의 다른 글
[primalsecurity] 0x3 – Fuzzer (0) | 2019.12.21 |
---|---|
[primalsecurity] 0x2 – Reverse Shell (0) | 2019.12.19 |
[primalsecurity] 0x0 – Getting Started Pt.2 (0) | 2019.12.17 |
[primalsecurity] 0x0 – Getting Started (0) | 2019.12.14 |
[primalsecurity] 0x00 - python tutorials (0) | 2019.12.10 |
Comments