一.kali 基础工具
- NetCat -网络工具中的瑞士军刀:允许用户通过 TCP 或 UDP 协议发送和接收数据。
- WireShark-开源抓包软件
- TCPdump-命令行抓包分析工具
二. 被动信息收集
2.1 被动信息收集指从公开渠道获取信息,主要是已经公开的信息。
要点:
- 与目标系统不产生直接交互(扫描)
- 尽量避免留下一切痕迹
收集内容 |
---|
IP 地址段 |
域名信息 |
邮件地址 |
文档图片 |
公司地址 |
公司组织架构 |
联系电话/传真号码 |
人员姓名/职务 |
目标系统使用的技术架构 |
公开的商业信息 |
2.2 信息用途
- 用所有已获得的信息来描述目标,还原目标真实情况。
- 通过分析描述中的目标来发现其弱点
- 社会工程学攻击
- 物理缺口
域名信息收集工具
- nslookup -域名解析和网络故障排除。
- nslookup 有两种模式
交互模式:一个会话执行多个查询或操作
命令行模式:执行一次性简单查询或者将其嵌入脚本中
-
dig-域名系统(DNS)查询工具,常用于域名解析和网络故障排除。比 nsloop 有更强大的功能
-
域名字典爆破
通过尝试多个可能得域名来猜测有效的域名或子域名
字典的选择与使用
字典爆破工具
字典工具 | 描述 | 使用命令 |
---|---|---|
fierce | 开源网络安全工具:用于域名扫描和子域名枚举 | fierce --dns-servers 8.8.8.8 --domain XXX.com.cn |
dnsenum | 枚举域名信息的开源工具:执行多种 DNS 查询来收集与目标域名相关的信息 | dnsenum -dnsserver 8.8.8.8 XXX.com -o sina.xml |
dbsrecon | 域名枚举和信息收集 |
- 域名注册信息
-
whois 命令
-
用于查询和获取域名额注册信息,可以查看特定域名注册商,域名所有者,注册日期,过期日期,DNS 服务器等信息。
whois -h whois.apnic.net 192.0.43.10
三. 搜索引擎
Shodan
专门用于搜索和互联网连接的设备和系统。他主要关注物联网设备,工业控制系统,服务器和其他网络设备等特定的联网设备
ZoomEye
ZoomEye 专门用于搜索与互联网上的网络设备和系统相关的信息。它被称为网络空间搜索引擎,与 Shodan 类似。
https://www.shodan.io/
工作原理:通过自动化程序定期爬取互联网上的网页内容,建立庞大索引数据库
筛选语法!!!
四.社工字典
- cupp
按个人信息生成专属的密码字典。
Common User Password Profiler(CUPP,通用用户密码探查器):
https://github.com/Mebus/cupp
- Exif
Exif (Exchangeable Image File Foemat) 用于存放数字图像喝音频文件元数据的标准格式,通常用于 JPEG,TIFT 和 RAW 图像中,用于记录与图像相关的信息。
Exif 提供了关于图像的拍摄参数、设备信息、拍摄时间等详细的元数据
五. 主动信息收集
- 扫描(IP,端口,服务等)
- 直接与目标系统交互通信
- 使用受控第三方电脑进行探测,使用代理
5.2 二层发现
- 通过 ARP 协议发现同网段下存活的主机
优点:扫描速度快,可靠
缺点:不可路由,只能发现本网段主机,常用于获得某台主机控制权后,以此作为跳板发现其网段内其他主机
- arping
ARPing:(Address Resolution Protocol pinging)用于获取与指定 IP 地址相关联的 MAC 地址
arping 192.168.230.1 -c 1
查看是否有 ARP 欺骗
arping 192.168.230.1 -d
3.nmap
Namp(Network Mapper)用于探测主机,端口和服务等信息,提供丰富功能
:扫描网段所有存活主机。
nmap 10.133.30.1-254 -sn
: 扫描文件中的主机是否存活
nmap -iL iplist.txt -sn
- Netdiscover
基于 APR 协议的网络扫描工具,发现本地网络中活动主机的 IP 地址和 MAC 地址
- 专门用与二层发现,无线和交换网络环境
- 主动和被动探测
示例 01:指定网络接口,扫描网段存活主机。
netdiscover -i eth0 -r 1.1.1.0/24
- Scapy
#!/usr/bin/pythonimport logging
import subprocess
import sysfrom scapy.all import *
from scapy.layers.l2 import ARPlogging.getLogger("scapy.runtime").setLevel(logging.ERROR)if len(sys.argv) != 2:print("Usage: ./arp_disc.py <interface>")print("Example: ./arp_disc.py eth0")sys.exit()interface = str(sys.argv[1])
ip = subprocess.check_output("ifconfig " + interface + " | grep 'inet ' | cut -d 't' -f 2 | cut -d ' ' -f 2", shell=True).strip().decode()
print("IP address:", ip)
prefix = ip.split('.')[0] + '.' + ip.split('.')[1] + '.' + ip.split('.')[2] + '.'for addr in range(0, 254):answer = sr1(ARP(pdst=prefix + str(addr)), timeout=0.1, verbose=0)if answer == None:passelse:print(prefix + str(addr))print("END")
sys.exit()
5.3 三层发现
通过 ip。icmp 协议发现存活主机
优点:速度比较快
缺点:经常被边界防火墙过滤
- ping
- Scapy
#!/usr/bin/pythonimport logging
import subprocess
import sysfrom scapy.all import *
from scapy.layers.inet import IP, ICMPlogging.getLogger("scapy.runtime").setLevel(logging.ERROR)if len(sys.argv) != 2:print("Usage: ./pinger.py </24 network address>")print("Example: ./pinger.py 172.16.36.0")sys.exit()address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'for addr in range(0, 254):answer = sr1(IP(dst=prefix + str(addr))/ICMP(), timeout=0.1, verbose=0)if answer == None:passelse:print(prefix + str(addr))print("END")
sys.exit()
- nmap
nmap -sn 1.1.1.100-250
- fping
fping(Fast Ping)用于测试主机的可达性和响应时间。与标准 ping 工具不同,fping 具有一些额外的功能和选项。支持并发探测与批量操作。 - fping 1.1.1.1 -c 2
- traceroute
5.3 四层发现
主要是基于 TCP、UDP 协议来发现存活主机
优点:
- 可路由且结果可靠
- 不太可能被防火墙过滤
- 甚至可以发现所有端口都被过滤的主机
缺点:
基于状态过滤的防火墙可能过滤扫描
全端口扫描速度慢
原理:
TCP
- 全连接扫描(TCP Connect Scan):扫描器尝试与目标主机的端口建立完整的 TCP 连接。如果连接成功建立,则说明该端口是开放的,目标主机存活。
- 半开放扫描(SYN 扫描,TCP SYN Scan):扫描器发送一个 TCP SYN 包(同步包)到目标主机的指定端口,如果收到目标主机的 TCP SYN/ACK 包(同步/应答包),则表示该端口是开放的(主机存活);如果收到目标主机的 RST 包(复位包)或没有收到任何响应,则表示该端口是关闭的。
- ACK 扫描:发送未经请求的 ACK 包到目标主机的端口,通过观察返回的响应或未响应来判断端口的状态。大多数操作系统对于未经请求的 ACK 包会返回一个 RST 包。在很多情况下可能被防火墙或入侵检测系统所阻止。
UDP
- 扫描器向目标主机的指定端口发送一个 UDP 数据包,然后根据接收到的响应进行判断。(例如,ICMP 端口不可达消息)
5.3.2 Scapy
#!/usr/bin/pythonimport logging
import sysfrom scapy.all import *
from scapy.layers.inet import IP, TCPlogging.getLogger("scapy.runtime").setLevel(logging.ERROR)if len(sys.argv) != 2:print("Usage: ./ACK_ping.py </24 network address>")print("Example: ./ACK_ping.py 172.16.36.0")sys.exit()address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'for addr in range(0, 254):response = sr1(IP(dst=prefix + str(addr))/TCP(dport=2222, flags='A'), timeout=0.1, verbose=0)try:if int(response[TCP].flags) == 4:print(prefix + str(addr))except:passprint("END")
sys.exit()
UDP 的脚本 UDP_ping.py
#!/usr/bin/pythonimport logging
import sysfrom scapy.all import *
from scapy.layers.inet import IP, UDPlogging.getLogger("scapy.runtime").setLevel(logging.ERROR)if len(sys.argv) != 2:print("Usage: ./UDP_ping.py </24 network address>")print("Example: ./UDP_ping.py 172.16.36.0")sys.exit()address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'for addr in range(0, 254):response = sr1(IP(dst=prefix + str(addr))/UDP(dport=2222), timeout=0.1, verbose=0)try:if int(response[IP].proto) == 1:print(prefix + str(addr))except:passprint("END")
sys.exit()
5.3.3 nmap
nmap 1.1.1.100-254 -PU 53 -sn
5.3.4 hping3
nmap 1.1.1.100-254 -PU 53 -sn