渗透测试——信息收集
信息收集
1、被动收集
利用第三方的服务对目标进行访问了解。公开的渠道获得目标主机的信息,不直接与系统交互,避免留下痕迹。例如google搜索
1.1 域名信息收集
kali自带whois 天眼查 ICP备案查询网
whois查询
https://whois.aliyun.com、http://whois.chinaz.com
https://whois.aizhan.com https://www.whois365.com/cn
https://www.virustotal.com/gui/home/url https://www.webscan.cc
备案信息查询
https://beian.miit.gov.cn https://www.tianyancha.com
1.2 敏感信息收集
Google Hacking https://www.exploit-db.com/google-hacking-database
Google语法
关键字 | 说明 |
---|---|
site | 指定域名 |
inurl | url中存在关键字的网页 例:inurl:admin_login.asp(登录界面) |
intext | 网页正文中的关键字 |
filetype | 指定文件类型(torrent是种子文件)例:kali filetype:torrent |
info | 查找指定站点的一些基本信息 |
intitle | 网页标题中的关键字 intitle:index.of .bash history |
link | 返回所有和该域名做了链接的url |
cache | 搜索Google里关于某些内容的缓存,一些页面被删除但还是可以找到 |
index.of | 网页内容开放 |
敏感目录文件收集工具:DirBuster等
1.3 shodan暗黑谷歌搜索引擎
webcam 网络摄像头 set:ip city: 北京 port:80
1.4 子域名收集
1.4.1 子域名收集站点
https://dnsdumpster.com、http://dns.aizhan.com、https://phpinfo.me/domain、http://tool.chinaz.com
1.4.2 证书透明度公开日志枚举
https://crt.sh、https://censys.io
1.4.3 收集工具
登录到https://www.maltego.com/ce-registration/ 用gmail注册账号(方便接收激活信息)然后到kali登录
layer子域名挖掘机
subDomainsbrute
基本命令
python subDomainsbrute.py xxx.com
kali自带模块fierce(适用于kali 2021.1)
fierce --domain xxx.com
1.5 CMS指纹识别
站点:https://github.com/Ms0x0/Dayu
https://www.yunsee.cn
http://whatweb.bugscaner.com
工具:御剑web指纹识别、轻量WEB指纹识别
1.6 查找真实IP
CDN
http://ping.chinaz.com、https://viewdns.info
https://api.asm.saas.broadcom.com、https://ip138.com
2、主动收集
通过直接访问、扫描网站,将流量流经网站。直接与目标系统交互通信、无法避免留下访问痕迹、使用肉鸡探测做好被封杀的准备、扫描发送不同的探测根据返回结果判断目标状态。nmap 等
2.1 OSI模型扫描
TCP/IP五层模型 | 对应网络设备 | 对应协议 |
---|---|---|
应用层(为应用程序提供服务)、表示层(数据格式转化、数据加密)、会话层(建立、管理和维护会话) | 应用层 | HTTP Telnet FTP DNS TFTP SMTP |
传输层(建立、管理和维护端到端的连接) | 四层交换机、四层路由器 | TCP UDP |
网络层(IP地址及路由选择) | 路由器、三层交换机 | IP ICMP RIP IGMP |
数据链路层(提供介质访问和链路管理) | 网桥、以太网交换机、网卡 | ARP RARP IEEE802.3 PPP CSMA/CD |
物理层 | 中继器、集线器、双绞线 | FE自协商 Manchester MLT-3 PAM5 |
二层扫描:扫描速度快、可靠、不可路由
三层扫描:可路由、速度较快比二层扫描慢、经常被边界防火墙过滤、使用IP、ICMP协议
四层扫描:可路由、结果可靠、不太可能被防火墙过滤、可以发现所有端口都被过滤的主机、基于状态过滤的防火墙可能过滤扫描、全端口扫描慢
2.2 ping探测服务器存活(基于二层扫描)
2.2.1 简单ping
ping ip -c 1 //-c 1 只ping一次
traceroute baidu.com //路由跟踪
2.2.2 arping(排查黑客是否冒充网关进行中间攻击)
arping ip 出现两个mac地址对应一个IP地址就是有ARP攻击
netdiscover:主动/被动的arp侦查工具
netdiscover -i etho -r 192.168.1.0/24 //-i:指定网络设备 -r:扫描范围。-P被动扫描
2.2.3 Hping3 对服务器进行dos攻击每次扫描一个目标(压力测试)
hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source xxx.xxx
-c 1000 发送的数据包的数量
-d 120 发送到目标机器的每个数据包的大小单位字节
-S syn数据包
-w 64 tcp窗口大小
-p 80 目的地端口
--flood 尽可能快的发送数据包不需要考虑显示入站回复(洪水攻击模式) --rand-source 使用随机性的源头ip地址。在局域网中伪造。通过路由器后还是会还原成真实的ip地址
2.3 nmap半连接扫描-nc扫描端口
kali系统中自带nmap和nc工具,命令用法如下
nmap -sS 192.168.1.64 -p 80,81,21,25,110,443 //-sS表示使用SYN半连接扫描。扫描速度快。
nmap -sS 192.168.1.64 -p 1-1024
nc -nv -w 1 -z 192.168.1.64 1-1024 //-nv表示我们扫描的目标是个ip地址不做域名解析 -w表示超时时间 -z表示端口扫描
端口扫描的其他工具:御剑高速TCP端口扫描工具
2.4 scapy定制arp和icmp数据包扫描
scapy是一个可以让用户发送、侦听和解析并伪装网络报文的python程序。可以制作侦测、扫描和攻击网络的工具
scapy
exit() //退出
INF0: Can't import matplotlib. Won't be able to plot. //报错
apt-get install python-matplotlib //解决方案
2.4.1 定义ARP包 arp函数使用方法
>>> ARP().display()
###[ ARP ]###
hwtype= 0x1 硬件类型
ptype= IPv4 协议类型
hwlen= None 硬件地址长度(MAX)
plen= None 协议地址长度(IP)
op= who-has who-has查询
hwsrc= 00:0c:29:a3:ba:39 源MAX地址
psrc= 192.168.88.132 源IP地址
hwdst= 00:00:00:00:00:00 目的MAX地址
pdst= 0.0.0.0 目的IP地址,向谁发送查询请求
例:使用sr1函数(发送和接收数据包)生成一个ARP请求包询问谁是192.168.1.1
>>> sr1(ARP(pdst="192.168.88.143"))
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<ARP hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:d9:16:2d psrc=192.168.88.10\x00\x00\x00\x00\x00\x00' |>>
2.4.2 定义ping包
IP()生成ping包的原IP和目标IP,ICMP()生成ping包的类型。使用IP()和ICMP()两个函数可以生成ping包,进行探测。(修改IP包头的dst,也就是目的地址,然后拼接上ICMP的数据包类型,最后使用sr1进行发送数据包并接受)
>>> sr1(IP(dst="192.168.88.143")/ICMP(),timeout=1)
Begin emission:
Finished sending 1 packets.
..*
Received 3 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=28 id=9545 flags= frag=0 ttl=128 proto=icmp chksum=0xe333 src=192.168.88.143 dst=192.168.88.132 |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
2.5 scapy定制TCP协议SYN请求和UDP请求
2.5.1 定制TCP协议
>>> sr1(IP(dst="192.168.88.143")/TCP(flags='S',dport=80),timeout=1)
Begin emission:
Finished sending 1 packets.
..*
Received 3 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=40 id=10238 flags=DF frag=0 ttl=128 proto=tcp chksum=0xa06d src=192.168.88.143 dst=192.168.88.132 |<TCP sport=http dport=ftp_data seq=0 ack=1 dataofs=5 reserved=0 flags=RA window=0 chksum=0x7d07 urgptr=0 |<Padding load='\x00\x00\x00\x00\x00\x00' |>>>
我们得到一个flags=SA的数据包,即SYN+ACK.我们收到服务器tcp三次握手中的第二个包,表示端口开放(相对于直接访问不会被服务器记录,基于TCP的半连接扫描,更隐秘,更不容易被发现)
2.5.2 定制UDP协议
没有收到回应包,表示端口开放,收到回应包,表示UDP端口关闭或者此端口是非UDP端口。UDP协议不是那么的可靠
>>> sr1(IP(dst="192.168.88.143")/UDP(dport=80),timeout=2)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=56 id=9362 flags= frag=0 ttl=128 proto=icmp chksum=0xe3ce src=192.168.88.143 dst=192.168.88.132 |<ICMP type=dest-unreach code=port-unreachable chksum=0x2f7b reserved=0 length=0 nexthopmtu=0 |<IPerror version=4 ihl=5 tos=0x0 len=28 id=1 flags= frag=0 ttl=64 proto=udp chksum=0x486c src=192.168.88.132 dst=192.168.88.143 |<UDPerror sport=domain dport=80 len=8 chksum=0xccf4 |>>>>
>>>
┌──(root💀kali)-[~/桌面]
└─# nmap -sS 192.168.88.143 -p 80
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-11 16:35 CST
Nmap scan report for 192.168.88.143
Host is up (0.00094s latency).
PORT STATE SERVICE
80/tcp closed http
MAC Address: 00:0C:29:D9:16:2D (VMware)
2.6 社会工程学
取得得关键人的信任,挖掘出重要信息。
工具:社工库