<!-- more -->

被动信息收集的原理

1. 被动信息收集的特点

   1. 间接与指标零碎交互通信   2. 无奈防止留下拜访的痕迹   3. 应用受控的第三方电脑进行探测,应用代理或曾经被管制的机器   4. 扫描发送不同的探测,依据返回后果判断指标状态

2. 发现指标主机的过程

1. 辨认存活主机,发现潜在的被攻打指标2. 输入一个IP地址列表,比方IP地址段、IP地址范畴3. 应用二、三、四层进行探测发现

3. OSI七层模型和TCP/IP五层模型

七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制订的一个用于计算机或通信零碎间互联的规范体系,个别称为OSI参考模型或七层模型。

它是一个七层的、形象的模型体,不仅包含一系列形象的术语或概念,也包含具体的协定。

上三层属于应用层(即时用户应用层)

OSI七层模型及TCP/IP五层模型的对应网络设备关系:

OSI七层模型及TCP/IP五层模型的对应网络协议关系:

这个比拟重要,比方咱们常常用的ping命令就是走的网络层,而代理软件代理是TCP等协定,走的是传输层,所以咱们的代理在CMD下是无奈代理ping命令的(然而在PowerShell里能够)

二层发现

1. 二层主机发现

  1. 利用OSI数据链路层的协定进行发现,个别应用的是ARP协定,能够绕开禁ping的服务器
  2. ARP协定概述:ARP协定是"Address Resolution Protocol"(地址解析协定)的缩写。计算机通过ARP协定将IP地址转换成MAC地址。
  3. ARP协定工作原理
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;当主机A要与主机B通信时,地址解析协定能够将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:第1步:依据主机A上的路由表内容,IP确定用于拜访主机B的转发IP地址是192.168.1.2。而后A主机在本人的本地ARP缓存中查看主机B的匹配MAC地址。第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP申请帧播送到本地网络上的所有主机。源主机A的IP地址和MAC地址都包含在ARP申请中。本地网络上的每台主机都接管到ARP申请并且查看是否与本人的IP地址匹配。如果主机发现申请的IP地址与本人的IP地址不匹配,它将抛弃ARP申请。第3步:主机B确定ARP申请中的IP地址与本人的IP地址匹配,则将主机A的IP地址和MAC地址映射增加到本地ARP缓存中。第4步:主机B将蕴含其MAC地址的ARP回复音讯间接发送回主机A。第5步:当主机A收到从主机B发来的ARP回复音讯时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期完结后,将再次反复下面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

2.命令详解

arping

协定层级:数据链路层

阐明:从源位址通过ping命令查看设施上的硬体位址。

语法:arping -D-A-w timeout[-s source] -I interface address

参数:

-D复制位址监测资讯;-U用ARP REQUEST包更新网路街坊上的ARP缓存;-A与-U参数作用一样,区别为-A采纳ARP REPLY包;-c count设置ping命令探测的次数;-w timeout通过timeout秒后进行ping命令;-q不显示任何资讯;-s source设置ping的源位址;-I interface设置ping应用的网路介面;address设置指标位址。

例如:

arping 192.168.10.1 -c 3

netdiscover

协定层级:数据链路层
阐明:被动查看查看是否能够与网路上的多台主机连通。

语法:netdiscover 指定网段 网卡 参数

参数:

-i 指定网卡 eth0-r 指定网段 例如 192.168.10.0/24-p 被动模式。默默的侦听指定的网卡以发现别的二层主机-t [ARP](https://so.csdn.net/so/search?q=ARP&spm=1001.2101.3001.7020)包发送距离。单位毫秒。这个能够用来躲避检测零碎的告警。-l file: 指定扫描范畴列表文件-p passive mode: 应用被动扫描的形式,不发送任何数据,只做嗅探-m file: 扫描已知 mac 地址和主机名的电脑列表-F filter: 指定 pcap 筛选器表达式(默认:“arp”)-s time: 每个 arp 申请之间的睡眠工夫(毫秒)-n node: 应用八字节的模式扫描(2 - 253)-c count: 发送 arp 申请的工夫次数-f: 应用被动模式的扫描-d: 疏忽配置文件-S: 启用每个 arp 申请之间克制的睡眠工夫-P: 打印后果-N: 不打印头。只有启用- p时无效。-L: 将捕捉的信息输入(-P),并持续进行扫描

例如:

netdiscover -i eth0 -r 192.168.10.0/24 

三层发现

1. 三层主机发现

三层主机发现:利用OSI七层模型中的网络层的协定进行主机发现,个别应用的是IP、ICMP协定。

三层扫描的优缺点:

长处:能够绕过路由的主机,速度绝对较快

毛病:速度比二层发现慢,常常会被防火墙过滤

2.命令详解

ping

协定层级:网络层
阐明:能够用来查看是否能够与网路上的一台主机连通。

语法:ping [-fn] [-c<连贯次数>] [-i<间隔时间>] [-I<网路设施>]

参数:

-f产生ping风暴,会对网路带来重大累赘,仅限root用户应用,可用来统计资料包的丢包、误码率;-n只输入数值,不尝试获取主机名;-i<间隔时间>设定2个Ping资讯包收回的间隔时间,单位为秒;-I<网路设施>当零碎有多个设施时,能够用该参数指定某一网路设施。

例如:

ping www.baidu.com

traceroute

协定层级:网络层
阐明:令利⽤ICMP 协定定位您的计算机和⽬标计算机之间的所有路由器

语法:Traceroute [options] [data size]

参数:

[-n]:显⽰的地址是⽤数字表⽰⽽不是符号[-v]:长输入[-p]:UDP端⼝设置(缺省为33434)[-q]:设置TTL测试数⽬(缺省为3)[-t]:设置测包的服务类型[data size]:每次测试包的数据字节长度(缺省为38)

例如:

traceroute www.baidu.com

hping3

协定层级:网络层
阐明:hping3是命令行下应用的TCP/IP数据包组装/剖析工具,通常web服务会用来做压力测试应用,也能够进行DOS(DDOS)攻打试验。通用hping3只能每次扫描一个指标

DOS,又叫DDOS,分布式拒绝服务攻打或洪水攻打

语法例子:

hping3 -c 100000 -d 120 -S -w 64 -p 80 --flood --rand-source www.sanguosha.com

参数:

 -h  --help      显示帮忙  -v  --version   显示版本  -c  --count     发送数据包的数目  -i  --interval  发送数据包距离的工夫 (uX即X微秒, 例如: -i u1000)      --fast      等同 -i u10000 (每秒10个包)      --faster    等同 -i u1000 (每秒100个包)      --flood     尽最快发送数据包,不显示回复。  -n  --numeric   数字化输入,象征性输入主机地址。  -q  --quiet     宁静模式  -I  --interface 网卡接口 (默认路由接口)  -V  --verbose   具体模式  -D  --debug     调试信息  -z  --bind      绑定ctrl+z到ttl(默认为目标端口)  -Z  --unbind    勾销绑定ctrl+z键      --beep      对于接管到的每个匹配数据包蜂鸣声提醒 模式抉择  default mode     TCP   // 默认模式是 TCP  -0  --rawip      RAWIP模式,原始IP模式。在此模式下HPING会发送带数据的IP头。即裸IP形式。应用RAWSOCKET形式。  -1  --icmp       ICMP模式,此模式下HPING会发送IGMP应答报,你能够用--ICMPTYPE --ICMPCODE选项发送其余类型/模式的ICMP报文。  -2  --udp        UDP 模式,缺省下,HPING会发送UDP报文到主机的0端口,你能够用--baseport --destport --keep选项指定其模式。  -8  --scan       SCAN mode. //扫描模式 指定扫描对应的端口。                   Example: hping --scan 1-30,70-90 -S www.target.host    // 扫描  -9  --listen     listen mode  // 监听模式   IP 模式  -a  --spoof      spoof source address  //源地址坑骗。伪造IP攻打,防火墙就不会记录你的实在IP了,当然回应的包你也接管不到了。  --rand-dest      random destionation address mode. see the man. // 随机目标地址模式。具体应用 man 命令  --rand-source    random source address mode. see the man.       // 随机源地址模式。具体应用 man 命令  -t  --ttl        ttl (默认 64)  //批改 ttl 值  -N  --id         id (默认 随机)  // hping 中的 ID 值,缺省为随机值  -W  --winid      应用win* id字节程序  //应用winid模式,针对不同的操作系统。UNIX ,WINDIWS的id回应不同的,这选项能够让你的ID回应和WINDOWS一样。  -r  --rel        绝对id字段(预计主机流量)  //更改ID的,能够让ID曾递加输入,详见HPING-HOWTO。  -f  --frag       拆分数据包更多的frag.  (may pass weak acl)   //分段,能够测试对方或者交换机碎片解决能力,缺省16字节。  -x  --morefrag   设置更多的分段标记    // 大量碎片,泪滴攻打。  -y  --dontfrag   设置不分段标记    // 发送不可复原的IP碎片,这能够让你理解更多的MTU PATH DISCOVERY。  -g  --fragoff    set the fragment offset    // 设置断偏移。  -m  --mtu        设置虚构最大传输单元, implies --frag if packet size > mtu    // 设置虚构MTU值,当大于mtu的时候分段。  -o  --tos        type of service (default 0x00), try --tos help          // tos字段,缺省0x00,尽力而为?  -G  --rroute     includes RECORD_ROUTE option and display the route buffer    // 记录IP路由,并显示路由缓冲。  --lsrr           涣散源路由并记录路由        // 涣散源路由  --ssrr           严格源路由并记录路由      // 严格源路由  -H  --ipproto    设置IP协定字段,仅在RAW IP模式下应用   //在RAW IP模式里抉择IP协定。设置ip协定域,仅在RAW ip模式应用。 ICMP 模式  -C  --icmptype   icmp类型(默认echo申请)    // ICMP类型,缺省回显申请。  -K  --icmpcode   icmp代号(默认0)     // ICMP代码。      --force-icmp 发送所有icmp类型(默认仅发送反对的类型)    // 强制ICMP类型。      --icmp-gw    设置ICMP重定向网关地址(默认0.0.0.0)    // ICMP重定向      --icmp-ts    等同 --icmp --icmptype 13 (ICMP 工夫戳)            // icmp工夫戳      --icmp-addr  等同 --icmp --icmptype 17 (ICMP 地址子网掩码)  // icmp子网地址      --icmp-help  显示其余icmp选项帮忙      // ICMP帮忙 UDP/TCP 模式  -s  --baseport   base source port             (default random)              // 缺省随机源端口  -p  --destport   [+][+]<port> destination port(default 0) ctrl+z inc/dec    // 缺省随机源端口  -k  --keep       keep still source port      // 放弃源端口  -w  --win        winsize (default 64)        // win的滑动窗口。windows发送字节(默认64)  -O  --tcpoff     set fake tcp data offset     (instead of tcphdrlen / 4)    // 设置伪造tcp数据偏移量(取代tcp地址长度除4)  -Q  --seqnum     shows only tcp sequence number        // 仅显示tcp序列号  -b  --badcksum   (尝试)发送具备谬误IP校验和数据包。许多零碎将修复发送数据包的IP校验和。所以你会失去谬误UDP/TCP校验和。  -M  --setseq     设置TCP序列号  -L  --setack     设置TCP的ack   ------------------------------------- (不是 TCP 的 ACK 标记位)  -F  --fin        set FIN flag  -S  --syn        set SYN flag 同步  -R  --rst        set RST flag  -P  --push       set PUSH flag  -A  --ack        set ACK flag   ------------------------------------- (设置 TCP 的 ACK 标记 位)  -U  --urg        set URG flag      // 一大堆IP抱头的设置。  -X  --xmas       set X unused flag (0x40)  -Y  --ymas       set Y unused flag (0x80)  --tcpexitcode    应用last tcp-> th_flags作为退出码  --tcp-mss        启用具备给定值的TCP MSS选项  --tcp-timestamp  启用TCP工夫戳选项来猜想HZ/uptime Common //通用设置  -d  --data       指定发送到主机的数据包大小,以字节为单位,缺省是0。  -E  --file       文件数据  -e  --sign       增加“签名”  -j  --dump       转储为十六进制数据包  -J  --print      转储为可打印字符  -B  --safe       启用“平安”协定  -u  --end        通知你什么时候--file达到EOF并避免倒回  -T  --traceroute traceroute模式(等同应用 --bind 且--ttl 1)  --tr-stop        在traceroute模式下收到第一个不是ICMP时退出  --tr-keep-ttl    放弃源TTL固定,仅用于监督一跳  --tr-no-rtt      不要在跟踪路由模式下计算/显示RTT信息 ARS包形容(新增性能,不稳固)ARS packet description (new, unstable)  --apd-send       发送APD形容数据包(参见docs / APD.txt)

例如:

traceroute www.baidu.com

fping

协定层级:网络层
阐明:fping是ping命令的加强版,它能够对一个IP段进行ping扫描,而ping命令自身是不能够对网段进行扫描的。fping6是fping用来ping IPV6的命令

语法例子:

fping -a -g 192.168.10.0/24

参数:

仅ping ipv4地址,ipv6请应用fping6-a:只显示存活主机;-u:只显示不存活主机;-g:通过指定起始地址与终止地址产生指标列表-6,——ipv6只有ping ipv6地址-b,——size=要发送的ping数据量,以字节为单位(默认值:56)-B,——backoff=N设置指数backoff因子为N(默认值:1.5)计数模式:发送N个ping到每个指标-f,——file=从文件中读取指标的文件列表(-示意stdin)生成指标列表(仅当没有指定-f时)(在指标列表中给出开始和完结IP,或者一个CIDR地址)(例如:fping -g 192.168.1.0 192.168.1.255或fping -g 192.168.1.0/24)-H,——ttl=N设置IP ttl值(活跳工夫)-I,——iface= iface绑定到一个特定的接口-l,——loop loop模式:永远发送ping信号-m,——所有应用提供的主机名的所有ip(例如IPv4和IPv6),与-A一起应用-M,——不要设置“不要宰割”标记设置ICMP包上的服务类型(tos)标记-p,——period= ping包到一个指标之间的MSEC距离(单位:ms)(in loop and count mode,默认:1000 ms)-r,——重试=N次重试(默认:3次)-R,——随机分组数据(到箔链接数据压缩)-S,——src=IP设置源地址-t,——timeout=MSEC单个指标初始超时(默认:500 ms,除了-l/-c/ -c,其中-p周期为2000 ms)输入选项:显示有生命的指标-A, -addr显示指标地址-C,——vcount=N与-C雷同,以具体格局报告后果在每个输入行之前打印工夫戳-e,——elapsed显示返回数据包耗费的工夫-i,——interval=发送ping包之间的MSEC距离(默认值:10 ms)-n,——name按名称显示指标(-d等效)-N,——netdata输入兼容netdata (-l -Q是必须的)-o,——中断显示累计中断工夫(失落包*包距离)-q,——十分十分(不要显示每个指标/每个ping的后果)-Q,——squiet=秒数,与-Q雷同,但每n秒显示摘要-s,——stats打印最终的stats显示无奈达到的指标-v,——版本显示版本-x,——可达=N示意>=N个主机是否可达

四层发现

1.nmap

协定层级:传输层

阐明:nmap是一个网络探测和平安扫描程序,零碎管理者和集体能够应用这个软件扫描大型的网络,获取那台主机正在进行以及提供扫描服务等信息。nmap反对很多扫描技术,例如:UDP、TCPconnect()、TCP SYN(半开扫描,只发第一个包)、FTP代理(bounce攻打)、反向标记、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。还能够探测系统操作类型(-O 参数)。

语法例子:

nmap 192.168.10.1

参数:

-A :选项用于应用进攻性形式扫描-T4: 指定扫描过程应用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯情况较好的状况下举荐应用T4-oX test.xml: 将扫描后果生成 test.xml 文件-oG test.txt:  将扫描后果生成 test.txt 文件-sn : 只进行主机发现,不进行端口扫描-O : 指定Nmap进行零碎版本扫描-sV: 指定让Nmap进行服务版本扫描-p <port ranges>: 扫描指定的端口-sS/sT/sA/sW/sM:指定应用 TCP SYN/Connect()/ACK/Window/Maimon scans的形式来对指标主机进行扫描-sU: 指定应用UDP扫描形式确定指标主机的UDP端口情况-script <script name> : 指定扫描脚本-Pn : 不进行ping扫描-sP :  用ping扫描判断主机是否存活,只有主机存活,nmap才会持续扫描,个别最好不加,因为有的主机会禁止ping-PI :  设置这个选项,让nmap应用真正的ping(ICMP echo申请)来扫描指标主机是否正在运行。-iL 1.txt : 批量扫描1.txt中的指标地址-sL: List Scan 列表扫描,仅将指定的指标的IP列举进去,不进行主机发现-sY/sZ: 应用SCTP INIT/COOKIE-ECHO来扫描SCTP协定端口的凋谢的状况-sO: 应用IP protocol 扫描确定指标机反对的协定类型-PO : 应用IP协定包探测对方主机是否开启-PE/PP/PM : 应用ICMP echo、 ICMP timestamp、ICMP netmask 申请包发现主机-PS/PA/PU/PY : 应用TCP SYN/TCP ACK或SCTP INIT/ECHO形式进行发现-sN/sF/sX: 指定应用TCP Null, FIN, and Xmas scans机密扫描形式来帮助探测对方的TCP端口状态-e eth0:指定应用eth0网卡进行探测-f : --mtu <val>: 指定应用分片、指定数据包的 MTU.-b <FTP relay host>: 应用FTP bounce scan扫描形式-g: 指定发送的端口号-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机程序形式扫描,以让nmap的扫描不易被对方防火墙检测到)-v 示意显示冗余信息,在扫描过程中显示扫描的细节,从而让用户理解以后的扫描状态-n : 示意不进行DNS解析;-D  <decoy1,decoy2[,ME],...>: 用一组 IP 地址覆盖实在地址,其中 ME 填入本人的 IP 地址-R :示意总是进行DNS解析。-F : 疾速模式,仅扫描TOP 100的端口-S <IP_Address>: 伪装成其余 IP 地址--ttl <val>: 设置 time-to-live 工夫--badsum: 应用谬误的 checksum 来发送数据包(失常状况下,该类数据包被摈弃,如果收到回复,阐明回复来自防火墙或 IDS/IPS)--dns-servers  : 指定DNS服务器--system-dns : 指定应用零碎的DNS服务器--traceroute : 追踪每个路由节点--scanflags <flags>: 定制TCP包的flags--top-ports <number> :扫描凋谢概率最高的number个端口--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports相似,这里以概率作为参数--version-trace: 显示出具体的版本侦测过程信息--osscan-limit: 限度Nmap只对确定的主机的进行OS探测(至多需确知该主机别离有一个open和closed的端口)--osscan-guess: 大胆猜想对方的主机的零碎类型。由此准确性会降落不少,但会尽可能多为用户提供潜在的操作系统--data-length <num>: 填充随机数据让数据包长度达到 Num--ip-options <options>: 应用指定的 IP 选项来发送数据包--spoof-mac <mac address/prefix/vendor name> : 假装 MAC 地址--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越精确,然而运行工夫会比拟长。--version-light: 指定应用轻量侦测形式 (intensity 2)--version-all: 尝试应用所有的probes进行侦测 (intensity 9)

实战:应用scapy定制数据包进行高级扫描

scapy工具简介

Scapy是一个能够让用户发送、侦听和解析并假装网络报文的Python程序。这些性能能够用于制作侦测、扫描和攻打网络的工具。

scapy定制ARP协定包

要发包,数据包的格局什么样?一个数据包有什么参数?

应用scapy命令进入控制台

scapy

ARP().display() 显示ARP协定包参数

>>> ARP().display()###[ ARP ]###   hwtype= 0x1  ptype= IPv4  hwlen= None  plen= None  op= who-has  hwsrc= 00:0c:29:a1:81:ef  psrc= 192.168.10.252  hwdst= 00:00:00:00:00:00  pdst= 0.0.0.0

sr1() 设置参数并发送包

>>> sr1(ARP(pdst="192.168.10.18"))Begin emission:Finished sending 1 packets..*Received 2 packets, got 1 answers, remaining 0 packets<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=d8:bb:c1:2e:51:b8 psrc=192.168.10.18 hwdst=00:0c:29:a1:81:ef pdst=192.168.10.252 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>

IP().display() 显示IP协定包参数

ICMP().display() 显示ICMP协定包参数

sr1() 设置参数并发送包,多个函数参数用/宰割,参数选项用,宰割

>>> sr1(IP(dst='192.168.10.18')/ICMP(), timeout=1)Begin emission:Finished sending 1 packets......*Received 6 packets, got 1 answers, remaining 0 packets<IP  version=4 ihl=5 tos=0x0 len=28 id=33647 flags= frag=0 ttl=64 proto=icmp chksum=0x6113 src=192.168.10.18 dst=192.168.10.252 |<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' |>>>>>> 

scapy定制TCP协定SYN申请包

tcp三次握手过程中flags的标记

<img src="https://s2.loli.net/2023/01/09/6OpQ8ELS2Zz5U7s.png" alt="image-20230109141337892" style="zoom:50%;" />

<img src="https://s2.loli.net/2023/01/09/8BHg9azowE46rvS.png" alt="image-20230109143536853" style="zoom: 80%;" />

TCP().display() 显示TCP协定包参数

>>> TCP().display()###[ TCP ]###   sport= ftp_data  dport= http  seq= 0  ack= 0  dataofs= None  reserved= 0  flags= S  window= 8192  chksum= None  urgptr= 0  options= []

发送TCP协定包

flags="S" 意思是SYN数据包 同步模式

dport=80 指标端口是80

>>> sr1(IP(dst='192.168.10.18')/TCP(flags="S",dport=80),timeout=1)Begin emission:Finished sending 1 packets.*Received 1 packets, got 1 answers, remaining 0 packets<IP  version=4 ihl=5 tos=0x0 len=44 id=33650 flags=DF frag=0 ttl=64 proto=tcp chksum=0x20fb src=192.168.10.18 dst=192.168.10.252 |<TCP  sport=http dport=ftp_data seq=3370734633 ack=1 dataofs=6 reserved=0 flags=SA window=65392 chksum=0xe4ce urgptr=0 options=[('MSS', 1460)] |<Padding  load='\x00\x00' |>>>

从以上响应后果总失去一个flags=SA的数据包。SA标记即SYN+ACK。示意收到服务器tcp三次握手中的第二个包,能够收到响应包,示意端口凋谢。

注:这种基于tcp的半链接扫描,更隐密,更不容易被发现。

被动信息收集的原理

1. 信息收集分类

信息收集能够分为两类:被动和被动

被动信息收集:与指标主机进行间接交互,从而拿到指标信息,毛病是会记录本人的操作信息。比方:nmap 端口扫描,scapy 高级扫描等。

被动信息收集:不与指标主机进行间接交互,通过搜索引擎或者社会工程等形式间接的获取指标主机的信息。比方: google搜寻,Shodan搜寻,fofa搜寻,钟馗之眼等。

2.信息收集内容

社工层面:公司地址、邮件地址、域名信息、联系电话、公司职务人员

技术层面:IP地址、端口信息、操作系统类型、技术架构、服务版本信息、敏感信息