Kali Linux 从入门到精通(八)-主动信息收集
基本介绍
- 直接与目标系统交互通信
- 无法避免留下访问的痕迹
- 使用受控的第三方电脑进行探测
- 使用代理或已经被控制的主机
- 做好被封杀的准本
- 使用噪声迷惑目标,淹没真实的探测流量
- 扫描
- 发送不同的探测,根据返回结果判断目标状态
发现
- 识别活着的主机
- 潜在的被攻击目标
- 输出一个IP地址列表
- 2,3,4层发现
二层发现(渗透进目标系统后,发现内网其他信息)
- 优点:扫描速度快,可靠
- 缺点:不可路由
- Arp协议:抓包
二层发现–arping命令:
- arping
- arping 1.1.1.1 -c 1
- arping 1.1.1.1 -d (发现重复响应, 两个不同的MAC地址拥有同一个IP,而此时IP为网关地址,此时即为ARP欺骗,实现中间人攻击,窃取密码,篡改数据等恶意参数)
- arping -c 1.1.1.1 | grep “bytes from” | cut -d"" -f 5 | cut -d “(” -f 2 | cut -d")" -f 1
- 脚本
- arping1.sh eth0 > addr
- arping2.sh addrs
二层发现–nmap 在二层发现中的应用
- nmap 1.1.1.1-254 -sn(可进行网段扫描 -sn表示不进行网段扫描)
- nmap -iL iplist.txt -sn(可对文本文件进行扫描)
- nmap很强大 后面单独介绍
二层发现–Netdiscover
- 专用于二层发现
- 可用于无线和交换环境
- 主动和被动探测
- 主动
- netdiscover -i eth0 -r 1.1.1.0/24
- netdiscover -l iplist.txt
- 被动
- netdiscover -p (将网卡置于混杂模式)
- 主动arp容易触发报警(入侵检测系统触发报警)
- 主动
二层发现–Scapy
- 作为Python库进行调用
- 也可作为单独的工具使用
- 抓包,分析,创建.修改,注入流量
- apt-get install python-gnuplot(处理报警信息)
- Scapy
- ARP().display()
- Sr1()
- Python 脚本
发现-三层发现
- 优点
- 可路由
- 速度比较快
- 缺点
- 速度比二层慢
- 经常被边界防火墙过滤
- IP,ICMP协议
三层发现-PING命令
- Ping 1.1.1.1 -c 2
- Ping -R 1.1.1.1 / tracetoute 1.1.1.1
- Ping 1.1.1.1 -c 1 | grep “bytes from” | cut -d" " -f 4 | cut -d “:” -f 1
- 脚本
Ping.sh 1.1.1.0
三层发现-Scapy
- OSI多层堆叠 手工生成ICMP包/ICMP
- ip=IP()
- ip.dst=“1.1.1.1”
- ping=ICMP()
- a=sr1(ip/ping)
- a.display()
- Ping 不存在的地址
- a=sr1(ip/icmp.timeout=1)
- a=sr1(IP(dst=“1.1.1.1”)/ICMP().timeout=1)
- 脚本
三层发现-nmap
- nmap -sn 1.1.1.1-255
- nmap -iL iplist.txt -sn
三层发现-fping
- 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
三层发现-Hping
- 能够发送几乎所有TCP/IP包
- 功能强大但每次只能扫描一个目标:(
- hping3 1.1.1.1 -icmp -c 2
- for addr in ( s e q 1254 ) : d o h p i n g 31.1.1. (seq 1 254):do hping3 1.1.1. (seq1254):dohping31.1.1.addr --icmp -c 1 >> handle.txt & done
发现-四层发现
- 优点:
- 可路由且结果可靠
- 不太可能被防火墙过滤
- 甚至可以发现所有端口都被过滤的主机
- 缺点:
- 基于状态过滤的防火墙可能过滤扫描
- 全端口扫描速度慢
- TCP
- 未经过请求的ACK-RST(可用于判断主机是否存活)
- SYN-SYN/ACK,RST
- UDP
- ICMP端口不可达,一去不复返
四层发现–Scapy(TCP发现)
- ACK-TCP Port–RST
- Scapy
- i=IP()
- i.dst=“www.baidu.com”
- t=TCP()
- t.flags=‘A’
- r=(i/t)
- a=sr1®
- a.display()
- a=sr1(IP(dst=“www.baidu.com”)/TCP(dport=80,flags=‘A’),timeout=1))
- ACK_Ping.py
四层发现–Scapy(UDP发现)
- UDP-UDP Port-ICMP
- i=IP()
- u=UDP()
- u.dport=33333
- r=(i/u)
- a=sr1(r.timeout=1,verbose=1)
- A.display()
- ICMP
- UDP_Ping.py
- UDP发现不可靠
四层发现-nmap
- nmap 1.1.1.1-254 -PU53 -sn
- nmap 1.1.1.1-254 -PA80 -sn
- nmap -iL iplist.txt -PA80 -sn
四层发现
- hping3 -udp 1.1.1.1 -c 1
- for addr in
(
s
e
q
1
,
254
)
;
d
o
h
p
i
n
g
3
−
u
d
p
1.1.1.
(seq 1,254); do hping3 -udp 1.1.1.
(seq1,254);dohping3−udp1.1.1.addr -c 1 >> r.txt; done
- grep Unreachable.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
端口扫描
- 端口对应网服务及应用端程序
- 服务端程序的漏洞通过端口攻入
- 发现开发的端口
- 更具体的攻击面
- 攻击流程:发现活的IP->发现开发端口->通过端口漏洞攻入
端口扫描之UDP端口扫描
- 假设ICMP port-unreachable 响应代表端口关闭
- 目标系统不响应ICMP port-unreachable时,可能产生误判
- 完整的UDP应用层请求
- 准确性高
- 耗时巨大
- 具体操作
- Scapy UDP Scan
- 端口关闭:ICMP port-unreacheable
- 端口开放:没有回包
- 了解每一种基于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
- Scapy UDP Scan
端口扫描(UDP)-nmap
- 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-220
端口扫描(TCP)-nmap
- TCP 端口扫描
-
基于连接的协议
-
三次握手
-
隐蔽扫描–syn
- 不建立完整连接
- 应用日志不记录扫描行为-隐蔽
-
僵尸扫描
-
端口开放状态
-
端口关闭状态
-
极度隐蔽
- 实施条件苛刻
- 可伪造源地址
- 选择僵尸机
- 闲置系统
- 系统使用递增的IPID
- 0
- 随机
-
全连接扫描
-
所有TCP扫描方式都是基于三次握手的变化来判断目标端口状态
-
隐蔽端口扫描
- Syn-syn.ack-rst
- Scapy
- srl(IP(dst=“your ip address”)/TCP(dport=80),timeout=1,verbose=1)
- ./syn_scan.py
- namp
- nmap -sS 1.1.1.1 -p 80.21.25.110 443
- nmap -sS 1.1.1.1 -p --65535 --open
- nmap -sS 1.1.1.1 -p --open
- nmap -sS -iL iplist.txt -p 80
- hping3
- hping3 1.1.1.1 --scan 80 -S
- hping3 1.1.1.1 --scan [ip] -S
- hping3 1.1.1.1 --scan 0-65535 -S
- hping3 -c 10 -S --spoof [伪造IP] -p ++1 1.1.1.1.3
-
全连接端口扫描
- Scapy
- Syn扫描不需要raw packets
- 内核认为syn/ack是非法包,直接发rst中断连接
- 全连接扫描对scapy比较困难
- sr1(IP(dst=“www.baidu.com”)/TCP(dport=22,flags=‘S’))
- ./tcp_scan1.py
- ./tcp_scan2.py
- iptables(Linux防火墙) -A OUTPUT -p tcp --tcp–flags RST RST -d “www.baidu.com” -j DROP
- 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-200
- nmap -sT iplist.txt -p 80
- 默认1000个常用端口
- dmiltry
- 功能简单,但使用简便
- 默认150个最常用的端口
- dmiltry -p 172.16.36.135
- dmiltry -p 172.16.36.135 -o output
- nc
- nc -nv -w 1 -z [your ip address ] 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 ( s e q 1254 ) ; d o n c − n v − w 1 − z 1.1.1. (seq 1 254); do nc -nv -w 1 -z 1.1.1. (seq1254);donc−nv−w1−z1.1.1.x 80; done
僵尸扫描(条件苛刻 需要合格的僵尸机)
- 合格的僵尸机:xp系统,windows 2003 server
- Scapy-zombie.py
- i=IP()
- t=TCP()
- rz=(i/f)
- 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.dsiplay() / az2.display()
- xp:僵尸机,metasploit:目标机,kali:扫描机
- nmap
- 发现僵尸机
- nmap -p445 www.baidu.com --script=ipideseq nse
- 扫描目标
- nmap 172.16.36.135 -sl 172.16.36.134 -Pn -p 0-100
- 发现僵尸机
服务扫描
- 识别开放端口上运行的应用
- 识别目标操作系统
- 提高攻击效率
- Banner捕获
- 服务识别
- 操作系统识别
- SNMP分析
- 防火墙识别
Banner捕获
- 软件开发商
- 软件名称
- 服务类型
- 版本号
- 直接发现已知的漏洞和弱点
- 连接建立后直接获取banner
- 另类服务识别方法
- 特征行为和响应字段
- 不同的响应可用于识别底层操作系统
- 基本操作
- way1: nc -nv [your ip address]
- way2:python socket:socket 模块用于连接网络服务
import socket banner=socket.socket(socket.AF_INET,socket.SOCK_STREAM) banner.connect(("www.baidu.com",21)) banner.recv(4096) # 接收数据大小 banner.close() exit()
- Banner不允许抓取,recv无返回将挂起
- way3:
- dmitry -p www.baidu.com
- dmitry -pb www.baidu.com
- way4:
- nmap -sT [ip address] -p 22 --script=banner nse
- way5:
- amap -B “ip address”
- amap -B “ip address” 1-65535
- amap -B “ip address” 1-65535 | grep on
- amap [ip address]
- amap [ip address] -q
- amap [ip address] -qb
- Banner 信息抓取能力有限
- nmap响应特征分析识别服务
- 发送系列复杂的探测
- 依据响应特征signature
- nc -nv 1.1.1.1 80
- nmap 1.1.1.1 -p 80 -sV
SNMP
- 简单网络管理协议
- Community strings
- 信息查询或重新配置
- 识别和绕过防火墙筛选
操作系统识别
- 操作系统识别技术
- 种类繁多
- 好产品采用多种技术组合
- TTL起始值
- Windows: 128(65-128)
- Linux/Unix:64 (1-64)
- 某些Unix:255
- python脚本
from scapy.all import * win="1.1.1.1" lin="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"
- nmap使用多种技术识别操作系统
- nmap 1.1.1.1 -O
- 系统服务特征
- xprobe2 1.1.1.1
- 结果有误差
- 被动操作系统识别
- IDS
- 抓包分析
- 被动扫描
- p0f
- 结合ARP地址欺骗识别全网OS
SNMP扫描
- snmp(简单网络管理协议)
- 信息的金矿
- 经常被错误配置
- public/private/manager
- MIB Tree (查用常用操作系统和设备信息)
- SNMP Management information Base(MIB)
- 树形的网络设备管理功能数据库
- 1.3.6.1.4.77.1.2.25
- onesixtyone 1.1.1.1 public
- onesixtyone -c dict.txt -i hosts -o my.log -w 100
- snmpwalk 1.1.1.1 -c public -v 2c
- 用户
- snmpwalk -c public -v 2c 1.1.1.1 1.36.1.4.1.77.1.2.25
- snmpcheck -t [input ip address]
- snmpcheck -t [input ip address] -c private -v 2
- snmpcheck -t [input ip address] -w
SMP 扫描
- Server Message Block协议
- 微软历史上出现安全最多的协议
- 实现复杂
- 默认开放
- 文件共享
- 空会话未身份认证访问(SMBI)
- 密码策略
- 用户名
- 组名
- 机器名
- 用户,组SID
- 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-vuln-*.nse --script-orgs=unsafe=1.1.1.1
- namp:脚本位置: /usr/share/nmap/scripts
- nbtscan -r 192.168.60.0/24
- enum4linux -a 192.168.60.10
SMTP 扫描
- 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 1.1.1.1
- ./smtp.py
防火墙识别
- 通过检查回包,可能识别端口是否经过防火墙过滤
- 设备多种多样,结果存在一定误差
- scapy
- python 脚本
- namp
- nmap有系列防火墙检测功能
- nmap -sA 172.16.36.135 -p 22
负载均衡识别
- 广域网负载均衡
- DNS
- HTTP-Loadbalancing
- Nginx
- Apache
- lbd www.baidu.com
- lbd mail.163.com
WAF识别
- WEB应用防火墙
- wafw00f -l
- wafw00f http://www.microsoft.com
- nmap www.microsoft.com --script=http-waf-detect.nse
- 实际可绕过,需要使用机器学习,结合语法,词法几乎可完全避免sql等web攻击
NMPA补充(强大的扫描器)
- 所有参数
- 主机发现
- sn: 不做端口扫描
- Pn: 不管是否回复,扫描所有要扫的ip,再判断
- PS/PA/PU/PY
- PE/PP//PM
- PO
- -n/-R:不做DNS解析/做解析
- –dns-servers
- –traceroute
- 扫描技术
- sS/sT/sWW
- sU (UDP扫描)
- scanflags
- sI:僵尸扫描
- 服务扫描(探测端口服务)
- sV
- version–intensity
- version-all
- 脚本扫描
- –script-updatedb
- –script-help
- 操作系统检测
- osscan-limit 限制操作系统检测
- 时间和性能相关
- 使得扫描经过一段时间进行重新扫描,不被发现
- –scan-delay [time]
- 防火墙/IDS 欺骗,躲避
- D:伪造源地址,增加噪声IP
- S:欺骗源地址
- 主机发现
- zenmap(图形化nmap)