千家信息网

目标端口扫描方法总结

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,环境:靶机:10.10.10.11目标机:10.10.10.14 或者 10.10.10.121. scapy实现端口扫描1. 半连接扫描原理:靶机机向目标主机发送SYN请求,通过目标主机的回复判断端
千家信息网最后更新 2025年01月20日目标端口扫描方法总结


环境:
靶机:10.10.10.11
目标机:10.10.10.14 或者 10.10.10.12

1. scapy实现端口扫描

1. 半连接扫描

原理:靶机机向目标主机发送SYN请求,通过目标主机的回复判断端口是否是存活的,如果端口关闭会回复RST,如果没有关闭就会回复SYN/ACK

1.1 scapy扫描

端口开放情况

>>>sr1(IP(dst='10.10.10.14')/TCP(flags='S',dport=80))    #发送SYNBegin emission:....*Finished to send 1 packets.Received 5 packets, got 1 answers, remaining 0 packets>>  #得到SA的回复,目标端口没有关闭

端口没有开放情况:

>>> sr1(IP(dst='10.10.10.14')/TCP(flags='S',dport=8080))   #发送SYNBegin emission:....Finished to send 1 packets.*Received 5 packets, got 1 answers, remaining 0 packets>>    回复的RA(RST/ACK)

基于上面的叙述可以做一个简单的python端口半连接扫描脚本:

#!/usr/bin/python#encoding=utf-8from scapy.all import *def syn(ip,start,end):        for port in range(start,end):                reply = sr1(IP(dst=ip)/TCP(dport=port,flags='S'),timeout=2,verbose=0)                if (reply[TCP].flags == 18):                        print portdef main():        ip=raw_input('Input IP: ');        start=int(raw_input('Input start port: '))        end=int(raw_input('Input end port: '))        syn(ip,start,end)main()

1.2 nmap半连接扫描

kali@kal:~/review$ nmap -sS 10.10.10.14 -p20-30    #指定范围kali@kal:~/review$ nmap -sS 10.10.10.14 -p 80,22,5    #指定端口扫描kali@kal:~/review$ nmap -sS 10.10.10.14 -p 80,22,5 --open   #只显示开放的端口

扫描抓包情况如下:

1.3 hping3半连接扫描

指定ip范围扫描kali@kal:/$ sudo hping3 10.10.10.14 --scan 20-30 -S指定端口扫描kali@kal:/$ sudo hping3 10.10.10.14 --scan 20,22,25,30 -S伪造IP为192.168.10.10进行SYN扫描kali@kal:/$ sudo hping3 10.10.10.14 --spoof 192.168.10.10 --scan 20-30 -S

2. 全连接扫描

原理:首先向目标主机发送SYN包,然后目标主机回复SYN/ACK,再次向目标主机发送ACK的包,建立三次握手.三次握手建立成功,说明端口开放

2.1scapy全连接扫描

利用scapy实现全连接端口扫描,需要先关闭内核向外发送的RST

kali@kal:/$ sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROPkali@kal:/$ sudo iptables -LChain INPUT (policy ACCEPT)target     prot opt source               destination         Chain FORWARD (policy ACCEPT)target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)target     prot opt source               destination         DROP       tcp  --  anywhere             anywhere             tcp flags:RST/RST

建立全连接的主要代码如下:
端口可以任意修改

r1 = sr1(IP(dst='10.10.10.14')/TCP(flags='S',dport=22))r2 = sr1(IP(dst='10.10.10.14')/TCP(flags='A',dport=22,ack=r1[TCP].seq+1))

2.2 nmap全连接扫描

指定端口范围扫描
kali@kal:/$ sudo nmap -sT 10.10.10.14 -p1-100
指定端口扫描
kali@kal:/$ sudo nmap -sT 10.10.10.14 -p 22,25,888,23

2.3 dmitry全连接扫描

默认扫描1000个常用的端口

kali@kal:/$ dmitry -p 10.10.10.14

3.僵尸扫描

原理:
端口开放情况:

  1. 先通过scanner发送syn/ack给zombie,因为scanner没有走完整的三次握手先发送syn,而是直接发送了syn/sck,因此zombie回复rst,此时zombie的ipid=x;
  2. scanner伪造源ip地址,将源ip地址设置成zombie的ip地址向被扫描主机发送syn,被扫主机就会回复一个syn/ack给源ip,但是目前源ip设置的是zombie,因此目标主机错误的给zombie回复一个syn/ack,但是zombie并没有发送syn就直接收到了syn/ack,因此zombie回复RST,此时zombie的ipid=x+1。
  3. scanner再次向zombie发送syn/ack收到RST的回复,此时zombie的ipid=x+2
    通过上面三步,得知IPID序列增加2,就可以知道目标端口开放

    端口不开放情况:
  4. 先通过scanner发送syn/ack给zombie,因为scanner没有走完整的三次握手先发送syn,而是直接发送了syn/sck,因此zombie回复rst,此时zombie的ipid=x;
  5. scanner伪造源ip地址,将源ip地址设置成zombie的ip地址向被扫描主机发送syn,被扫主机端口不存活就会回复一个RST给源ip,但是目前源ip设置的是zombie,因此目标主机错误的给zombie回复一个RST,目标主机这是不会回复,那么IPID仍然为x。
  6. scanner再次向zombie发送syn/ack收到RST的回复,此时zombie的ipid=x+1
    通过上面三步,得知IPID序列增加2,就可以知道目标端口关闭

3.1scapy模块僵尸扫描

1. 先构造数据包,向僵尸机发送ACK,这里的端口是僵尸主机的端口。>>> s1 = IP(dst='10.10.10.12')/TCP(flags='A',dport=445)2. 再构造数据包,伪造源地址,源地址设置成僵尸主机的IP,目标地址设置成目标主机,这里的port的是目标主机的端口。>>> s2 = IP(dst='10.10.10.14',src='10.10.10.12')/TCP(flags='S',dport=22)3. 最后构造数据包,再向僵尸主机发送ACK。>>> s3 = IP(dst='10.10.10.12')/TCP(flags='A',dport=445)发送上面构造的数据包,按顺序发送。>>> r1 = sr1(s1,verbose=0)>>> r2 = sr1(s2,verbose=0)>>> r3 = sr1(s3,verbose=0)查看r1和r2的IPID>>> r1[IP].id9644>>> r3[IP].id9646增加为2,说明目标端口开放。如果增加为1,说明目标端口关闭,如果增加不为1或者2,就不能判断目标主机端口是否开放,因此需要目标主机ipid是递增的而且足够闲置。这里就不继续写脚本。

3.2 nmap实现僵尸扫描

判断10.10.10.12是否可以当做僵尸主机

kali@kal:/$ sudo nmap 10.10.10.12 -p445 --script=ipidseq.nse

随机查找网络中的僵尸主机

kali@kal:/$ sudo nmap -iR 100 -p 80 --script=ipidseq.nse

利用找到的僵尸主机扫描

kali@kal:/$ sudo nmap 10.10.10.14 -sI 10.10.10.12 -p1-100 WARNING: Many people use -Pn w/Idlescan to prevent pings from their true IP.  On the other hand, timing info Nmap gains from pings can allow for faster, more reliable scans.Starting Nmap 7.70 ( https://nmap.org ) at 2018-06-21 18:02 CSTIdle scan using zombie 10.10.10.12 (10.10.10.12:443); Class: IncrementalNmap scan report for 10.10.10.14Host is up (0.044s latency).Not shown: 94 closed|filtered portsPORT   STATE SERVICE21/tcp open  ftp22/tcp open  ssh23/tcp open  telnet25/tcp open  smtp53/tcp open  domain80/tcp open  httpMAC Address: 00:0C:29:FA:DD:2A (VMware)Nmap done: 1 IP address (1 host up) scanned in 4.83 seconds
0