安全牛-主动收集

通过前期的被动信息收集,可以收集到一个目标的服务器,域名,ip,设备    
但是收集到的信息,是通过搜索引擎搜索,有一些并不是最新的信息,可能为过时的,不准确,不真实,不是
当下的信息    

需要通过主动信息收集对被动信息收集的信息进行验证以及确认,发现更多的信息,通过主动的信息收集发现
更完善,更精确的信息

发现技术发现的是在线的,可以通信的ip


主动信息收集
直接与目标系统交互通信
无法避免留下访问的痕迹
使用受控的第三方电脑进行探测
 尽量不用自己的ip,使用代理或者已受控制的主机,做好被封杀的准备
 万不得以使用自己的ip,1.隐藏自己的流量,少发现对目标的请求,通过访问量发现不了自己
                                       2.使用噪声迷惑目标,淹没真实的探测浏览,迷惑日志,抓包分析系统
扫描
 发送不同的探测,根据返回结果判断目标状态

发现(确定ip,确定ip上端口,确定端口运行服务,确定服务存在的漏洞,确定目标系统的攻击面)
只所以称之为发现,是因为扫描的目的是发现在网络中存活着的ip地址。
识别活着的主机
 潜在的被攻击目标
输出一个ip地址列表(当前系统所使用的在线的ip地址)
2,3,4层发现     


发现---二层发现(数据链路层,基于广播,不可跨路由)
1.
优点:扫描速度快,可靠
缺点:不可路由,只可以发现本网段的。
arp协议
  抓包

2.arping
arping
arping 1.1.1.1 -c 1
arping 1.1.1.1 -d
arping -c 1 1.1.1.1 | grep "bytes from" | cut -d" " -f 5 | cut -d "(" -f 2 | cut -d")" -f 1
脚本
 arping1.sh eth0 > addrs
 arping2.sh addrs


案例:
arping             (探测一个ip,是否存活,存在给一个反馈,不存在无反馈)
arping 1.1.1.1     (一直ping网关)
arping 1.1.1.1 -c 1(给返回一个包)
利用wireshark抓包,只进行arp抓取,可以从中分析出来它的mac地址(address->mac),无返回则没有mac地

arping 1.1.1.1 -d  (-d 发现不同的mac地址,拥有一个ip,当在这个ip为网关的ip时候)

192.168.1.1 网关
11.11.11.11 mac    
22.22.22.22 mac
在一个网络里出现另一个声称网关的mac地址,如果它对网络arp欺骗,发给网关的数据包就会欺骗主机的主机,主机所有者就可以对数据进行抓包,实现中间人攻击,嗅探甚至修改通过主机传输的数据包,窃取密码,篡改数据,实现arp欺骗可以通过arping 192.168.1.1 -d可以对网关进行检查,发现有2个不同的mac地址,声称是网关的mac地址,那么就可以知道有人在arp欺骗,窃取流量


利用管道(只显示存活在网段的ip)
arping -c 1 1.1.1.1 | grep "bytes from" | cut -d" " -f 5 | cut -d "(" -f 2 | cut -d")" -f 1
arping只能ping一个ip,不支持一个网段的,对网络中的大量主机进行扫描,就可通过脚本发现存活ip


脚本1:检查网段中存活主机
脚步2:复查


3.nmap
nmap 1.1.1.1-254 –sn  (扫描一个ip)
nmap -iL iplist.txt -sn(扫描多个ip)

nmap -sn 目标ip (只做二层发现,严格讲还做了反向dns解析)
结果有:ip,up,延迟,mac地址,mac地址所属厂家等信息

4.netdiscover
Netdiscover
 专用于二层发现
 可用于无线和交换网络环境
 主动和被动探测
主动(发送)
 netdiscover -i eth0 -r 1.1.1.0/24
 netdiscover -l iplist.txt
被动(侦听)
 netdiscover -p
 主动arp容易触发报警

案例:
netdiscover -i eth0 -r 1.1.1.0/24
-i指定网卡
-r指定网段

netdiscover -p
arping ip
查看是否触发


5.scapy
scapy
 作为python库进行调用
 也可以作为单独的工具使用
 抓包,分析,创建,修改,注入网络流量
apt-get install python-gnuplot
Scapy
  ARP().display()
  Sr1()
Python脚本
  Arp1.py
  Arp2.py

案例
scapy
ARP().display()
arp=ARP()
arp.display()
arp.pdst='192.168.1.1'
arp.display()    
sr1(arp)
answer=sr1(arp)
sr1.display()

Arp1.py---
chmod u+x Arp1.py
./Arp1.py


总结
nmap最快,arping脚本中等,Arp1次之
什么时候用的上二层发现,取得目标机器的控制权,以控制的机器对内网进一步渗透,可以使用二层的工具去
发现目标的内网还存在哪些机器,进一步渗透。



发现-三层发现(网络层,ip/icmp)
1.优缺点
优点
 可路由
 速度比较快
缺点
 速度比二层慢
 经常被边界防火墙过滤(造成扫描结果不准确,目标主机存活但是ping不到,目标down扫描结果显示在线)
ip,icmp协议
2.ping
Ping 1.1.1.1 –c 2
Ping -R 1.1.1.1 / traceroute 1.1.1.1
ping 1.1.1.1 -c 1 | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1
脚本
Pinger.sh 1.1.1.0


案例
ping使用的是icmp协议
ping ip
ping ip -c 5

路由追逐
traceroute www.sina.com(基于ttl)
ping -R www.sina.com(可以显示内网网口的地址)

存活ip
ping 1.1.1.1 -c 1 | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1


脚本
Pinger1.sh



3.
Scapy
   OSI多层堆叠手工声称ICMP包——IP/ICMP
   ip=IP()
   ip.dst=“1.1.1.1”
   ping=ICMP()
   a=sr1(ip/ping)
   a.display()
   ping不存在的ip
   a=sr1(ip/ping,timeout=1)
   a = sr1(IP(dst=“1.1.1.1")/ICMP(),timeout=1)
Pinger1.py 1.1.1.0 > addr
Pinger2.py addr

案例
i=IP()
p=ICMP()
ping=(i/p)
ping.display()
ping[IP].dst="192.168.1.1" 目标ip
ping.display()
a=sr1(ping)
a.display()

sr1(IP(dst=“192.168.1.1")/ICMP(),timeout=1)

脚本:
pinger.py

4.nmap
nmap -sn ip(与二层所经过的协议不同)
nmap -iL iplist.txt -sn



5.fping
支持对地址段ping    
fping 1.1.1.1 -c 1
   fping -g 1.1.1.1 1.1.1.2 一个网段
   fping -g 1.1.1.0/24
   fping -f iplist.txt

案例    
fping -g 192.168.1.1 192.168.1.100 网段
fping -g 192.168.1.0/24


6.hping
Hping
  能够发送几乎任意TCP/IP包
  功能强大但每次只能扫描一个目标
hping3 1.1.1.1 --icmp -c 2
for addr in $(seq 1 254); do hping3 1.1.1.$addr --icmp -c 1 >> handle.txt & done


案例
hping3 192.168.1.1 --icmp -c 2

实现循环
for addr in $(seq 1 254); do hping3 1.1.1.$addr --icmp -c 1 >> handle.txt & done


四层发现(传输层,tcp/udp)
1.优缺点
优点:
   可路由、结果精确可靠、
   不易被防火墙过滤
   甚至可发现所有端口都被过滤的主机
缺点:
   基于状态过滤的防火墙可能过滤扫描
   全端口扫描速度慢
TCP
   未经请求的ACK----RST ip在线
SYN------SYN/ACK,RST ip在线/端口开放,ip在线/端口关闭
   协议面向连接的、可靠的、基于字节流的传输层通信协议原理:向目标机发送未经请求的ACK包,若目标机返回RST,则可判断目标机在线。
   发送SYN包,可以探测主机是否存活,如果发送SYN包,目标返回ACK+RST包,则可判断主机在线及端口开放,如果发送SYN包,目标只返回ACK包,则可判断目标机在线。
UDP
   ICMP端口不可达,一去不复返 协议无连接的传输层协议
原理:当目标机在线且某未开放UDP端口收到UDP数据包时,会像源地址返回icmp端口
不可达数据包。基于此,可向目标主机不常用的UDP端口发送数据包,若返回icmp包,则证明主机在线

2.
ACK——TCP Port——RST
Scapy
 i = IP()
 i.dst="1.1.1.1"
 t = TCP()
 t.flags='A'
 r = (i/t)
 a = sr1(r)
 a.display()
a = sr1(IP(dst="1.1.1.1")/TCP(dport=80,flags='A') ,timeout=1))
ACK_Ping.py

案例
scapy
(1)端口不开放的情况下,发送ack,接受到后返回rst
i=IP() 定义三层包头
t=TCP() 定义四包头层
r=(i/t) 定义响应
r.display() 显示目前内容
r[ip].dst="192.168.1.xxx"  设置存在的目标ip包头dst
r[TCP].flags='A' 设置
r.display() 显示完整的内容
a=sr1(r) 发送包
a.display() 查看收到的包
(2)端口开放,发送ack,接受到后返回rst
r[TCP].dport=445 设置端口
r.display() 显示目前内容
a1=sr1(r)
a1.display()
总结:只要目标ip存在,端口开放与关闭,发送ack,接收到的返回为rst
(3)目标ip不存在的情况下,无返回rst包
r[ip].dst="192.168.1.xxx" 设置不存在的ip
r.display() 显示目前内容
a2=sr1(r,timeout=1)
(4)特例 路由器的原因,不给响应
r[ip].dst="192.168.1.1"设置存在的ip
r[TCP].dport=23214 设置不可能的端口
a3=sr1(r)
但是通过wirshark可以抓包
遇到特例可以使用ping
(5)一行解决
a = sr1(IP(dst="1.1.1.1")/TCP(dport=80,flags='A') ,timeout=1))
a.display()
(6)
脚本
ACK_Ping.py    
27---47.19时间


3.
UDP——UDP Port——ICMP
u = UDP()
u.dport= 33333
r = (i/u)
a = sr1(r,timeout=1,verbose=1)
A.display()
 ICMP
UDP_Ping.py
 UDP 发现不可靠


案例
(1)ip存在,端口不存在,响应为端口不可达
i=IP()
u=UDP()
r=(i/u)
r.display()
r[IP].dst="192.168.1.xx"
r[UDP].dport=7345
a=sr1(r)
a.display()
(2)ip不存在, 没有响应
r[IP].dst="192.168.1.xx"
a=sr1(r,timeout=1)
a=sr1
(3)特例,路由器做了安全设置, 没有响应
r[IP].dst="192.168.1.1"    
r[UDP].dport=7345
r.display()
a=sr1(r,timeout=1)
(4)一句话
a=sr1(IP(dst="192.168.1.1xx")/UDP(dport=1345),timeout=1)
(5)UDP语句脚本


4.nmap
nmap 1.1.1.1-254 -PU53 -sn
nmap 1.1.1.1-254 -PA80 –sn
nmap -iL iplist.txt -PA80 -sn


案例
nmap 192.168.1.1-50 -PU53 -sn
-PU 只扫UDP的端口
-sn 只做主机发现

nmap 1.1.1.1-254 -PA80 -sn
-PA 基于TCP的ack扫描
-sn 只做主机发现,收到rck包目标在线,否则离线

nmap
PS/PA/PU/PY (SYN/ACK/UDP/SCTP)
PE/PP/PM (icmp echo/timestamp/netmask)
PO(ip协议的ping)


5.hping
hping3 --udp 1.1.1.1 -c 1
for addr in $(seq 1 254); do hping3 –udp 1.1.1.$addr -c 1 >> r.txt; done
 grep Unreachable r.txt | cut -d " " -f 5 | cut -d "=" -f 2
 ./udp_hping.sh 1.1.1.0
hping3 1.1.1.1 -c 1 (TCP)
  Hping3 1.1.1.1
  ./TCP_hping.sh
  Flag 0 —— ACK?RST

案例
hping3 --udp 192.168.1.x -c 1 (外网ip行不通)
结果icmp端口不可达,但主机存活

利用循环语句
for addr in $(seq 1 254); do hping3 –udp 1.1.1.$addr -c 1 >> r.txt; done

利用脚本
./TCP_hping.sh
28---21.26




端口扫描
每个服务器上会有很多应用,每个应用都会侦听某些端口,通过侦听的端口来接收,来自客户端和其他用户来
对应用程序进行访问
所以端口的后面都对应的各种各样的应用程序,所以发现了主机ip存活之后,下一步确认的是这些存活ip上都
存在哪些开放的端口。
端口扫描目的:发现开放的tcp,udp的端口
端口扫描出来所提示的 对应服务这里不能确定,应该应用可以开在不是默认的端口中


1.扫描
端口对应网络服务及应用端程序
服务端程序的漏洞通过端口攻入
发现开的的端口
更具体的攻击面

2.UDP端口扫描
假设 ICMP port-unreachable 响应代表端口关闭,没有响应代表端口开放
  目标系统不响应ICMP port-unreachable时,可能产生误判
完整的UPD应用层请求
  准确性高
  耗时巨大

3.利用scapy扫描UDP端口
Scapy UDP Scan
端口关闭:ICMP port-unreachable
端口开放:没有回包
了解 每一种基于UDP的应用层包结构很有帮助
与三层相同的技术
  误判
Scapy
sr1(IP(dst="1.1.1.1")/UDP(dport=53),timeout=1,verbose=1)
./udp_scan.py 1.1.1.1 1 100

案例
脚本
./udp_scan.py
chmod u+x udp_scan.py
./udp_scan.py  192.168.1.1 1 100 该ip,1-100端口
查看开放端口
netstat -pantu | grep udp | more
28-35.13

4.nmap扫描udp端口
端口关闭:ICMP port-unreachable
Nmap
nmap -sU 1.1.1.1
 默认的1000个参数,不指定的情况下
 ICMP host-unreachable
nmap 1.1.1.1 -sU -p 53
nmap -iL iplist.txt -sU -p 1-200


案例
nmap -sU ip 默认扫描1000个端口
nmap ip -sU -p 53 指定扫描某个端口
nmap -sU ip 1-65535或者nmap -sU ip -p-  都代表60000多个端口



5.TCP端口扫描
 基于连接的协议--
 三次握手--syn,syn/ack,ack
 隐蔽扫描--一开始不发送syn包,发送其他包,,-发送大量的网络流量,容易触动入侵检测系统,可能被发现,所以使用tcp扫描可以采用不建立完整的连接,因为不建立完整的连接,同时不产生应用层的访问,不会在应用层的日志里体现出来,只会在网络上有些痕迹,不太容易被发现
 僵尸扫描-使用条件比较苛刻,比较隐蔽
 全连接扫描---完整的三次握手,容易发现
 所有的TCP扫描方式都是基于三次握手的变化来判断目标端口状态



6..TCP端口扫描--隐蔽扫描/僵尸扫描
隐蔽扫描-----syn(只发送syn包,返回ack端口开放,返回rst端口关闭)
  不建立完整连接(原因)
  应用日志不记录扫描行为--隐蔽(结果)
  触动网络层报警,网络层会有记录
僵尸扫描
  及度隐蔽
  实施条件苛刻(扫描发起方与被扫描的服务器,之间必须可以实现地址伪造,但由于一些过滤策略,实现起来很难 )
  可伪造源地址(条件一:发起者可以进行伪造)
  选择僵尸机(条件二:)
    闲置系统(必须闲置,不产生多余的ip通信数据包)
    系统使用递增的IPID(必须递增)
           0
      随机


端口开放的情况


端口关闭的情况




隐蔽端口扫描-syn扫描
1.Scapy
Syn——syn/ack(端口开放)——rst(端口关闭)
Scapy
a=sr1(IP(dst="192.168.60.3")/TCP(dport=80),timeout=1,verbose=1)
./syn_scan.py


案例
a=sr1(IP(dst="192.168.60.3")/TCP(flags=“S ”),timeout=1,verbose=1) 默认端口为80
a.display()
a=sr1(IP(dst="192.168.60.3")/TCP(flags=“S”,dport=22),timeout=1,verbose=1)  端口22


脚本
./syn_scan.py
29----16.20
chmod u+x syn_scan.py
./syn_scan.py 192.168.1.133 1 100


2.nmap
nmap -sS 1.1.1.1 -p 80,21,25,110,443
nmap -sS 1.1.1.1 -p 1-65535 --open
nmap -sS 1.1.1.1 -p- --open
nmap -sS -iL iplist.txt -p 80,21,22,23


案例
nmap ip -p1-100 (不加参数,默认syn扫描)
nmap ip -p1-100 --open (只显示端口open的)

nmap -sS ip -p1-100 --open (syn扫描)


3.hping3
hping3 1.1.1.1 --scan 80 -S
hping3 1.1.1.1 --scan 80,21,25,443 -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

案例
hping3 ip --scan 1-100 -S (-S表示syn扫描)
hping3 -c 10 -S --spoof 1.1.1.2 -p ++1 1.1.1.3 (地址欺骗扫描,必须去伪造的地址上查看扫描结果)
-c 发送10个包
-S syn
--spoof 伪造的ip
-p 伪造端口
1.1.1.3 表示扫描目标



全连接端口扫描
1.Scapy
   Syn扫描不需要raw packets
  内核认为syn/ack是非法包,直接发rst中断连接
  全连接扫描对scapy比较困难
sr1(IP(dst="192.168.20.2")/TCP(dport=22,flags='S'))
./tcp_scan1.py
./tcp_scan2.py
iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.20.2 -j DROP


案例
脚本
./tcp_scan1.py     
29---48.46

./tcp_scan2.py  (iptables解决)
29---56.44

解决系统内核返回rst包问题
iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.20.2 -j DROP
iptables -L

2.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 -iL iplist.txt -p 80
默认1000个常用端口

案例:
nmap -sT ip -p1-100


3.dmitry
 功能简单,但使用简便
 默认150个常用的端口
dmitry -p 172.16.36.135
dmitry -p 172.16.36.135 -o output

案例:
dmitry -p ip
-p 执行tcp端口扫描




4.nc
nc -nv -w 1 -z 192.168.60.4 1-100
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; donenc -nv -w 1 -z 192.168.60.4 1-100
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


案例
nc -nv -w 1 -z 192.168.60.4 1-100
-n 跟一个数字,不做域名解析
-v 详细内容
-w 连接超时时间
-z 扫描



僵尸扫描
1.Scapy —— zombie.py
i=IP()
t=TCP()
rz=(i/t) 僵尸机数据包
rt=(i/t) 目标机数据包
rz[IP].dst=IPz
rz[TCP].dport=445
rt[IP].src=IPz
rt[IP].dst=IPt
rt[TCP].dport=22
az1=sr1(rz) / at=sr1(rt) / az2=sr1(rz)
az1.display() / az2.display()

xp,2003,2000(ipid递增的)

案例
扫描机 linux
僵尸机 xp
目标机 metasplot

(1)开放端口
i=IP()
t=TCP()
rz=(i/t) 僵尸机数据包
rt=(i/t) 目标机数据包
rz[IP].dst=IPz 僵尸机包头内容-ip地址
rz[TCP].dport=445 僵尸机包头内容-目标端口
rz[TCP].flags=“SA”

rt[IP].src=IPz 源地址为僵尸机地址
rt[IP].dst=IPt  目的地址目标机器ip
rt[TCP].dport=25 目标端口
rt[TCP].flags=“S”


az1=sr1(rz) / at=sr1(rt,timeout=1) / az2=sr1(rz)
az1.display() / az2.display()

查看id是否增加2

(2).端口关闭
rt[TCP].dport=33445
az1=sr1(rz) / at=sr1(rt,timeout=1) / az2=sr1(rz)
az1.display() / az2.display()

查看id是否增加1


(3).脚本
zombie.py
30---22.25



2.nmap
发现僵尸机,利用nmap中的脚本
nmap -p445 192.168.1.133 --script=ipidseq.nse
扫描僵尸机,
nmap 172.16.36.135 -sI 172.16.36.134 -Pn -p 0-100


案例
nmap -p445 192.168.1.133 --script=ipidseq.nse 扫描是递增的,查看ipidseq的值:Incremental
nmap -p445 192.168.1.134 --script=ipidseq.nse 扫描不是递增,查看ipidseq的值:all zeros

nmap 172.16.36.135 -sI 172.16.36.134 -Pn -p 0-100
-sl 指定僵尸ip
第一个ip代表目标ip,第二个ip代表僵尸ip


服务扫描  
通过之前的信息,可以识别出在线的ip地址,以及ip地址开放的端口,但是不能通过简单的端口号确认工作在端口后面的应用程序服务(比如,22-ssh)

找到了ip,找到了端口,接下来就需要识别端口后面跑着的应用程序软件,软件是什么版本,基于版本去相应的网站查找,找打版本,去寻找版本漏洞。

还有一个需要做的是识别目标操作系统,win?linux?
win是2003?xp?2008?2012?
是否缺少补丁,是否存在漏洞和弱点
利用漏洞和弱点取得系统的管理权限/普通权限,在普通权限之上进行提权,拿到管理员权限,进行后续渗透测试攻击

1.
识别开放端口上运行的应用
识别目标操作系统
提高攻击效率
   banner捕获(不准确)
  服务识别()
  操作系统识别
   SNMP分析
  防火墙识别

2.
Banner
  软件开发商(apache)
  软件名称
  服务类型
  版本号
   直接发现已知的漏洞和弱点
连接完整的建立后直接获取banner
另类服务识别方法
  特征行为和响应字段
  不同的响应可用于识别底层操作系统


3.SNMP
 简单网络管理协议
  Community string
 信息查询或重新配置
识别和绕过防火墙筛选


4.nc
nc -nv ip 22
连接端口返回banner信息
nc -nv ip 80
get /
获取banner信息

5.
Python socket
Socket模块用于连接网络服务
import socket
bangrab = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 红色代表建立tcp连接
bangrab.connect((“1.1.1.1", 21))
bangrab.recv(4096)  接收数据,数据大小4096
     '220 (vsFTPd 2.3.4)\r\n' 返回结果数据
bangrab.close()  一定要关闭
exit()
有一些应用Bannerӧ不允许抓取,recv函数无返回讲挂起
. /ban_grab.py
31----26.11

ban_grab.py ip 1 100


6.dmitry
dmitry -p 172.16.36.135
dmitry -pb 172.16.36.135


案例
dmitry -pb ip
-p tcp扫描
-b 基于banner扫描端口


7.nmap
nmap -sT 1.1.1.1 -p 22 --script=banner.nse
-sT  完整的tcp连接
nmap -sT 1.1.1.1 -p1-100  --script=banner.nse


nmap 脚本位置
cd /usr/share/nmap/scripts
ls | grep ms-sql 查看某个



8.amap
发现开放端口后面跑着的服务
amap -B 172.16.36.135 21
amap -B 172.16.36.135 1-65535
amap -B 172.16.36.135 1-65535 | grep on
案例
amap -B 172.16.36.135 21
-B banner方式
amap -B 172.16.36.135 1-65535 | grep on
扫65535个端口


9.
Banner信息抓取能力有限
nmap响应特征分析识别服务
  发送系列复杂的探测
  依据响应特征signature
nc -nv 1.1.1.1 80
nmap 1.1.1.1 -p 80 -sV
案例
nmap ip -p1-100 -sV (识别)
-sV 识别端口后的服务,通过指纹匹配信息识别

10.Amap
amap 192.168.1.134 80
amap 172.16.36.135 20-30
amap 172.16.36.135 20-30 –q
amap 172.16.36.135 20-30 -qb
案例
amap 192.168.1.134 1-100 (基于特征的扫描进行匹配)
amap 192.168.1.134 1-100 -q (由于输出结果比较乱,所以添加“-q”,但是不准确)
amap 172.16.36.135 20-30 -qb (-b比之前精准)


操作系统识别
操作系统默认情况下会安装一些服务,无论win/linux/unix都会默认开放一些服务和端口,通过扫描操作系统的版本可以识别默认就开放的服务和端口,上面一些旧的版本存在的一些漏洞,发现这些漏洞。
可以通过操作系统本身自带的漏洞,有机会利用漏洞进入目标系统

1.
操作系统识别技术
 种类繁多
 好产品采用多种技术组合
TTL起始值
Windows :128(65——128)
Linux / Unix : 64 (1-64)
某些 Unix : 255
有时候也可能被修改ttl值·

2.python脚本实现
python
from scapy.all import *
win=“1.1.1.1”
linu=“1.1.1.2”
aw=sr1(IP(dst=win)/ICMP())
al=sr1(IP(dst=linu)/ICMP())
if al[IP].ttl<=64:
print “host is Linux”
else:
print “host is windows”
./ttl_os.py

案例
32---16.00
chmod u+x ttl_os.py ip


3.nmap
nmap 使用多种技术识别操作系统
nmap 1.1.1.1 -O
系统服务特征

案例
nmap -O 1.1.1.1  (根据cpe判断是什么系统)
-O 识别操作系统

4.xprobe2
xprobe2 1.1.1.1
专门用来探测目标系统的版本,但是结果有误差

5.被动扫描
工作原理:网络抓包,网络监听
被动操作系统识别
  idc
 抓包分析
被动扫描
p0f
 结合arp地址欺骗识别全网os

案例
p0f(进行监听从本机器发出去的数据包,监听到有数据包,就根据数据包特征判断操作系统类型)


snmp扫描
简单网络管理协议的协议类型,通信方式走161,162端口
服务端使用udp161端口,被管理
客户端使用udp162端口

dhcp基于udp之上的应用层协议,通信方式走67,68端口
服务器-67
客户端-68

服务端奇数,客户端偶数

当网络稍微优点规模时,人工进行监控效率太低,这时需要引入基于snmp的监控机制,    通过snmp可以监控网络交换机,服务器,防火墙,cpu运行情况,内存运行情况,并发连接数,带宽使用情况等等一些系统内部信息。

1.
snmp
 信息的金矿(攻击者可以发现)
 经常被错误配置(网络管理员出错)
  public / private / manager(可读/可写)
MIB Tree
  SNMP Management Information Base (MIB)
 树形的网络设备管理功能数据库
  1.3.6.1.4.1.77.1.2.25
onesixtyone 1.1.1.1 public
onesixtyone -c dict.txt -i hosts -o my.log -w 100


xp安装snmp
appwiz.cpl-->添加删除程序-->添加组件-->管理和监视工具-->勾选“VMI SNMP”与“简单网络管理协议”
需要光驱的安装光盘(虚拟机下)
查看服务
services.msc-->多出两项snmp
snmp.services--->代理信息-->陷井(作为客户端推送给监控服务器,不需要监控服务器每次来访问)
-->安全
 

案例
nmap -sU -p161 ip 查看snmp端口是否开启
netstat -pantu |grep 161 查看是否与扫描结果相同
onesixtyone ip public
onesixtyone -c dict.txt -i hosts -o my.log -w 100
-c指定一个字典
-i 指定主机ip列表


2.
snmpwalk 192.168.20.199 -c public -v 2c
用户    
  snmpwalk -c public -v 2c 1.1.1.1 1.3.6.1.4.1.77.1.2.25
snmpcheck -t 192.168.20.199
snmpcheck -t 192.168.20.199 -c private -v 2
snmpcheck -t 192.168.20.199 -w


案例
snmpwalk 192.168.20.199 -c public -v 2c
-v 指定版本 版本有3个,v1,v2c,v3,v3加密机制
snmpwalk -c public -v 2c ip 1.3.6.1.4.1.77.1.2.25 查询oid

snmpcheck -t 192.168.20.199
-t 指定ip
snmpcheck -t 192.168.20.199 -c private -v 2
-c 指定不同的命令
-v 版本
-w 检测可写



SMB扫描
1.server message block协议
 微软历史上出现安全问题最多的协议
 实现复杂
 默认开放
 文件共享
 空会话未身份认证访问(smb1)
  密码策略
  用户名
  组名
  机器名
  用户、组sid    
经典漏洞ms08-067与smb协议有关



2.
smb常用端口139,445(新版本使用445,老版本使用139)



nmap -v -p139,445 192.168.60.1-20
nmap 192.168.60.4 -p139,445 --script=smb-os-discovery.nse
nmap -v -p139,445 --script=smb-check-vulns --script-args=unsafe=1 1.1.1.1
nbtscan -r 192.168.60.0/24
enum4linux -a 192.168.60.10

案例
nmap -v -p139,445 192.168.1.0/24 --open(nat模式会导致扫描结果显示255个主机up)
-v 显示详细信息
139.445虽然是win系统默认开放的端口,但是在linux系统安装了相关服务,linux也会开放139,445端口,只依据开放端口去判断是win系统,这样判断太粗糙,基于这个情况,nmap给出了以下命令操作
nmap 192.168.1.22 -p139,445 --script=smb-os-discovery.nse

nmap -v -p139,445 --script=smb-check-vulns --script-args=unsafe=1 ip -Pn (不安全的扫描,可能挂掉服务器)
--script-args 给脚本赋予参数
unsafe 生产情况下使用safe
-Pn  过滤防火墙

查看脚本
cd  /usr/share/nmap/script
more smb-check-vulns

枚举win系统,不支持一个网段
enum4linux -a 192.168.60.10

nbtscan -r 192.168.1.0/24  (优点可跨网段扫描1.0  2.0)

SMTP扫描(发现邮箱账号)
直接对邮件服务器发起扫描,枚举出邮件服务器上存在的邮箱账号,发现邮箱账户的主要用途,社会工程学,发送水坑邮件/钓鱼邮件
端口为25

1.
nc -nv 1.1.1.1 25
   VRFY root
nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enum-users.methods={VRFY}
nmap smtp.163.com -p25 --script=smtp-open-relay.nse
smtp-user-enum -M VRFY -U users.txt -t 10.0.0.1
./smtp.py


案例
前提发现开启了25端口,接下来开始枚举
nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enum-users.methods={VRFY}
smtp-user-enum -M VRFY -U users.txt -t 10.0.0.1
-M
-U 指定用户账号


开放中继,任何人都可以使用邮件服务器
攻击者利用邮件服务器进行攻击他人,可以发钓鱼邮件,垃圾广告,触犯法律。

脚本
./smtp.py



防火墙识别

公司网络边界一般有放火墙进行保护,防火墙上有很多检测机制,扫描放火墙的时候,尽量隐蔽的情况下,扫描出防火墙的过滤规则。
目的:通过发送的扫描的数据包,不引起防火墙的告警,同时能够根据回包识别防火墙上过滤了哪些端口,这些端口不是在防火墙上开放的端口,临时开放的端口(只是向外发起临时请求,不是外部向内部发起访问的 )。
对源地址/源目的地址进行过滤,只允许来自某个ip地址的访问,其他地址的访问就会默认过滤。但是端口是开放在防火墙上的,只是说被防火墙进行了过滤

1.
通过检查回包,可能识别端口是否经过防火墙过滤
设备多种多样,结果存在一定误差



2.scapy
python
./fw_detect.py 1.1.1.1 443
34--7.44

3.nmap
nmap有系列防火墙过滤检测功能
nmap -sA ip -p22

案例
nmap  -p22 ip (默认情况使用syn)
nmap  -p22 ip -sA  (-sA ack扫描)



负载均衡识别
广域网负载均衡
  DNS(dns轮询,同一域名可以被解析到多个A记录,多个ip地址)
     (基于智能dns,访问同一个域名在不同地方解析到ip不同)
HTTP-Loadbalancing(服务器负载均衡--应用层负载均衡)
  Nginx
  Apache
lbd www.baidu.com
lbd mail.163.com
案例:
lbd www.baidu.com
lbd mail.163.com


waf识别
是否用了waf,用的什么类型的waf,怎么绕过waf

WEB应用防火墙
wafw00f -l
wafw00f http://www.microsoft.com
nmap www.microsoft.com --script=http-waf-detect.nse

案例
wafw00f -l 查看检测waf类型
nmap www.microsoft.com --script=http-waf-detect.nse nmap脚本检测

nmap
所有参数
zenmap

案例
1.目标发现
-iL 扫描列表文件
-iR 随机扫描目标,不指定ip  举例:nmap -iR 100 -p22 --open (wireshark:tcp.port==22)
--exclude 除去某个ip  举例:nmap 192.168.1.0/24 --exclude 192.168.1.1-100 (扫描将会从101开始扫描)
--excludefile 除去某个文件中的地址 举例:nmap 192.168.1.0/24 --excludefile ip.txt
2.主机发现
-sL 不进行扫描,只将目标地址段列出来,相当于子网掩码计算  举例:nmap -sL 192.168.1.0/28
-sn 不做端口扫描
-Pn 有防火墙的情况下,进行探测会拒绝进行发现,返回rst,因为没有返回数据包,所以nmap认为ip不存活,后续的端口扫描就停止了。所以会错过一个活着的主机,这是-Pn就起到了作用:可以彻底进行扫描,扫描完成之后才去判断ip是不是存在网络
-Ps/-PA/-PU/-PY/   syn发现/ack发现/udp发现/sctp发现
-PE/-PP/-PM/  ICMPecho/时间戳/查询子网掩码(通常查询不到)
-PO ip扫描
-n/-R 不做dns解析/反向地址解析
--dns-servers 做dns解析的时候,调用一个指定的dns服务器,不是操作系统配置的dns服务器 举例:nmap --dns-servers 8.8.8.8 www.sina.com
--system-dns 操作系统默认的dns
--traceroute 路由追踪 举例:nmap www.baidu.com --traceroute -p80
3.端口发现
-sS/sT/sA/sW0/sM/  syn扫描/tcp扫描/ack扫描/tcp窗口扫描/maimon扫描(ack+fin)  举例:nmap -sM ip -p1-100
-sU/ udp扫描 举例:nmap -sU -p53 ip
-sN/sF/sX/    tcp null/fin/urgent+set+fin
--scanflags 自定义
sI 僵尸扫描
sY/sZ  sctp
sO ip扫描
-b  ftp中继扫描
4.如何指定扫什么端口
-p 指定端口 举例 :扫描tcp端口 nmap -p U:53 ip       扫描udp端口  nmap -p T:21 ip
--exclude-ports 去除某些端口
-F 快速模式,默认扫描1000个端口,加“-F”扫描比较少的端口
-r 连续扫描端口 1,2,3,...按顺序扫描
--top-ports 扫描前几个  举例:nmap ip --top-ports 10
--port-rate  扫描更加常见的端口
5.探测端口上的服务
-sV 利用特征库进行探测
--version-intensity 扫描的强度,深入程度 举例:nmap -p21 ip -sV --version-intensity 9
--version-light 扫描强度为2
--version-all 扫描强度为9
--version-trace 跟踪扫描过程 举例:nmap -p21 ip -sV --version-intensity 9 --version-trace
6.脚本扫描
-sC 指定脚本
--script 指定脚本
--script-args= 设置脚本参数
--script-args-file= 指定脚本文件
--script-trace 跟踪脚本扫描过程
--script-updatedb 脚本更新 举例:nmap --script-updatedb4
--script-help=脚本名字  查看脚本内容
7.检测操作系统类型
-O 检测操作系统类型
--osscan-limit 限制os检测
--osscan-guess|--fuzzy 当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配
8.时间和性能
-T 设置时间模板,分别与数字0-5对应;
-min-hostgroup/max-hostgroup 调整并行扫描组的大小/最大扫描主机
-min-parallelism/max-parallelism 调整探测报文的并行度,用于控制主机组的探测报文数量
--max-retries 最大重新探测次数
--min-rtt-timeout 调整探测报文超时    
-host-timeout 放弃低速目标主机
--scan-delay/--max-scan-delay 调整探测报文的时间间隔    举例:nmap ip --scan-delay 10s
-min-rate 发包最小速率
-max-rate 发包最大速率
9.防火墙/IDS躲避和欺骗
-f 设置MTU最大传输单元
-D 伪造源地址(需要一些混淆IP)
示例:我设置了三个虚假的IP,用来掩护我的IP来进行扫描  
nmap -D 192.168.1.1,192.168.1.2,192.168.1.3,10.14.4.252
可以抓包发现确实存在伪造源地址

-S 欺骗源地址 举例:nmap -S 伪造ip -e eth0 目标ip (缺陷:收不到回包)
-e 使用指定的网卡
-g/-source-port 源端口欺骗 举例:nmap -g10000 目标ip
--proxies:指定代理(不推荐)如果要代理的话,建议用proxychains方便使用
--data 数据字段 举例: nmap -p22 ip --data=FFFFFFFFFF (数据字段出现10个f)
-data-string assci码字段
-data-length 发送报文时附加随机数据
--ip-options ip包头的选项字段
-ttl  设置IPtime-to-live域
-randomize-hosts 对目标主机的顺序随机排列
-spoof-mac MAC地址哄骗 举例:nmap ip -spoof-mac 00:11:11:11:11:11
-badsum 发送错误的校验和(有时可以欺骗防火墙)
10.输出  
–oN <filespec>:标准输出
–oX <filespec>:XML输出写入指定的文件
–oS <filespec>:脚本小子输出,类似于交互工具输出
–oG <filespec>:Grep输出
–oA <basename>:输出至所有格式
–v:提高输出信息的详细度
–d [level]:提高或设置调试级别,9最高
–packet-trace:跟踪发送和接收的报文
–iflist:输出检测到的接口列表和系统路由
–append-output:表示在输出文件中添加,而不是覆盖原文件
–resume <filename>:继续中断的扫描
–stylesheet <path or URL>:设置XSL样式表,转换XML输出;Web浏览器中打开Nmap的XML输出时,将会在文件系统中寻找nmap.xsl文件,并使用它输出结果
-webxml
–no-stylesheet:忽略XML生命的XSL样式表
11.杂项
-6:开启IPv6扫描
-A:激烈扫描模式选项,这个选项启用额外的高级和高强度选项。目前,这个选项启用了操作系统检测(-O) 和版本扫描(-sV),脚本扫描(-sc),路由扫描等组合
--datadir <directoryname>:说明用户Nmap数据文件位置
Nmap在运行时从文件中获得特殊的数据,这些文件有 nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes和 nmap-os-fingerprints。Nmap首先 在--datadir选项说明的目录中查找这些文件。 未找到的文件,将在BMAPDIR环境变量说明的目录中查找。 接下来是用于真正和有效UID的~/.nmap 或Nmap可执行代码的位置(仅Win32);然后是是编译位置, 如/usr/local/share/nmap 或/usr/share/nmap。 Nmap查找的最后一个位置是当前目录
--send-eth:使用原以太网帧发
--send-ip:在原IP层发送
--privileged:假定用户具有全部权限
--interactive:在交互模式下启动
-V; --version:打印版本信息
-h; --help:打印一个短的帮助屏幕

posted on 2019-03-27 18:06  流着眼泪奔跑  阅读(386)  评论(0编辑  收藏  举报

导航