@


本系列侧重方法论,各工具只是实现目标的载体。

命令与工具只做简单介绍,其使用另见《安全工具录》。

本文以 kali-linux-2022.3-vmware-amd64 为例。

1:端口扫描

意义

  • 端口对应网络服务及应用程序。
  • 服务端程序漏洞通过端口攻入。
  • 发现开放的端口,就有更具体的攻击面。

原理

UDP 端口扫描

  • UDP 是一个无连接的协议,因此 UDP 扫描需要发送探测报文并等待响应。

    假设 ICMP port-unreachable 响应代表端口关闭(可能误判)
  • 完整的 UPD 应用层请求:准确性高、耗时巨大。

TCP 端口扫描

  • 全连接扫描(TCP Connect Scan)

    扫描器尝试与目标主机的端口建立完整的TCP连接。如果连接成功建立,则说明该端口是开放的。

  • 半开放扫描(SYN 扫描,隐蔽扫描,TCP SYN Scan)

    扫描器发送一个 TCP SYN 包(同步包)到目标主机的指定端口,如果收到目标主机的 TCP SYN/ACK 包(同步/应答包),则表示该端口是开放的;如果收到目标主机的 RST 包(复位包)或没有收到任何响应,则表示该端口是关闭的。

  • 僵尸扫描(Zombie Scanning)

所有的 TCP 扫描方式都是基于三次握手的变化来判断目标端口状态。

2:UDP 扫描

发送 UDP 数据包。

  • 如果目标主机返回一个 ICMP 端口不可达的响应,表示该端口关闭或有防火墙。

2.1:Scapy

命令行输入 scapy 进入或作为 python 模块使用。

示例01:UDP 扫描:UDP_scan.py

#!/usr/bin/python

import logging
import time
import sys from scapy.all import *
from scapy.layers.inet import IP, UDP logging.getLogger("scapy.runtime").setLevel(logging.ERROR) if len(sys.argv) != 4:
print("Usage: ./UDP_scan.py <Target-IP> <First Port> <Last Port>")
print("Example: ./UDP_scan.py 172.16.36.0 1 100")
sys.exit() ip = str(sys.argv[1])
start = int(sys.argv[2])
end = int(sys.argv[3]) for port in range(start, end):
a = sr1(IP(dst=ip)/UDP(dport=port), timeout=1, verbose=0) time.sleep(1) if a == None:
print(port)
else:
pass print("END")
sys.exit()

2.2:nmap

基本语法

nmap 选项

部分选项

参数 说明
-sU UDP Scan.
-p <port ranges> Only scan specified ports.

如果不指定端口,默认扫描内置的 1000 个常用端口。

示例01

nmap -sU 1.1.1.1

示例02

nmap 1.1.1.1 -sU -p 53

示例03

nmap -iL iplist.txt -sU -p 1-200

3:半开放扫描

半开放扫描(SYN 扫描,隐蔽扫描,TCP SYN Scan)

扫描器向目标主机发送一个 SYN 数据包

  • 如果目标主机返回一个 SYN/ACK 数据包(同步/应答),表示端口是开放的,即目标主机正在监听该端口,并愿意接收连接。
  • 如果目标主机返回一个 RST(复位)数据包,表示端口是关闭的,即目标主机并未监听该端口,或者有防火墙等机制阻止了扫描器的访问。

不建立完整连接,应用日志不记录扫描行为:比较隐蔽。

3.1:Scapy

命令行输入 scapy 进入或作为 python 模块使用。

示例01:syn_scan.py。

#!/usr/bin/python

import logging
import sys from scapy.all import *
from scapy.layers.inet import IP, TCP logging.getLogger("scapy.runtime").setLevel(logging.ERROR) if len(sys.argv) != 4:
print("Usage: ./syn_scan.py <Target-IP> <First Port> <Last Port>")
print("Example: ./syn_scan.py 172.16.36.0 1 100")
sys.exit() ip = str(sys.argv[1])
start = int(sys.argv[2])
end = int(sys.argv[3]) for port in range(start, end):
a = sr1(IP(dst=ip)/TCP(dport=port), timeout=1, verbose=0) if a == None:
pass
elif int(a[TCP].flags) == 18:
print(port)
else:
pass print("END")
sys.exit()

3.2:nmap

基本语法

nmap 选项

部分选项

参数 说明
-sS/sT/sA/sW/sM TCP SYN/Connect()/ACK/Window/Maimon scans.
--open Only show open (or possibly open) ports.

示例01

nmap -sS 1.1.1.1 -p 80,21,25,110,443

示例02

nmap -sS 1.1.1.1 -p 1-65535 --open

示例03:与 示例02 一样。

nmap -sS 1.1.1.1 -p- --open

3.3:hping3

基本语法

hping3 选项

部分选项

参数 说明
-8--scan SCAN mode.
-S--syn set SYN flag.
-p--destport [+][+]port destination port(default 0) ctrl+z inc/dec.
-a--spoof spoof source address.

示例01

hping3 1.1.1.1 --scan 80,21,25,443 -S

示例02

hping3 1.1.1.1 --scan 0-65535 -S

示例03:发送10个 TCP SYN 数据包,源 IP 地址为 1.1.1.2,目标 IP 地址为 1.1.1.3,并向 1 号端口开始递增发送数据包。

hping3 -c 10 -S --spoof 1.1.1.2 -p ++1 1.1.1.3

4:全连接扫描

  • 扫描器向目标主机发送一个 SYN 数据包,如果目标主机返回一个 SYN/ACK 数据包(同步/应答),表示端口开放。
  • 然后扫描器发送一个 ACK 数据包(应答),完成三次握手过程,建立一个完全的TCP连接。
  • 建立连接后,扫描器可以选择终止连接或者发送其他命令进行进一步的探测。

4.1:Scapy

Scapy 实现全连接扫描比较困难,需要配合防火墙。

因为内核认为莫名收到的 SYN/ACK 数据包是非法包,直接发送 RST 数据包终止连接。

4.2:nmap

基本语法

nmap 选项

部分选项

参数 说明
-sS/sT/sA/sW/sM TCP SYN/Connect()/ACK/Window/Maimon scans.

示例01

nmap -sT 1.1.1.1 -p 80,21,25

示例02

nmap -sT 1.1.1.1 -p 80-2000

4.3:dmitry

Dmitry 用于网络侦察:端口扫描、服务识别等。功能简单,但使用简便。

Deepmagic Information Gathering Tool.

"There be some deep magic going on".

基本语法

dmitry 选项

部分选项

参数 说明
-p Perform a TCP port scan on a host.
-o Save output to %host.txt or to file specified by -o file

示例01

dmitry -p 172.16.36.135 -o output.txt

4.4:NetCat

基本语法

nc 选项

部分选项

参数 说明
-n numeric-only IP addresses, no DNS.
-v verbose [use twice to be more verbose].
-w secs timeout for connects and final net reads.
-z zero-I/O mode [used for scanning].

示例01

nc -nv -w 1 -z 192.168.60.4 1-100

-z:表示进行端口扫描。对指定的主机和端口范围执行零输入和零输出的扫描,以确定它们是否处于打开状态。

示例02:简单脚本,对某主机端口扫描。

for x in $(seq 20 30); do nc -nv -w 1 -z 1.1.1.1 $x; done | grep open

示例03:简单脚本,对某网段主机 80 端口扫描。

for x in $(seq 1 254); do nc -nv -w 1 -z 1.1.1.$x 80; done

5:僵尸扫描

僵尸扫描

  • 极度隐蔽
  • 可伪造源地址
  • 实施条件苛刻

这里的僵尸机不是指被控制的主机,而是网络中足够闲置的主机系统。

僵尸机要满足两个条件:

  1. 足够闲置。
  2. 系统使用递增的 IPID。

IPID(IP 标识符)是网络层协议(如IPv4)中用于标识每个数据包的唯一值。

原理如下图:

5.1:Scapy

示例01:zombie_scan.py

#!/usr/bin/python

import logging

from scapy.all import *
from scapy.layers.inet import IP, TCP logging.getLogger("scapy.runtime").setLevel(logging.ERROR) def zombie_scan(target, zombie):
print("\nScanning target" + target + " with zombie " + zombie)
print("\n-------------Open Ports on Target-------------\n") for port in range(1, 100):
try:
start_val = sr1(IP(dst=zombie)/TCP(flags="SA", dport=port), timeout=1, verbose=0)
send(IP(src=zombie, dst=target)/TCP(flags="S", dport=port), verbose=0)
end_val = sr1(IP(dst=zombie)/TCP(flags="SA"), timeout=1, verbose=0) if end_val[IP].id == (start_val[IP].id + 2):
print(port)
except:
pass def ipid(zombie):
reply_1 = sr1(IP(dst=zombie)/TCP(flags="SA"), timeout=1, verbose=0)
send(IP(dst=zombie)/TCP(flags="SA"), verbose=0)
reply_2 = sr1(IP(dst=zombie)/TCP(flags="SA"), timeout=1, verbose=0) if reply_2[IP].id == (reply_1[IP].id + 2):
print("IPID sequence is incremental and target appears to be idle. ZOMBIE LOCATED")
response = input("Do you want to use this zombie to perform a scan? (y or n): ") if response == "y":
target = input("Enter the IP address of the target system: ")
zombie_scan(target, zombie)
else:
print("Either the IPID sequence is not incremental or the target is not idle. NOT A GOOD ZOMBIE") print("-------------Zombie Scan Suite-------------\n")
print("1 - Identify Zombie Host")
print("2 - Perform Zombie Scan\n") ans = input("Select an Option (1 or 2): ") if ans == "1":
zombie = input("Enter IP address to test IPID sequence: ")
ipid(zombie)
elif ans == "2":
zombie = input("Enter IP address for zombie system: ")
target = input("Enter IP address for scan target: ")
zombie_scan(target, zombie)

5.2:nmap

基本语法

nmap 选项

部分选项

参数 说明
--script=<Lua scripts> "Lua scripts" is a comma separated list of directories, script-files or script-categories.
-sI <zombie host[:probeport]> Idle scan.(欺骗扫描)
-Pn Treat all hosts as online -- skip host discovery.(禁用主机发现,跳过对目标主机是否在线的检测。)

可以到 /usr/share/nmap/scripts/ 目录下查看所有 nmap 脚本。

示例01

发现僵尸:

nmap -p445 172.168.2.133 --script=ipidseq.nse

ipidseq.nse 是 Nmap 的一个脚本,用于检测目标主机的 IPID 序列。

扫描目标:

nmap 172.16.36.135 -sI 172.168.2.133 -Pn -p 0-100

量大祸不在,机深祸亦深。

——《增广贤文》

《Kali渗透基础》05. 主动信息收集(二)的更多相关文章

  1. 小白日记7:kali渗透测试之主动信息收集-发现(一)--二层发现:arping/shell脚本,Netdiscover,scapy

    主动信息收集 被动信息收集可能不准确,可以用主动信息收集验证   特点:直接与目标系统交互通信,无法避免留下访问痕迹 解决方法:1.使用受控的第三方电脑进行探测,使用代理 (做好被封杀的准备)   2 ...

  2. kali linux之主动信息收集(二层发现)

    主动信息收集: 直接与目标系统交互信息,无法避免留下访问的痕迹 使用受控的第三方电脑进行探测,如(使用代理或者使用肉鸡,做好被封杀的准备,使用噪声迷惑目标,淹没真实的探测流量) 识别活着的主机,会有潜 ...

  3. 小白日记9:kali渗透测试之主动信息收集(二)四层发现:TCP、UDP、nmap、hping、scapy

    四层发现 四层发现的目的是扫描出可能存活的IP地址,四层发现虽然涉及端口扫描,但是并不对端口的状态进行精确判断,其本质是利用四层协议的一些通信来识别主机ip是否存在. 四层发现的优点: 1.可路由且结 ...

  4. 小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

    三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议 ...

  5. kali linux之主动信息收集(三层发现,四层发现)

    三层发现: 比二层发现的优点即可路由,就是速度比二层慢,相对我们来说还是算快的,经常被边界防火墙过滤 ip icmp协议 OSI七层模型

  6. 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0

    Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...

  7. kali渗透-基础篇

    渗透之meterpreter 模拟场景:小明是我室友,整天游戏人生,浑浑噩噩,前途迷茫,每次上课交作业都要看我的,于是我开启了apche服务器,给他下载作业(别问我为什么不用QQ传,因为要装逼!),他 ...

  8. 网络安全-主动信息收集篇第二章SNMP扫描

    SNMP扫描: snmp在中大型企业中可以用来做网络管理和网络监控的使用,当开启了snmp简单网络管理后,那么客户机就可以通过这个协议向该设备发送snmp协议内容可以轻松查询到目标主机的相关信息. 以 ...

  9. 网络安全-主动信息收集篇第二章-三层网络发现之ping

    第三层网络扫描基于TCP/IP.ICMP协议. 优点:可路由.速度比较快 缺点:相对于二层网络扫描较慢,容易被边界防火墙过滤 所有扫描发现技术,都会有相应的对抗办法,所以无论是来自二层的网络扫描还是来 ...

  10. 网络安全-主动信息收集篇第二章-二层网络扫描之Netdiscover

    专用于二层发现 可用于无限和交换网络环境 主动和被动探测 主动模式:netdiscover –i 网卡名 –r IP/网络位  /   netdiscover –l IPList.txt 被动 net ...

随机推荐

  1. node 代理访问服务器

    1.背景 由于在开发的过程中,我们经常需要访问测试/正式环境,会出现线上正常,本地访问不同 2.方案 方法一: 我们可以通过node作为中间件,解决这一问题.示例如下: var express = r ...

  2. 最通俗易懂的flex讲解

    30分钟彻底弄懂flex布局 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由elson发表于云+社区专栏 目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用fle ...

  3. Blazor实战——Known框架增删改查导

    本章介绍学习增.删.改.查.导功能如何实现,下面以商品资料作为示例,该业务栏位如下: 类型.编码.名称.规格.单位.库存下限.库存上限.备注 1. 前后端共用 1.1. 创建实体类 在KIMS项目En ...

  4. Nodejs 应用编译构建提速建议

    编译构建的整体过程 拉取编译镜像 拉取缓存镜像 拉取项目源码 挂载缓存目录 执行编译命令(用户自定义) 持久化缓存 上传编译镜像 为什么在本地构建就快, 但编译机上很慢 在编辑机上每次的构建环境都是全 ...

  5. cv学习总结(11.6-11.13)

    两层全连接神经网络的内容要比想象中的多很多,代码量也很多,在cs231n只用了15分钟讲解的东西我用了一周半的时间才完全的消化理解,这周终于完成了全连接神经网络博客的书写https://www.cnb ...

  6. 谈谈ChatGPT是否可以替代人

    起初我以为我是搬砖的,最近发现其实只是一块砖,哪里需要哪里搬. 这两天临时被抽去支援跨平台相关软件开发,帮忙画几个界面.有了 ChatGPT 之后就觉得以前面向 Googel 编程会拉低我滴档次和逼格 ...

  7. 【Photoshop】切图保存小坑(选择png格式得到gif问题)

    默认情况下:Photoshop 导出切片为[GIF]格式 当你很嗨皮的把[GIF]调整为[PNG]或[JPG]格式,并保存时: 你会发现,自己的图片格式莫名其妙还是[GIF]: 但,我们的期望是: 原 ...

  8. 【问题解决】 网关代理Nginx 301暴露自身端口号

    一般项目上常用Nginx做负载均衡和静态资源服务器,本案例中项目上使用Nginx作为静态资源服务器出现了很奇怪的现象,我们一起来看看. "诡异"的现象 部署架构如下图,Nginx作 ...

  9. 一文读懂什么是AIGC?

    目录 AIGC概念 AIGC发展历史 在早期萌芽阶段(1950s~1990s) 在沉淀累积阶段(1990s~2010s) 在快速发展阶段(2010s~至今) ChatGPT AIGC能做什么? 电子商 ...

  10. 自然语言处理 Paddle NLP - 预训练模型产业实践课-理论

    模型压缩:理论基础 模型压缩基本方法分为三类: 量化 裁剪 蒸馏 量化 裁剪 绿线:随机裁剪 30% 已经扛不住了 蓝线:60% 还不错 蒸馏 蒸馏任务与原来的学习任务同时进行. 对于没有标注的数据, ...