信息收集之:主动信息收集——端口扫描
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
2 端口扫描
2.1 UDP 端口扫描
-
原理
- 端口关闭:ICMP port-unreachable 响应,目标系统不响应 ICMP port-unreachable 时,可能产生误判(认为端口是开放的)
- 端口开放:没有回包
-
完整的UDP应用层请求
- 准确性高
- 耗时巨大
2.1.1 SCAPY
#!/usr/bin/python
# description: print the udp port number if the host open the port,otherwise continue
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import time
import sys
if len(sys.argv) != 4:
print("./udp_scan.py [target ip] [first port] [last port]")
print("example ./udp_scan.py 10.0.0.5 1 100")
print("example will UDP port scan ports 1 to 100 on 10.0.0.5")
ip = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3])
for port in range(start, end):
a = sr1(IP(dst=ip) / UDP(dport=port), timeout=5, verbose=0)
time.sleep(1)
if a == None:
print(port)
else:
pass
2.1.2 NMAP
# UDP 扫描
nmap -sU 172.30.26.130 --open
nmap -sU -p68 172.30.26.130
nmap -sU -p 1-200 -iL iplist.txt --open
2.2 TCP 端口扫描
基于链接的协议,三次握手。所有的TCP扫描方式都是基于三次握手的变化来判断目标端口状态
扫描方式有:
- 僵尸扫描
- 隐蔽扫描
- 全连接扫描
2.2.1 僵尸扫描
僵尸扫描特点:
- 极其隐蔽
- 实施条件苛刻
- 扫描发起方可以地址伪造
- 必须要有僵尸机(机器闲置,但不被控制,操作系统 IPID 递增,在 IP 包头里的 ID 字段,现在的 linux 与 windows 系统的 ID 随机产生,早期的 windows 系统是顺序产生的[如:XP])
过程解析:
- 由扫描者向僵尸机发送 SYN/ACK 包,,然后Zombie(假设此时系统产生的 IPID 为 x )会回个主机一个 RST,主机将会得到 Zombie 的 IPID
- 扫描者向目标服务器发送 SYN 包,并将发送时 IP 伪造为僵尸机
- 如果目标服务器端口开放,会向僵尸机发送 SYN/ACK 包 , 由于僵尸机并没有发送任何的包,僵尸机会向目标主机发送 RST 包,且僵尸机 IPID 将会增加1(x+1)
- 扫描者再向僵尸机发送 SYN/ACK 包,僵尸机返回 RST 包,IPID 为 x+2。
- 如果目标服务器端口未开放,将返回给僵尸机 RST 包,僵尸机收到 RST 包后不会有任何反应,所以IPID不会改变(依旧是x)
- 扫描者再次向僵尸机发送 SYN/ACK 包返回 RST,IPID 为x+1
>>> ip=IP()
>>> tcp=TCP()
>>> rz=(i/t)
>>> rt=(i/t)
# 向僵尸机发送 SYN,ACK 包
>>> rz[IP].dst=IPz
>>> rz[TCP].dport=445
>>> rz[TCP].flags="SA"
# 向目标服务器发送 SYN 包,发送时 IP 伪造为僵尸机
>>> rt[IP].src=IPz
>>> rt[IP].dst=IPt
>>> rt[TCP].dport=25
>>> rt[TCP].flags="S"
# 确定当前僵尸机 IP ID 序列数
>>> az1=sr1(rz)
# 伪造为僵尸机 IP 扫描目标主机端口
>>> at=sr1(rt)
# 确认扫描后的僵尸机的 IP ID 序列数 是否比 az1 大 2.
>>> az2=sr1(rz)
>>> az1.display()
>>> az2.display()
探测网络中的僵尸机
nmap -p 445 192.168.1.133 --script=ipidseq.nse
扫描目标僵尸机
nmap 172.16.36.135 -sI 172.16.36.134 -Pn -p 0-100
# -sI 利用僵尸机扫描目标主机 172.16.36.135