### 如何判断目标单位的机器是哪种协议出网

1. 自动化扫描与端口探测

这是最直接且高效的方法

- 使用自动化工具：利用 Nmap 或 `port-scan` 这类工具，对目标内网机器或出网网段进行扫描
- 常用端口与协议：
  - HTTP/HTTPS（80/443）：这是最常见的出网协议。几乎所有企业都必须开放这两个端口以供员工浏览网页。这是一个非常好的 C2 通道选择
  - DNS（53）：如果 DNS 请求能够出网，那么你可以利用 DNS 隧道技术。这种方法非常隐蔽，因为 DNS 流量通常被认为是无害的
  - SMTP/SMTPS（25/465/587）：如果企业允许员工收发邮件，那么这些端口很可能出网
  - FTP/FTPS（20/21）：不常见，但如果开放了，也是一个很好的出网通道
  - SSH（22）：如果目标允许员工通过 SSH 远程访问服务器，那么这个端口很可能出网
- 优点：快速、自动化，能提供初步的端口开放信息
- 缺点：不一定能确定协议能否出网，因为端口开放可能只是用于内部服务

2. 手动测试与验证

自动化扫描后，你需要手动验证协议是否真的能出网

- 使用命令行工具：

  - `ping`：测试 ICMP 协议是否出网
  - `telnet` 或 `nc` (netcat)：测试 TCP 协议。例如，`telnet www.baidu.com 443` 或 `nc -vz www.baidu.com 443`。如果连接成功，说明 443 端口出网

- 利用编程语言：

  - Python：编写一个简单的 Python 脚本，尝试通过不同的协议向你的服务器发送请求

        import socket
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(5)
            s.connect(('your_server_ip', 443))
            print("Port 443 is open")
            s.close()
        except Exception as e:
            print(f"Port 443 is closed: {e}")

- 优点：能精确验证某个端口是否出网，并能获得更详细的错误信息

3. 基于 DNS 查询的隐蔽测试

如果你无法通过常见的协议出网，DNS 是一个非常隐蔽的测试方法

- 原理：即使防火墙非常严格，也必须允许 DNS 流量出网，否则员工将无法正常上网。你可以利用这个特性，通过 DNS 查询来判断出网情况
- 操作步骤：
  1. 在你的攻击服务器上，搭建一个 DNS 服务器，并配置一个域名，例如 `test.com`
  2. 在目标机器上，执行一个 DNS 查询命令，例如 `nslookup <随机字符串>.test.com`
  3. 回到你的 DNS 服务器，如果收到了这个 DNS 查询请求，就说明 DNS 协议出网。你甚至可以从 DNS 请求的源 IP 地址，判断是哪台机器发出的请求
- 优点：高度隐蔽，能绕过许多严格的防火墙规则

4. 利用现有权限进行系统配置分析

如果你已经通过其他漏洞（如钓鱼、弱口令等）获得了某台机器的权限，那么判断出网协议就变得更加容易

- 检查防火墙规则：
  - Windows：`netsh advfirewall firewall show rule name=all` 或 `Get-NetFirewallRule`。这能直接告诉你哪些端口是出网的
- 检查代理服务器：
  - Windows：`netsh winhttp show proxy` 或检查浏览器的代理设置。许多公司要求所有出网流量必须通过一个代理服务器。在这种情况下，你需要配置你的 C2 通道去使用这个代理
- 检查应用程序日志：
  - 查看 Web 服务器、代理服务器或防火墙的日志。这些日志文件会记录所有出入流量，是判断出网协议的最佳来源