《Kali渗透基础》05. 主动信息收集(二)

news/2024/5/17 21:04:52

kali渗透

  • 1:端口扫描
  • 2:UDP 扫描
    • 2.1:Scapy
    • 2.2:nmap
  • 3:半开放扫描
    • 3.1:Scapy
    • 3.2:nmap
    • 3.3:hping3
  • 4:全连接扫描
    • 4.1:Scapy
    • 4.2:nmap
    • 4.3:dmitry
    • 4.4:NetCat
  • 5:僵尸扫描
    • 5.1:Scapy
    • 5.2:nmap


本文以 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/pythonimport logging
import time
import sysfrom scapy.all import *
from scapy.layers.inet import IP, UDPlogging.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:passprint("END")
sys.exit()

2.2:nmap

基本语法
nmap 选项

部分选项

参数说明
-sUUDP 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/pythonimport logging
import sysfrom scapy.all import *
from scapy.layers.inet import IP, TCPlogging.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:passelif int(a[TCP].flags) == 18:print(port)else:passprint("END")
sys.exit()

3.2:nmap

基本语法
nmap 选项

部分选项

参数说明
-sS/sT/sA/sW/sMTCP SYN/Connect()/ACK/Window/Maimon scans.
--openOnly 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--scanSCAN mode.
-S--synset SYN flag.
-p--destport[+][+]port destination port(default 0) ctrl+z inc/dec.
-a--spoofspoof 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/sMTCP 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 选项

部分选项

参数说明
-pPerform a TCP port scan on a host.
-oSave 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 选项

部分选项

参数说明
-nnumeric-only IP addresses, no DNS.
-vverbose [use twice to be more verbose].
-w secstimeout for connects and final net reads.
-zzero-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/pythonimport loggingfrom scapy.all import *
from scapy.layers.inet import IP, TCPlogging.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:passdef 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.(欺骗扫描)
-PnTreat 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

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

——《增广贤文》


http://wed.xjx100/news/254914.html

相关文章

Hugging News #0602: Transformers Agents 介绍、大语言模型排行榜发布!

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」&#xff0c;本期 Hugging News 有哪些有趣的消息…

解决一个典型的商业案例研究任务

介绍 印尼的一家公司 Gojek 通过移动应用程序提供运输和物流、食品和购物、支付、日常需求、商业、新闻和娱乐等服务&#xff0c;对经济做出了超过70亿美元的贡献。 它拥有 90 万注册商户、超过 1.9 亿次应用下载以及超过 200 万名司机能够在120分钟内完成超过18万个订单。我们…

chatgpt赋能python:Python创建界面的重要性及实现方法

Python创建界面的重要性及实现方法 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python在Web开发、数据分析和人工智能等方面的强大表现。然而&#xff0c;Python对于前端的支持一直是一个不被关注的领域。 随着网站、移动应用和电脑软件的普及&#xff0c;用户对…

Java网络编程-API监测

实现一个用于监测 API 接口可用性的线程类&#xff0c;其作用是通过发送 HTTP 请求到指定的 API 接口&#xff0c;并监测接口的可用性。 代码中的 APIThread 类继承自 Thread&#xff0c;意味着它可以在单独的线程中执行。 在 run 方法中&#xff0c;使用 HttpURLConnection …

大数据Doris(三十三):Spark集群搭建

文章目录 Spark集群搭建 一、Spark Standalone 集群搭建 1、下载Spark安装包 2、上传、

windows 安装 minio

windows 安装 minio 1.通过powershell 安装 ~~ Invoke-WebRequest -Uri “https://dl.min.io/server/minio/release/windows-amd64/minio.exe” -OutFile “D:\devtool\minio\minio.exe” setx MINIO_ROOT_USER admin setx MINIO_ROOT_PASSWORD password D:\devtool>m…

【Python】函数 ⑥ ( 变量作用域 | 局部变量 | 全局变量 | global 关键字 | 代码示例 )

文章目录 一、变量作用域1、局部变量2、全局变量3、代码示例 - 函数体内修改全局变量失败4、代码示例 - 函数体内修改全局变量 一、变量作用域 Python 变量 作用域 是 变量的 使用范围 , 变量 在哪些 代码区域中可以被访问 , 在哪些代码块中不能被访问 ; 变量主要分为两类 : 局…

C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…