内网渗透基础与靶场搭建
马哥教育网络安全课程实战博客 · 第十篇 对应课程章节:第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() 给后端
绕过思路:
- 提取密钥:在浏览器控制台或JS文件中搜索加密密钥
- Hook加密函数:在加密前拦截明文
- 本地加解密:用提取到的密钥自行加解密
# 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/LDAP | 389/636 | 活动目录 | 域枚举、AS-REP Roasting |
| SMB | 445 | 文件共享 | 永恒之蓝、共享枚举 |
| RDP | 3389 | 远程桌面 | 爆破、BlueKeep |
| WinRM | 5985 | 远程管理 | PowerShell远程执行 |
| MSSQL | 1433 | 数据库 | xp_cmdshell命令执行 |
| SSH | 22 | 远程登录 | 爆破、密钥利用 |
| Redis | 6379 | 缓存 | 未授权访问、写计划任务 |
四、靶场环境搭建
4.1 环境规划
本次实战使用4台Ubuntu 24.04服务器:
| 角色 | IP地址 | 说明 |
|---|---|---|
| 攻击机 | 113.47.1.165 | Kali工具环境 |
| 目标机1 | 113.44.174.47 | Web服务靶机 |
| 目标机2 | 113.44.137.250 | 内网域控模拟 |
| 目标机3 | 119.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 "=== 扫描完成 ==="
七、总结
本篇涵盖了以下核心内容:
- 前端加密绕过:掌握了AES/RSA加密场景的识别与绕过方法,包括密钥提取、函数Hook和中间人替换技术
- 内网渗透基础:理解了企业网络架构、域环境与工作组的区别、常见内网服务及其利用面
- 靶场搭建:完成了DVWA、Vulhub、Metasploitable2的部署,配置了网络隔离环境
- 工具开发:学习了用Python和Go开发安全扫描工具的基础
- 内网侦察:掌握了nmap、masscan、fscan三大扫描工具的使用方法
下一篇我们将进入MSF与CS内网渗透实战,利用本篇搭建的靶场环境进行真实的渗透演练。
免责声明:本文所有技术内容仅用于授权安全测试和教学目的。未经授权对他人系统进行渗透测试属于违法行为。请在合法授权范围内使用所学技术。