渗透测试——主动信息收集
Contents
主动信息收集部分
主动信息收集
直接与目标主机交互
无法避免留下发文的痕迹;
使用受控的第三方电脑进行探测;
使用代理或者已经被控制的主机
做好被封杀的准备
使用噪音迷惑目标,淹没真实的探测流量
扫描-发送不同的探测,根据返回结果判断目标状态
发现
- 识别活着的主机
- 潜在的被攻击目标
- 输出一个IP地址列表
- 网络2、3、4层发现
包括ARP、IPv4、IPv6、ICMP、IPSec、TCP、UDP
发现——二层发现
优点:扫描速度快,可靠
缺点:不可路由
Arp协议
抓包
arping 1.1.1.1 -c 1
arping 1.1.1.1 -d
发现重复响应,不同mac地址拥有相同的IP时,退出返回1
arp地址欺骗:在你的网络里有另外一个IP地址,声称自己是网关IP,发给网关的数据包就会发给欺骗的主机,该主机的所有者就可以在其机器上抓包,实现中间人攻击,嗅探甚至修改通过该主机传输的数据包,窃取密码,篡改数据,实现一些恶意攻击。
arping -c 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
nmap二层发现
- nmap 1.1.1.1-254 -sn
- nmap 1.1.1.1/24 -sn
-sn ping扫描,禁用端口扫描
- nmap -iL iplist.txt -sn (扫描文件内IP,类似arping2.sh功能)
Netdiscover–二层发现
- 专用于二层发现
- 可用于无线和交换网络环境
- 主动和被动探测
主动
netdiscover -i eth0 -r 192.168.1/24
netdiscover -i iplist.txt
被动
netdiscover -p #将本地网卡赋值为混杂模式,非本网卡的数据包也会被侦听到
主动arp容易触发报警
Scapy-二层发现
•作为Python库进行调用
•也可作为单独的工具使用
•抓包、分析、创建、修改、注入网络流量
• apt-get install python-gnuplot #安装python-gnuplot组件
• Scapy #启动Scapy
发现-三层发现
IP,icmp协议 网络控制管理层
路径发现,主机网络通断的诊断
优点:可路由,速度快。
缺点:速度比二层慢,经常被边界防火墙过滤。
ping(icmp)
- ping 192.168.1.1 -c 2(设置发包的数量)
- 路由追踪:traceroute www.sina.com
- ping -R 192.168.1.1
- ping 192.168.1.1 -c 1 | grep “bytes from”|cut -d “” -f 4 | cut -d “.” -f 1
Scapy
OSI多层堆叠手工声称ICMP包-IP/icmp
- i=Ip()
- i.dst=”192.168.1.1”(目标IP地址)
- p=ICMP()
- a=str(i/p)
- a.display()
Nmap——三层发现
nmap -sn 192.168.1/24 (-sn在同一网段,用arp,不同网段,用ICMP)
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——三层发现
- Hping(功能强大)
- 能够发送几乎任意TCP/IP包
- 功能强大但每次只能扫描一个目标
- hping3 192.168.1.1 –icmp -c 5(发5个ping包)
- for addr in $(seq 1 254); do hping3 192.168.1.$addr –icmp -c 5 >> handle.txt & done
发现——四层扫描
优点
- 可路由且结果可靠
- 不太可能被防火墙过滤
- 甚至可以发现所有端口都被过滤的主机
缺点
- 基于状态过滤的防火墙可能过滤扫描
- 全端口扫描速度慢
TCP(三次握手)
未经请求的ACK-RST(非正常通信:目标在线)
SYN-SYN/ACK、RST(正常通信:目标在线)
UDP
目标IP不在线,无响应,目标IP在线、探测的端口也是开放状态,目标主机不会回复;只有一种情况可以探测:我发向目标IP一个没有开放的端口,对方回复一个ICNP端口不可达、一去不复返。
ACK—Tcp Port—-RST(如果返回rst则在线)
scapy:
\1. i=IP()
\2. t=TCP()
3.r=(i/t)
4.r[tcp].flags=’A’(表示发ack包)
r[IP].dst=”1.1.1.1”
a=sr1(r)
a.display()(查看返回的包)
a=sr1(IP(dst=”1.1.1.1”)/TCP(dport=80,flags=’A’),timeout=1)
UDP—–UDP Port—–icmp
1.u=UDP()
2.u.deport=33333
3.r=(i/u)
4.a=sr1(r.timeout=1,verbose=1)
5.a.display()
6.a=sr1(r)
port-unreachable(目标端口不可达)
端口扫描
scapy
str1(dst=”192.168.1.1”/TCP(dport=80),timeout=1,verbose=1)
操作系统莫名接受一个syn/ack包,会自动给目标服务器回复一个rst包
nmap
nmap -sS 1.1.1.1 -p 80,21,25,443
可以不加-sS 默认是-sS
-p 1-100 扫描1到100
-p 全扫描
–open 只显示open的端口
nmap -sS -iL test.txt -p 80
hping3:
hping3 1.1.1.1 –scan 80,21,25 -S
hping3 1.1.1.1 –scan 0-65535 -S
hping3 -c 10 -S –spoof 192.168.1.140 -p ++1 192.168.1.1
-c 发包数量 –spoof欺骗伪造成另一个IP
++1端口号每次+1
全连接端口扫描
全连接对scapy比较困难
特殊情况下隐蔽扫描无法准确检测
把操作系统返回的rst包被iptable过滤掉,建立完整的连接
iptables -A OUTPUT -p tcp –tcp-flags RST RST -d 192.168.1.134 -j DROP
-d 目标ip
scapy脚本
nmap:
nmap -sT 1.1.1.1 -p 80,21
nmap -sT 1.1.1.1 -p 80-2000
nmap -sT -iL test.txt -p 80
不加-p 默认1000个常用端口
dmitry:
功能简单,但使用简便,默认150个做常用端口
dmitry -p 1.1.1.1 //tcp扫描
dmitry -p 1.1.1.1 -o output
-o 保存到文件
nc:
nc -nv -w l -z 1.1.1.1 1-100
-w 超时时间
服务扫描
识别开发端口上运行的应用
识别目标操作系统
提高攻击效率
- Banner捕获
- 服务识别
- 操作系统识别
- SNMP分析
- 防火墙识别
服务扫描——banner
- 软件开发商
- 软件名称
- 服务类型
- 版本号
- 直接发现已知的漏洞和弱点
连接建立后直接获取banner
另类服务识别方法
- 特征行为和响应字段
- 不同的响应可用于识别底层操作系统
Python socket
Socket模块用于连接网络服务
1
2
3
4
5
6import socket
bangrab=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
bangrab.connect(("1.1.1.1",21))
bangrab.recv(4096)
bangrab.close()
exit()Banner不允许抓取,recv函数无返回将挂起!
dmitry
dmitry -p 192.168.153.131
dmitry -pb 192.168.153.131
nmap
nmap -sT 192.168.153.131 -p 22 --script=banner.nse
amap
amap -B 192.168.153.131 21
amap -B 192.168.153.131 1-65535
amap -B 192.168.153.131|grep on
banner信息抓取能力有限
nmap响应特征分析识别服务
- 发送系列复杂的探测
- 依据响应特征signature
nc -nv 1.1.1.1 80
nmap 1.1.1.1 -p 80 -sV
服务扫描——SNMP
简单网络管理协议
Community strings
信息查询或重新配置
识别和绕过防火墙筛选