端口扫描
- scapy UDP scan
- 端口关闭:ICMP port-unreachable
- 端口开放:没有回包
- 了解每一种基于UDP的应用层包结构很有帮助的
- 与三层相同的技术
- 误判
- scapy
- sr1(IP(dst=“192.168.0.68”)/UDP(dport=53),timeout=1,verbose=1
TCP端口扫描
- 基于连接的协议
- 三次握手
- 隐蔽扫描
- 僵尸扫描
- 全连接扫描
- 所有的TCP扫描方式都是基于三次握手的变化来判断目标端口状态
隐蔽端口扫描
- 隐蔽扫描—syn
- scapy
- sr1(IP(dst=“192.168.0.96”)/TCP(dport=80),timeout=1,verbose=1)
- nmap:
- nmap -sS 192.168.0.53 -p80,21,110,443
- nmap -sS 192.168.0.53 -p1-65535 --open
- nmap默认带有sS参数
- hping3:
- hping3 192.168.0.53 --scan 80 -S
- hping3 192.168.0.53 --scan 80,53,21,443 -S
- hping3 -c 10 -S --spoof 192.168.0.53 -p ++1 192.168.0.236(扫描10个端口)
全连接端口扫描
- scapy
- syn扫描不需要raw packets
- 内核认为syn/ack是非法包,直接发rst中断连接
- 全连接扫描对scapy比较困难
- nmap:
- nmap -sT 192.168.0.53 -p 80
- nmap -sT 192.168.0.53 -p21,23,80
- nmap -sT 192.168.0.53 -p 80-2000
- 默认扫描1000个常用端口
- dmitry:
- dmitry -p 192.168.0.53
- dmitry -p 192.168.0.236 -o output
- nc -nv - w 1 -z 192.168.60.4 1-100(扫描100以内的开放的端口,只扫描一次)
僵尸扫描
- 极度隐蔽
- 实施条件苛刻
- 可伪造源地址
- 选择僵尸机
- scapy:
- i=IP()
- t=TCP()
- rz=(i/t)
- rt=(i/t)
- rz[IP].dst=僵尸机ip(扫描僵尸机ip是否可作为僵尸机)
- rz[TCP].dport=扫描僵尸机对应的端口(扫描僵尸机端口是否开放)
- rz[TCP].flags=“SA”
- rt[IP].src=僵尸机ip地址
- rt[IP].dst=目标机ip地址
- rt[TCP].dport=目标机端口(需要扫描目标机的端口)
- rt[TCP].flags=“S”
- az1=sr1(rz) /at=sr1(rt) / az2=sr1(rz)
- az1.display() / az2.display()
- nmap:
- 发现僵尸机:
- nmap -p445 192.168.0.102 --script=ipidseq.nse
- 扫描目标:
- nmap 192.168.0.236 -sI 192.168.0.102 -Pn -p 1-100
- 原理:
- 扫描着向僵尸机发送一个SYN+ACK包,僵尸机回复RST,此时IPID=X
- 扫描机向目标机发送一个SYN包,源地址为僵尸机的地址,端口为僵尸机开放的端口
- 扫描机再次向僵尸机发送SYN/ack包,僵尸机回复RST,如果此时IPID=X+1,说明目标机是down如果IPID=X+2说明目标机up
|