0x86 滴滴
来源:https://github.com/vvmdx/Sec-Interview-4-2023
说明:本文件按原面经问题整理答题要点,答案为面试复习口径。
一面(35min)
1. 问简历,实习,项目角色
参考完整回答(项目/实习经历):
项目经历我会用 STAR 讲完整,而不是只列技术名词。先说项目背景:这是一个什么系统、业务价值是什么、我负责哪块安全工作;再说任务:比如接口鉴权、代码审计、漏洞验证、应急处置或安全工具开发;然后讲行动:我如何定位入口、使用了哪些工具、验证了哪些风险、如何推动修复;最后讲结果:修复了什么漏洞、减少了什么暴露面、沉淀了什么规则或文档。
如果面试官深挖,我会准备一个具体案例。例如“我在某系统审计中发现订单详情接口只校验登录态,没有校验订单 owner,导致水平越权。我用两个普通账号互换订单 ID 复现,确认能读取他人数据。修复方案是在服务端统一鉴权中间件里加入用户、租户和资源归属校验,并补充异常访问日志。复测时原越权请求返回 403,正常用户访问不受影响。”
2. 信息搜集手段
参考完整回答(信息搜集手段):
这题我会这样完整回答:针对“信息搜集手段”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
3. 遇到泛解析怎么办?
参考完整回答(子域名泛解析):
子域名泛解析会让不存在的随机子域名也解析到固定 IP 或 CNAME,导致爆破结果大量误报。处理方法是先生成几个随机子域名作为基线,记录它们的解析结果;爆破后过滤与基线相同的 IP/CNAME;再结合 HTTP 状态码、标题、页面相似度、证书 SAN、响应长度和业务内容确认真实子域名。
如果泛解析后不同随机域名返回同一默认站,也可以通过 Host 头访问和页面指纹进一步排除。
4. CDN绕过手段
参考完整回答(绕过CDN找真实IP):
绕过 CDN 找源站 IP 的思路是寻找没有经过 CDN 的旁路信息。常见来源包括历史 DNS 解析记录、证书透明度、子域名、邮件服务器、同备案资产、GitHub/配置文件泄露、国外节点解析差异、老业务入口、错误页面暴露和源站主动外连记录。
找到候选 IP 后不能直接下结论,要用 Host 头访问、证书、页面标题、静态资源路径、响应指纹和业务内容比对确认是否源站。防护上源站安全组只允许 CDN 回源 IP,源站不要暴露公网管理口,历史解析和测试域名也要清理。
5. 讲讲CTF比赛的细节
参考完整回答(CTF复盘):
CTF 题复盘要讲清题型、关键突破点、踩坑和沉淀。比如 Web 题可以按信息泄露、源码审计、参数污染、反序列化、SSTI、SQL 注入等链路讲;Pwn 题讲保护机制、溢出点、泄露地址、ROP 或堆利用;Crypto 题讲算法弱点和数学条件。
关键是不要只说“做出来了”,而要说明自己如何定位问题、如何验证假设、失败过哪些思路、最后沉淀了什么工具或知识点。
6. java反序列化讲一讲
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
7. cc链讲一讲
参考完整回答(cc链讲一讲):
这题我会这样完整回答:针对“cc链讲一讲”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
8. fastjson反序列化讲一讲?
参考完整回答(Fastjson):
Fastjson 的典型问题和 autoType 反序列化有关。攻击者提交带 @type 的 JSON,让 Fastjson 实例化攻击者指定的类;如果目标环境存在可利用 gadget,就可能触发 JNDI、setter、副作用方法或反序列化链,造成远程命令执行、SSRF 或敏感操作。
回答时可以说利用条件包括:目标使用受影响版本、开启或绕过 autoType、类路径中存在可利用类、输入 JSON 可控。修复是升级到安全版本,关闭 autoType,使用白名单而不是黑名单,避免对外部输入做任意类型反序列化;同时限制应用出网,减少 JNDI 类漏洞的利用成功率,并在日志中监控 @type、JdbcRowSetImpl、TemplatesImpl 等高危特征。
9. autotype机制讲一讲,autotype=false怎么绕过?
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
10. autotype=false绕过有几种思路?
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
11. jndi注入讲一下
参考完整回答(SQL注入):
SQL 注入的本质是用户输入进入 SQL 语句后被数据库当作语法执行,改变了原本查询逻辑。比如登录、搜索、筛选、排序、导出接口中,如果后端直接拼接 username、id、keyword、orderBy 等参数,就可能导致布尔盲注、报错注入、联合查询、时间盲注甚至写文件或提权。
修复上我会首选预编译和参数化查询,让用户输入只作为数据而不是 SQL 语法。对于 order by、表名、列名这类无法直接用占位符的位置,不能拼接用户输入,而应该做白名单映射,例如前端传 name,后端映射到固定字段 user_name;排序方向只允许 asc/desc。除此之外,还要限制数据库账号权限、关闭详细报错、记录异常 SQL 行为,并在上线前做 SAST/DAST 和手工复测。
12. 剩下的不多,忘记了
参考完整回答(剩下的不多忘记了):
这题我会这样完整回答:针对“剩下的不多,忘记了”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
二面(35min)
13. 讲几个自己挖到的高危漏洞?
参考完整回答(讲几个自己挖到的高危漏洞):
这题我会这样完整回答:针对“讲几个自己挖到的高危漏洞?”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
14. 硬编码漏洞讲一下,修复手段?
参考完整回答(硬编码漏洞讲一下修复手段):
这题我会这样完整回答:针对“硬编码漏洞讲一下,修复手段?”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
15. 怎么杜绝签名算法被破解的安全隐患?
参考完整回答(加密/签名):
对称加密是同一把密钥加解密,例如 AES,速度快,适合大量数据传输,但密钥分发是问题。非对称加密使用公钥和私钥,例如 RSA/ECC,公钥可以公开,私钥保密,适合密钥交换和数字签名,但性能较慢。哈希是单向摘要,例如 SHA-256,用于完整性校验;HMAC 是带密钥的摘要,能防止消息被篡改。
数字签名的流程是先对消息做哈希,再用私钥签名,接收方用公钥验签。它能证明消息来自私钥持有者、内容未被篡改,并提供不可否认性。TLS 里通常用非对称算法完成身份认证和密钥交换,再用对称加密传输数据。
16. 非对称加密能不能修复?
参考完整回答(加密/签名):
对称加密是同一把密钥加解密,例如 AES,速度快,适合大量数据传输,但密钥分发是问题。非对称加密使用公钥和私钥,例如 RSA/ECC,公钥可以公开,私钥保密,适合密钥交换和数字签名,但性能较慢。哈希是单向摘要,例如 SHA-256,用于完整性校验;HMAC 是带密钥的摘要,能防止消息被篡改。
数字签名的流程是先对消息做哈希,再用私钥签名,接收方用公钥验签。它能证明消息来自私钥持有者、内容未被篡改,并提供不可否认性。TLS 里通常用非对称算法完成身份认证和密钥交换,再用对称加密传输数据。
17. 除了web漏洞,讲一讲其他类型的漏洞
参考完整回答(除了web漏洞讲一讲其他类型的漏洞):
这题我会这样完整回答:针对“除了web漏洞,讲一讲其他类型的漏洞”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
18. 一个IP,上面没有web服务,怎么去攻击?
参考完整回答(一个ip上面没有web服务怎么去攻击):
这题我会这样完整回答:针对“一个IP,上面没有web服务,怎么去攻击?”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
19. GitHub项目细节
参考完整回答(项目/实习经历):
项目经历我会用 STAR 讲完整,而不是只列技术名词。先说项目背景:这是一个什么系统、业务价值是什么、我负责哪块安全工作;再说任务:比如接口鉴权、代码审计、漏洞验证、应急处置或安全工具开发;然后讲行动:我如何定位入口、使用了哪些工具、验证了哪些风险、如何推动修复;最后讲结果:修复了什么漏洞、减少了什么暴露面、沉淀了什么规则或文档。
如果面试官深挖,我会准备一个具体案例。例如“我在某系统审计中发现订单详情接口只校验登录态,没有校验订单 owner,导致水平越权。我用两个普通账号互换订单 ID 复现,确认能读取他人数据。修复方案是在服务端统一鉴权中间件里加入用户、租户和资源归属校验,并补充异常访问日志。复测时原越权请求返回 403,正常用户访问不受影响。”
20. shellcode加载器原理,免杀细节
参考完整回答(免杀):
免杀的本质是绕过静态特征、行为检测和沙箱检测。常见思路包括编码/加密载荷、分阶段加载、API 动态解析、混淆、反沙箱、内存加载和行为降噪。但在面试中我会注意边界,不展示可直接滥用的细节,而是从防守视角说明检测点。
防护上不能只依赖特征查杀,要结合行为监控、命令行审计、父子进程关系、网络外连、内存执行、脚本执行策略和最小权限。对企业来说,PowerShell 日志、EDR、应用白名单和出网控制很关键。
21. log4j漏洞怎么挖?
参考完整回答(Log4j/JNDI):
Log4j2 的 Log4Shell 漏洞是因为日志内容中的 ${jndi:...} 会触发 JNDI Lookup。攻击者只要能控制被记录到日志里的内容,比如 User-Agent、用户名、请求参数,就可能让服务器访问恶意 LDAP/RMI 地址,进而触发远程类加载或本地 gadget,造成 RCE。
完整修复是升级 Log4j 到安全版本;临时措施包括删除 JndiLookup 类、关闭 lookup、设置相关安全参数,但最终仍应升级。还要排查传递依赖,因为很多应用不是直接引入 Log4j;网络层限制服务器访问外部 LDAP/RMI;日志侧检索 ${jndi:、lower、upper、::- 等混淆特征,确认是否被探测或利用。
22. 有没有自己写过漏扫工具?
参考完整回答(有没有自己写过漏扫工具):
这题我会这样完整回答:针对“有没有自己写过漏扫工具?”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
23. 你用python、java主要干什么?
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
24. 闲聊:为什么想来滴滴?其他offer为什么不接?工作内容了解吗?
参考完整回答(HR问题):
这类 HR 问题要回答得稳定、真诚、不过度暴露弱点。期望薪资可以说“我会结合岗位职责、城市和公司薪酬体系,希望在贵司对应校招/实习生范围内匹配,我更看重团队方向和成长空间”;工作地点可以说明优先级和可接受范围;多久到岗要给明确时间;职业规划可以说短期打牢安全基础并在业务中独立承担任务,中长期希望在漏洞研究/安全工程/攻防方向形成专长。
遇到个人生活类问题,保持简洁,不展开隐私,把回答拉回工作稳定性和投入度即可。
返回安全面经目录