当前位置: 首页 > 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.dtcms.com/a/326730.html

相关文章:

  • 如何选择一家靠谱的开发公司开发项目呢?
  • sql select语句
  • Python 高阶函数:filter、map、reduce 详解
  • WebMCP 技术文档——让 AI 助手与 Web 应用无缝交互的轻量级框架
  • 基于cursor工具与AI大模型,规范驱动的全自然语言软件开发工作流实现路径
  • 导入CSV文件到MySQL
  • webpark》》
  • STM32CubeMX + HAL 库:用硬件IIC接口实现AT24C02 EEPROM芯片的读写操作
  • Kubernetes部署apisix的理论与最佳实践(一)
  • 【OpenGL】LearnOpenGL学习笔记06 - 坐标系统、MVP变换、绘制立方体
  • 用 t-SNE 把 KSC 高光谱“变成可转动的 3D 影像”——从零到会,逐段读懂代码并导出旋转 GIF
  • 二叉树进阶 之 【模拟实现二叉搜索树】(递归、非递归实现查找、插入、删除功能)
  • 跨平台RTMP推流SDK vs OBS:技术差异与行业落地解析
  • 01数据结构-十字链表和多重邻接表
  • Lwip深度阅读-网络架构
  • 【代码随想录day 17】 力扣 654.最大二叉树
  • 贪心----2.跳跃游戏
  • 区块链技术原理(5)-网络
  • Docker部署MySQL完整指南:从入门到实践
  • Leetcode-25.K个一组翻转链表
  • 【13-向量化-高效计算】
  • 第二十一天:统计数字
  • 嵌入式系统学习Day16(C语言中的位运算)
  • 绿巨人VS Code多开项目单独管理每个项目单独使用一个不限制的augment
  • 构建AI代理工作流的开源利器——Sim Studio
  • 文件编辑html
  • C语言命令行参数
  • 北京JAVA基础面试30天打卡07
  • 【C++竞赛】核桃CSP-J模拟赛题解
  • 提示词工程实战:用角色扮演让AI输出更专业、更精准的内容