隐蔽端口扫描:
Syn————syn/ack————rst
借用Scapy给目标发送一个syn包,目标回一个syn/ack包,我们不回syn包确认,回一个RST包跟目标机器断开握手,但是操作系统内核它由于不识别我们这个包,内核会自动回一个RST包断开握手。(这是操作系统替我们完成了。)
//操作系统会回一个RST表示断开连接,不进行三次握手
实例操作:
Scapy工具举例:
a=sr1(IP(dst="192.168.1.1")/TCP(flags="S",dport=22),timeout=1,verbose=0)
//操作系统会回一个RST表示断开连接,不进行三次握手
a=srl(IP(dst="192.168.1.1")/TCP(dport=80),timeout=1,verbose=1)
./syn_scan.py
脚本:
=======================
#!/usr/bin/python
import logging
logging.getlogging("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import*
import sys
if len(sys.argv)!=4
print "Usage - ./syn_scan.py [Target.IP] [First Port] [Last Port]"
print "Example - ./Syn_scan.py 1.1.1.1 100"
print "Example will TCP SYN scan ports 1 through 100 on 1.1.1.1"
sys.exit()
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")/TCP(dport=port),timeout=1,verbose=0)
if a==None;
pass
else:
if int(a[TCP].flags)==18
print port
else
pass
=======================
隐蔽端口扫描实例:Nmap、hping3
如:
nmap -sS 1.1.1.1 -p 80,21,25,110,443
nmap -sS 1.1.1.1 -p1-65535 --open
nmap -sS 1.1.1.1 -p- --open
nmap -sS -iL iplist.txt -p 80,21,22,23
如:
hping3
hping3 1.1.1.1 --scan 80 -S
hping3 1.1.1.1 --scan 80,21,25,445 -S
hping3 1.1.1.1 --scan 0-65535 -S
hping3 -c 10 -S --spoof 1.1.1.2 -p ++1 1.1.1.3 //spoof后面加欺骗IP地址(假IP),-p接目标IP ----当然回包也给了假IP
想要知道结果,只能有权登录假IP的电脑,在上面抓包(肉鸡)——————————或者控制网关,镜像流量也可以查看
》》》》》》弊端是这个,优点就是隐蔽
全连接端口扫描———>虽然判断准确,但是不隐蔽。全分全的三次握手
Scapy:
1、syn扫描不需要raw packets
2、内核认为syn/ack是非法包,直接发rst中断连接
3、全连接扫描对scapy比较困难
例:
sr1(IP(dst="1.1.1.1")/TCP(dport=22,flags='S'))
./tcp_scan1.py
==============
#!/usr/bin/python
import logging
logging.getlogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import*
response=sr1(IP(dst="1.1.1.1")/TCP(dport=80,flags='S'))
reply=sr1(IP(dst="1.1.1.1")/TCP(dport=80,flags='A',ack=(response[TCP].seq+1)))
==============./tcp_scan2.py
===============
#!/usr/bin/python
import logging
logging.getlogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import*
SYN=IP(dst="1.1.1.1")/TCP(dport=444,flags='S')
print "-- SENT --"
SYN.display()
print "\n\n-- RECEIVED --"
response=sr1(SYN.timeout=1,verbose=0)
response.display()
if int(response(TCP).flags)==18;
print "\n\n-- SENT --"
A=IP(dst="1.1.1.1")/TCP(dport=444,flags='A',ack=(response[TCP].seq+1))
A.display()
print "\n\n-- RECEIVED --"
response2=sr1(A.timeout=1,verbose=0)
response2.display()
else
print "SYN.ACK not returned"
===============
iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 1.1.1.1 -j DROP //建立三次握手
iptables -L //查看规则
全连接扫描——————nmap
nmap -sT 1.1.1.1 -p 80
nmap -sT 1.1.1.1 -p 80,21,25
nmap -sT 1.1.1.1 -p 80-2000
nmap -sT -iLiplist.txt -p 80
默认1000个常用端口
全连接端口扫描————dmitry
dmitry -p 1.1.1.1
dmitry -p 1.1.1.1 -o output
#功能简单,但使用简便
#默认150个最常用的端口
全连接端口扫描
nc -nv -w 1 -z 1.1.1.1 1-100 //-nv详细内容+跟IP地址不做域名解析,-w超时时间
//不是说端口显示什么服务就是什么服务,这些服务我们可以自己去该
for x in $(seq 20 30);do nc -nv -w 1 -z 1.1.1.1 $x;done | grep open
for x in $(seq 1 254);do nc -nv -w 1 -z 1.1.1.$x 80;done