微信改版了,现在看到我们全凭缘分,为了不错过【全栈工程师修炼指南】重要内容及福利,大家记得按照上方步骤设置「接收文章推送」哦~
关注回复【学习交流群】加入【SecDevOps】学习交流群!
本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [[email protected]] 中我将及时回复。
免责申明:本文分享旨在给网络安全从业人员、网站开发人员以及运维管理人员在日常工作中进行安全测试以及防范恶意攻击, 请勿恶意使用下面介绍技术进行非法网络攻击,作者不为此承担任何责任,所有渗透都需获取授权,谨防从入门到入狱!
【中华人民共和国网络安全法】: http://www.npc.gov.cn/npc/c30834/201611/270b43e8b35e4f7ea98502b6f0e26f8a.shtml
前言简述:
很久没更新此专栏《#网络安全攻防等保》了,广大的看友们是不是都快忘记此专栏了,不过作者可是一直心心念念的,一定会将此专栏更新下去,希望大家能多多支持此专栏,一杯奶茶的费用,就能让你学习到许多的网安知识(物有所值),并且立即可以利用到自己的相关工作中。
应购买小伙伴的诚挚需求,作者趁着没带娃期间下总结提炼,讲解在Kali系统下针对目标存活检测以及目标的系统指纹探测工具的介绍使用。
在渗透测试前期或者后期,主机存活的探测以及系统指纹的探测尤为重要,它可以让我们明确可以向那些机器发起测试,以及明确不同的操作系统,我们应该扫描不同的特征端口,以及对应系统服务的0Day漏洞以及exploit poc。
例如, 2017年在Windows中爆发的永恒之蓝(Eternal Blue) MS17-010远程溢出漏洞(CVE-2017-0143
), 它是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以及在2019年爆发的远程桌面服务中高危远程代码执行漏洞(CVE-2019-0708
), 攻击者一旦成功利用该漏洞,便可以在目标系统上执行任意代码,以此来控制被入侵的计算机。
所以,做好前期的扫描探测可以为后续渗透测试打下一个良好的基础,这也是作者的初衷,此文本罗列出Kali渗透测试系统中的相关安全工具,快速进行目标主机的存活(alive)以及指纹(fingerprint)探测,希望能帮助各位网络安全初学者、爱好者、从业者
。
温馨提示: Windows 下载的渗透测试工具包 PentestBox 下的安装使用可参考此篇《网安工具 | Windows便携式渗透测试环境PentestBox入门到进阶使用指南》文章。
文章目录:
描述: 针对系统主机端口的扫描通常有如下四种扫描方式,即: TCP扫描、UDP扫描、SYN扫描、隐秘扫描,下面一一简单做个介绍:
TCP 端口扫描
:即 TCP 连接端口扫描,利用TCP三次握手(Threeway handshaking)方式(SYN -> SYN+ACK -> ACK
), 它通过发送TCP连接请求到目标主机的各个端口,根据响应判断端口是否开放,常用的工具有 Nmap、Masscan
等。
UDP 端口扫描
:即 UDP 连接端口扫描,与TCP端口扫描类似,但是针对UDP协议。例如发出UDP数据包给目标主机的UDP Port
,然后等待目标主机送回的ICMP unreachable
消息以此来判断,其缺点是UDP协议不可靠,可能被防火墙过滤,常用的工具有Nmap、Masscan
等。
SYN 端口扫描
: 即 SYN 连接端口扫描(称为半打放扫描
),利用没有完成TCP三次握手的方式( SYN -> SYN+ACK -> ACK [不会发出]
),其与TCP端口扫描相比,SYN扫描不会建立完全的TCP连接,因此更隐蔽,常用的工具有Nmap、Hping
等。
隐秘扫描
:几种常见的端口扫描方式,还有其他一些扫描技术,例如
Null 扫描
:利用 TCP 协议中的一个特性,发送不带任何标志位的TCP包到目标端口,如果目标端口关闭,则不会响应,常用的工具有Nmap、Hping
等。
FIN 扫描
:与NULL扫描类似,发送带有FIN标志位的TCP包到目标端口,如果目标端口关闭,则不会响应, 不过此种技巧通常只工作在基于UNIX的TCP/IP协议上,常用的工具有Nmap、Hping
等。
SYN/ACK 扫描
:发送一个SYN/ACK分组,测知防火墙的规则设计,它可确定防火墙是否只是简单的分组过滤(只允许已建立好连接),还是一个基于状态的防火墙(可执行高级的分组过滤);
XMAS 扫描
:这一技巧是往目标端口发送一个FIN、URG、PUSH置位的分组,如果目标端口关闭,则返回一个RST分组;
描述: 针对不同环境的系统主机端口扫描,应该采用不同的扫描策略以应对防火墙
、IPS(入侵检测系统
)等安全设备的拦截预警。
「常见的扫描策略」:
全面扫描:对目标主机的所有可能端口进行扫描,此种扫描策略可以确保不会错过任何潜在的开放端口,但可能会消耗较长时间和网络资源,以及被安全设备拦截并触发安全警报
风险。
快速扫描:只扫描常见的端口,如常用的服务端口(如HTTP的80端口、FTP的21端口等),此种扫描策略速度较快,但可能会错过一些非常见的开放端口
(即自定义服务端口)。
特定端口扫描:只扫描用户指定的特定端口,此种扫描策略适用于对特定服务或应用程序进行目标扫描,基于已知系统指纹的情况下
使用。
机扫描: 随机选择一些端口进行扫描,此种扫描策略可以增加对目标主机的探测难度,但也可能错过重要的开放端口。
「特殊的扫描策略」
慢扫描(Slow Scan)
:与快速扫描相对, 慢扫描尽量减小扫描活动对目标主机的影响,同时也增加了扫描的隐蔽性, 它可以模拟正常的网络流量,使扫描活动更难被检测到, 慢扫描通常采取以下技术手段:
❝1.控制扫描速度:将扫描速度限制在较低的速度,以减小对目标主机的负荷和影响。这可以通过设置延迟时间或限制并发连接数来实现。2.IP分段扫描:将扫描任务分成多个较小的IP段进行扫描,以避免在短时间内对目标主机进行大量的连接尝试。3.伪装扫描源:使用代理服务器、匿名化网络或通过多个中间主机进行扫描,以隐藏扫描源的真实IP地址。4.随机扫描顺序:随机选择需要扫描的端口和顺序,以增加扫描的隐蔽性,避免被目标主机的入侵检测系统识别为扫描活动。
❞
碎片扫描(Slow Scan)
: 利用IP数据包碎片化来绕过防火墙或入侵检测系统的端口扫描技术,即大的数据包会被分割成小的IP数据包进行传输,然后在目标主机上重新组装成完整的数据包。碎片扫描利用了这个过程中的漏洞,将一个扫描请求分成多个小的IP数据包,每个数据包只包含部分的扫描请求信息。当这些碎片化的数据包到达目标主机时,防火墙或入侵检测系统可能无法完整地识别扫描请求,并因此无法正确地检测和阻止扫描活动。
❝1.分割扫描请求:将扫描请求分成多个小的IP数据包,每个数据包只包含部分的扫描请求信息。2.伪装碎片:通过修改IP数据包的偏移量和标识字段等信息,使得目标主机无法正确地组装这些碎片化的数据包。3.乱序发送:按照不同的顺序发送碎片化的数据包,以增加扫描的隐蔽性,使得目标主机更难识别和阻止扫描活动。
❞
欺骗扫描(Deceptive Scanning)
: 利用伪造的源IP地址或其他技术,使得扫描流量看起来像是来自于受信任的主机或网络。这样,目标主机或网络设备会误认为扫描流量是合法的通信,从而不会对其进行阻止或记录, 常见的欺骗扫描技术包括:
❝1.分割扫描请求:将扫描请求分成多个小的IP数据包,每个数据包只包含部分的扫描请求信息。2.伪装碎片:通过修改IP数据包的偏移量和标识字段等信息,使得目标主机无法正确地组装这些碎片化的数据包。3.乱序发送:按照不同的顺序发送碎片化的数据包,以增加扫描的隐蔽性,使得目标主机更难识别和阻止扫描活动。
❞
协同扫描(Coordinated Scanning)
: 通过多个主机同时进行端口扫描,以快速地发现目标网络中的开放端口,它是为了避免被安全设备发现以及提高扫描效率,节省时间和资源。协同扫描通常由专门的扫描工具或平台来实现,这些工具可以协调和管理多个扫描节点的工作,每个扫描节点可以是独立的主机,也可以是分布在不同地理位置的主机,通过合理规划和配置扫描节点,可以达到更高效的端口扫描结果。
描述: 此命令通常可以在windows
、linux
、嵌入式设备
查看到其身影,主要用于使用icmp
报文协议访问指定的目标地址,检测其是否存活(在线),若防火墙禁用了ICMP ECHO 请求或响应则无法使用此命令正确探测到主机是否存活,只能换用其他方法了。
「语法参数:」
Usage
ping [options]
Options:
dns name or ip address
-a use audible ping
-A use adaptive ping
-B sticky source address
-c stop after replies
-C call connect() syscall on socket creation
-D print timestamps
-d use SO_DEBUG socket option
-e define identifier for ping session, default is random forSOCK_RAW and kernel defined for SOCK_DGRAM Imply using SOCK_RAW (for IPv4 only for identifier 0)
-f flood ping
-h print help and exit
-I either interface name or address
-i seconds between sending each packet
-L suppress loopback of multicast packets
-l send number of packages while waiting replies
-m tag the packets going out
-M define mtu discovery, can be one of
-n no dns name resolution
-O report outstanding replies
-p contents of padding byte
-q quiet output
-Q use quality of service bits
-s use as number of data bytes to be sent
-S use as SO_SNDBUF socket option value
-t define time to live
-U print user-to-user latency
-v verbose output
-V print version and exit
-w reply wait in seconds
-W time to wait for response
IPv4 options:
-4 use IPv4
-b allow pinging broadcast
-R record route
-T define timestamp, can be one of
IPv6 options:
-6 use IPv6
-F define flow label, default is random
-N use icmp6 node info query, try as argument
「常用命令:」
# 1.指定eth0网卡使用IPV4地址使用icmp协议发送128 + 8 字节的数据包四次,注:默认发送64字节
ping -c 4 -4 -I eth0 www.weiyigeek.top -s 128
# PING www.weiyigeek.top (82.156.18.253) from 192.168.228.138 eth0: 128(156) bytes of data.
# 136 bytes from 82.156.18.253 (82.156.18.253): icmp_seq=1 ttl=128 time=31.2 ms
# 2.定义生存时间为32并使用IPV6地址使用icmp协议发送消息, 最后设置等待响应的时间为1
ping -6 www.weiyigeek.top -W 1 -t 32
知识扩展: 说到ping命令检测主机存活,不得不提到ICMP协议,除了检测主机存活外,我们还可以使用其来识别目标的指纹信息。
❝ICMP (基于
Internet Control Message Protocol
协议)堆栈指纹技术是一种用于识别和分析网络设备的技术,,通过发送特定类型的ICMP请求并观察设备返回的ICMP响应来获取设备的堆栈信息,通过分析这些响应,可以确定设备所使用的操作系统和网络协议栈的版本。工作原理: 发送特定类型的ICMP请求 -> 分析ICMP响应 -> 构建堆栈指纹数据库
❞
针对于ICMP端口不可达消息,其送回包的服务类型(TOS)
值也是有差别的, 大多数系统OS是0,而Linux则是0xc0。
然而由于ICMP协议的特性,ICMP堆栈指纹技术可能会受到一些限制和干扰,例如网络设备对ICMP请求的过滤或响应的修改,指纹不一定准确此时便可使用后续介绍到的相关工具进行辅助验证。
知识扩展:如果是在 Windows 系统中执行ping 主机,我们可以根据其TTL(ICMP回显应答
)来判断主机是什么系统(小技巧),虽说不一定正确,但是通常情况下是没有问题的,值得注意的是每当经过一个路由网关后,其返回的TTL数就会减1
。
FreeBSD 、Unix 及UNix/Cisco 12.0 TTL为255
Compaq TRu64 / linux / win7(32位) TTL为64
Windows 95/98/98SE/ME TTL为32
Window 9x / 2000 / NT / window7(64) / windows 10/11 TTL为128
Digital Unix 4.0 Alpha / AIX 4.3.x IBM/RS6000 TTL为60
Linux 2.2.x Intel TTL为64
Netware 4.11 Intel TTL为128
Solaris 8 Intel/Sparc TTL为64