内网渗透基础与靶场搭建

0 阅读5分钟

内网渗透基础与靶场搭建

马哥教育网络安全课程实战博客 · 第十篇 对应课程章节:第21-22章 · 前端加密绕过、内网渗透基础和靶场环境搭建、开发基础-录播预习


一、前言

在前面的篇章中,我们主要聚焦于Web安全的外网攻防。从本篇开始,我们将视角转向内网渗透——这是真实红队演练和护网行动中最核心的能力之一。内网渗透不同于外网Web测试,它涉及网络架构分析、域环境理解、横向移动、权限提升等多个环节,需要更全面的操作系统和网络知识储备。

本篇将系统讲解前端加密绕过的进阶技巧、内网渗透的基础概念、靶场环境搭建方法,以及安全工具开发基础。


二、前端加密绕过回顾与进阶

2.1 常见前端加密场景

在实际渗透中,越来越多系统在前端对敏感数据进行加密传输,常见场景包括:

  • 登录密码加密:使用AES/RSA加密用户密码后提交
  • API签名验证:对请求参数进行HMAC签名
  • Token编码:JWT或自定义编码的认证令牌
  • 数据包整体加密:整个请求体被加密

2.2 AES加密绕过实战

许多系统使用AES-CBC或AES-ECB模式加密密码,密钥硬编码在前端JS中。

典型场景分析:

// 前端加密示例(常见于Vue/React应用)
const CryptoJS = require('crypto-js');
const key = CryptoJS.enc.Utf8.parse('1234567890abcdef'); // 硬编码密钥
const encrypted = CryptoJS.AES.encrypt(password, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
// 提交 encrypted.toString() 给后端

绕过思路:

  1. 提取密钥:在浏览器控制台或JS文件中搜索加密密钥
  2. Hook加密函数:在加密前拦截明文
  3. 本地加解密:用提取到的密钥自行加解密
# Python本地AES解密示例
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64

def decrypt_aes_ecb(ciphertext_b64, key):
    cipher = AES.new(key.encode(), AES.MODE_ECB)
    decrypted = unpad(cipher.decrypt(base64.b64decode(ciphertext_b64)), 16)
    return decrypted.decode()

# 使用提取到的密钥解密
key = '1234567890abcdef'
encrypted = 'U2FsdGVkX1+...'  # 抓包获取的密文
print(decrypt_aes_ecb(encrypted, key))

2.3 RSA加密绕过

部分系统使用RSA公钥加密密码,私钥在后端。绕过思路:

  • 替换公钥:将前端公钥替换为自己生成的公钥,用对应私钥解密
  • 中间人代理:用Burp Suite匹配替换JS中的公钥
  • 直接绕过:如果后端同时支持明文和密文,尝试提交明文

2.4 浏览器Hook技巧

// 在浏览器控制台Hook AES加密函数
var originalEncrypt = CryptoJS.AES.encrypt;
CryptoJS.AES.encrypt = function(message, key, cfg) {
    console.log('[Hook] 明文密码:', message.toString());
    console.log('[Hook] 加密密钥:', key.toString());
    return originalEncrypt(message, key, cfg);
};

实战提示:在Burp Suite中可以使用"Match and Replace"功能自动替换前端JS中的加密密钥或公钥,实现透明解密。


三、内网渗透基础概念

3.1 网络架构分析

企业内网通常采用分层架构:

互联网 → WAF/防火墙 → DMZ区 → 核心交换机 → 办公区/服务器区
                                      ↓
                                  域控制器(DC)

关键网络区域:

区域说明典型服务
DMZ区对外提供服务Web、邮件、DNS
办公区员工终端AD认证、文件共享
服务器区核心业务数据库、应用服务器
管理区运维管理堡垒机、监控

3.2 域环境 vs 工作组

工作组(Workgroup):

  • 每台机器独立管理用户和权限
  • 没有集中认证机制
  • 适合小型网络(10台以下)
  • 渗透时需要逐台获取凭据

域环境(Domain):

  • 由域控制器(DC)集中管理
  • 统一认证(Kerberos/NTLM)
  • 组策略(GPO)统一配置
  • 适合中大型企业网络
  • 渗透重点:获取域控权限
# 判断是否在域环境中
# Windows命令
net config workstation    # 查看工作站域信息
net time /domain          # 查看域时间(域环境有效)
nltest /domain_trusts     # 查看域信任关系

# 查看域控制器
nslookup -type=srv _ldap._tcp.dc._msdcs.<域名>

3.3 常见内网服务

服务端口说明渗透利用
AD/LDAP389/636活动目录域枚举、AS-REP Roasting
SMB445文件共享永恒之蓝、共享枚举
RDP3389远程桌面爆破、BlueKeep
WinRM5985远程管理PowerShell远程执行
MSSQL1433数据库xp_cmdshell命令执行
SSH22远程登录爆破、密钥利用
Redis6379缓存未授权访问、写计划任务

四、靶场环境搭建

4.1 环境规划

本次实战使用4台Ubuntu 24.04服务器:

角色IP地址说明
攻击机113.47.1.165Kali工具环境
目标机1113.44.174.47Web服务靶机
目标机2113.44.137.250内网域控模拟
目标机3119.3.169.5内网应用靶机

4.2 安装DVWA靶场

# 在目标机1上安装DVWA
ssh ubuntu@113.44.174.47

# 安装LAMP环境
sudo apt update
sudo apt install -y apache2 php php-mysql php-gd mariadb-server git

# 配置数据库
sudo mysql -e "CREATE DATABASE dvwa;"
sudo mysql -e "CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';"
sudo mysql -e "GRANT ALL ON dvwa.* TO 'dvwa'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"

# 部署DVWA
cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo cp DVWA/config/config.inc.php.dist DVWA/config/config.inc.php
sudo chown -R www-data:www-data DVWA/
sudo chmod -R 755 DVWA/

# 修改配置文件中的数据库连接信息
sudo sed -i "s/db_password.*$/db_password'] = 'p@ssw0rd';/" DVWA/config/config.inc.php

# 重启服务
sudo systemctl restart apache2 mariadb

4.3 安装Vulhub

# 在目标机3上安装Vulhub
ssh ubuntu@119.3.169.5

# 安装Docker
sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable --now docker

# 克隆Vulhub
cd /opt
sudo git clone https://github.com/vulhub/vulhub.git

# 启动特定漏洞环境示例
cd /opt/vulhub/spring/CVE-2022-22965
sudo docker-compose up -d

# 查看运行容器
sudo docker ps

4.4 安装Metasploitable2

# 在目标机2上部署Metasploitable2
ssh ubuntu@113.44.137.250

# 使用Docker方式部署
sudo docker run -d \
  --name metasploitable2 \
  -p 21:21 -p 22:22 -p 23:23 -p 25:25 -p 53:53 \
  -p 80:80 -p 111:111 -p 139:139 -p 445:445 \
  -p 512:512 -p 514:514 -p 1099:1099 \
  -p 1524:1524 -p 2049:2049 -p 2121:2121 \
  -p 3306:3306 -p 5432:5432 -p 5900:5900 \
  -p 6000:6000 -p 6667:6667 -p 8009:8009 \
  -p 8181:8181 -p 8787:8787 \
  tleonel/metasploitable2

# 验证服务
nmap -sT -p 21,22,80,445,3306 113.44.137.250

4.5 网络隔离与路由配置

# 在攻击机上配置路由,模拟内网渗透场景
# 添加到各目标网段的路由
sudo ip route add 113.44.174.0/24 via 113.47.1.165
sudo ip route add 113.44.137.0/24 via 113.47.1.165
sudo ip route add 119.3.169.0/24 via 113.47.1.165

# 配置iptables规则模拟网络隔离
sudo iptables -A FORWARD -s 113.44.137.0/24 -d 119.3.169.0/24 -j DROP
# 允许攻击机访问所有靶机
sudo iptables -A FORWARD -s 113.47.1.165 -j ACCEPT

4.6 Windows AD靶场搭建(可选)

# 使用Docker快速搭建AD测试环境
# 在目标机2上运行
sudo docker run -d \
  --name ad-lab \
  --privileged \
  -p 389:389 -p 636:636 -p 88:88 -p 135:135 \
  -p 139:139 -p 445:445 -p 3268:3268 -p 3269:3269 \
  -p 53:53/udp -p 53:53 \
  --hostname dc01 \
  -e SAMBA_DC_DOMAIN=magedu.local \
  -e SAMBA_DC_ADMIN_PASS=Passw0rd! \
  instantlinux/samba-dc

# 验证域服务
nslookup -type=srv _ldap._tcp.dc._msdcs.magedu.local 113.44.137.250

五、安全工具开发基础

5.1 Python安全工具开发

Python是安全工具开发的首选语言,拥有丰富的安全库。

端口扫描器示例:

#!/usr/bin/env python3
# 简易多线程端口扫描器
import socket
import threading
from queue import Queue

class PortScanner:
    def __init__(self, target, ports, threads=100):
        self.target = target
        self.ports = ports
        self.threads = threads
        self.queue = Queue()
        self.results = []
        self._fill_queue()

    def _fill_queue(self):
        for port in self.ports:
            self.queue.put(port)

    def _scan_port(self, port):
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(1)
            result = s.connect_ex((self.target, port))
            if result == 0:
                service = socket.getservbyport(port, 'tcp') if port < 1024 else 'unknown'
                self.results.append((port, service))
                print(f'[+] {self.target}:{port} OPEN ({service})')
            s.close()
        except Exception:
            pass

    def _worker(self):
        while not self.queue.empty():
            port = self.queue.get()
            self._scan_port(port)
            self.queue.task_done()

    def run(self):
        threads = []
        for _ in range(self.threads):
            t = threading.Thread(target=self._worker)
            t.start()
            threads.append(t)
        for t in threads:
            t.join()
        return sorted(self.results)

if __name__ == '__main__':
    scanner = PortScanner('113.44.174.47', range(1, 1025))
    results = scanner.run()
    print(f'\n共发现 {len(results)} 个开放端口')

5.2 Go语言安全工具开发

Go语言编译为单文件、跨平台、并发性能优秀,适合开发安全工具。

Go并发扫描器示例:

package main

import (
    "fmt"
    "net"
    "sync"
    "time"
)

func scanPort(target string, port int, wg *sync.WaitGroup, results chan<- int) {
    defer wg.Done()
    address := fmt.Sprintf("%s:%d", target, port)
    conn, err := net.DialTimeout("tcp", address, time.Second)
    if err == nil {
        conn.Close()
        results <- port
    }
}

func main() {
    target := "113.44.174.47"
    var wg sync.WaitGroup
    results := make(chan int, 65535)

    for port := 1; port <= 1024; port++ {
        wg.Add(1)
        go scanPort(target, port, &wg, results)
    }

    go func() {
        wg.Wait()
        close(results)
    }()

    for port := range results {
        fmt.Printf("[+] %s:%d OPEN\n", target, port)
    }
}

六、内网侦察

6.1 Nmap扫描

# 主机发现
nmap -sn 113.44.174.0/24

# 端口扫描(全端口, SYN扫描)
sudo nmap -sS -p- 113.44.174.47

# 服务版本探测
nmap -sV -sC -p 21,22,80,445,3306 113.44.174.47

# 操作系统探测
sudo nmap -O 113.44.174.47

# 脚本扫描(漏洞检测)
nmap --script vuln 113.44.174.47
nmap --script smb-vuln* 113.44.137.250

# 输出报告
nmap -sV -oA scan_result 113.44.174.47

6.2 Masscan高速扫描

# Masscan高速端口扫描
sudo masscan 113.44.174.0/24 -p1-65535 --rate=10000

# 指定端口范围
sudo masscan 113.44.174.47 113.44.137.250 119.3.169.5 \
  -p 21,22,23,80,443,445,1433,3306,3389,5985 \
  --rate=5000 -e eth0

# 输出JSON格式
sudo masscan 113.44.174.0/24 -p 1-65535 --rate=10000 -oJ results.json

6.3 fscan内网综合扫描

# fscan是一款内网综合扫描工具,集成主机发现、端口扫描、漏洞检测
# 下载
wget https://github.com/shadow1ng/fscan/releases/latest/download/fscan_amd64
chmod +x fscan_amd64

# 基本用法:扫描整个网段
./fscan_amd64 -h 113.44.174.0/24

# 指定端口扫描
./fscan_amd64 -h 113.44.174.47 -p 21,22,80,445,3306,3389

# 同时检测Web漏洞
./fscan_amd64 -h 113.44.174.47 -p 80,443,8080 -w

# 扫描结果示例
# [+] 113.44.174.47:22 open
# [+] 113.44.174.47:80 open
# [+] 113.44.174.47:445 open
# [*] 113.44.174.47:445 SMB
#   [!] CVE-2017-0144 (EternalBlue) may be vulnerable

6.4 内网信息收集脚本

#!/bin/bash
# 内网侦察脚本
TARGETS="113.44.174.47 113.44.137.250 119.3.169.5"

echo "=== 内网侦察报告 ==="
echo "扫描时间: $(date)"
echo ""

for target in $TARGETS; do
    echo "--- 目标: $target ---"
    # 主机存活检测
    ping -c 1 -W 1 $target > /dev/null 2>&1 && echo "状态: 存活" || echo "状态: 离线"

    # 快速端口扫描
    nmap -sT -p 21,22,23,25,53,80,110,135,139,143,443,445,1433,1521,3306,3389,5432,5985,6379,8080,8443,9090 \
         --open -T4 $target 2>/dev/null

    echo ""
done

echo "=== 扫描完成 ==="

七、总结

本篇涵盖了以下核心内容:

  1. 前端加密绕过:掌握了AES/RSA加密场景的识别与绕过方法,包括密钥提取、函数Hook和中间人替换技术
  2. 内网渗透基础:理解了企业网络架构、域环境与工作组的区别、常见内网服务及其利用面
  3. 靶场搭建:完成了DVWA、Vulhub、Metasploitable2的部署,配置了网络隔离环境
  4. 工具开发:学习了用Python和Go开发安全扫描工具的基础
  5. 内网侦察:掌握了nmap、masscan、fscan三大扫描工具的使用方法

下一篇我们将进入MSF与CS内网渗透实战,利用本篇搭建的靶场环境进行真实的渗透演练。


免责声明:本文所有技术内容仅用于授权安全测试和教学目的。未经授权对他人系统进行渗透测试属于违法行为。请在合法授权范围内使用所学技术。