0x1F shopee
来源:https://github.com/vvmdx/Sec-Interview-4-2023
说明:本文件按原面经问题整理答题要点,答案为面试复习口径。
1. 和信息安全相关的返回 response 头(https://www.cnblogs.com/yungyu16/p/13333909.html)
参考完整回答(TLS/HTTPS):
HTTPS 是 HTTP 加 TLS。TLS 首先通过证书验证服务器身份,客户端检查证书链、域名、有效期和吊销状态;然后双方通过 ECDHE 等方式协商会话密钥;握手完成后用对称加密保护 HTTP 数据,并用 AEAD 或 MAC 保证完整性。
安全配置上应禁用 SSL、TLS 1.0/1.1 和弱加密套件,优先 TLS 1.2/1.3,启用 HSTS,Cookie 加 Secure/HttpOnly/SameSite。HTTPS 能防窃听和篡改,但不能自动防 SQL 注入、XSS、越权这类应用层漏洞。
2. linux 常见命令
参考完整回答(Linux安全):
Linux 安全我会从账号、权限、进程、网络、启动项、日志和补丁几个方面回答。账号侧检查 /etc/passwd、sudoers、SSH key、弱口令和异常登录;权限侧关注 SUID/SGID、777 目录、敏感文件权限和 Web 目录可写可执行;进程和网络侧用 ps、top、ss、lsof 看异常进程和外连;持久化侧看 crontab、systemd、rc.local、shell profile 和自启动服务。
加固时禁用 root 远程登录,使用密钥和 MFA,最小化 sudo 权限,关闭不必要服务,配置防火墙,开启日志审计,及时打补丁。发现入侵时先保留证据,再做隔离和清除。
3. docker 常见命令
参考完整回答(容器安全):
容器安全要从镜像、运行时、编排和宿主机四层看。镜像层要避免使用高危基础镜像、硬编码密钥和 root 用户;运行时要限制特权容器、hostPath、hostNetwork、SYS_ADMIN 等危险能力;Kubernetes 层要控制 RBAC、ServiceAccount token、API Server 暴露、etcd 访问和网络策略;宿主机层要及时更新内核和容器运行时。
容器逃逸通常依赖特权配置、危险挂载、内核漏洞、Docker socket 暴露或 K8s 权限过大。防护是最小权限、只读文件系统、seccomp/AppArmor、禁止特权容器、镜像扫描、网络隔离和审计异常容器行为。
4. jwt 是什么
参考完整回答(Token安全):
Token 设计要看是否可伪造、可泄露、可重放和可撤销。如果是 JWT,Header 和 Payload 只是 Base64URL 编码,不是加密,不能放密码、身份证这类敏感信息;签名算法要固定,禁止 alg=none 和算法混淆;密钥要足够强;exp、iat、aud、iss 等字段要校验。
保护上,浏览器侧 Token 放 HttpOnly Secure SameSite Cookie 更能防 XSS 读取;如果放 localStorage,要重点防 XSS。服务端要支持过期、刷新、吊销和设备维度失效;关键操作可要求短期 Token 或二次认证;传输必须走 HTTPS。
5. weblogic 反序列化原理(有一个 xml 反序列化漏洞 还有后台文件上传 还有二次 urldecode 权限绕过)
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
6. java 代码审计 exec 命令执行的相关利用 前面拼了一段 然后调用 lang.runtime.exec("fuck" + a) 这里可以利用吗 (不行 因为根据 exec 的方法 这里不能识别执行)
参考完整回答(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. 内存马相关原理
参考完整回答(内存马):
内存马是不依赖传统落地 WebShell、驻留在应用运行时里的后门。Java Web 里常见形态包括动态注册 Filter、Servlet、Listener、Interceptor、Controller,或者通过 Agent、字节码增强挂入请求链。它的特点是文件落地少、重启后可能消失或通过其他方式重新注入,常规文件查杀不一定能发现。
排查时我会看异常路由、Filter/Servlet 注册表、线程、类加载器、堆内存、访问日志和异常响应特征;也可以通过 Arthas、JMX、RASP/EDR 做运行时检查。防护上要修入口漏洞、限制反射和动态类加载风险、最小权限运行,并加强运行时完整性监控。
8. shiro 反序列化漏洞利用的时候 由于 waf 过长 被 ban 了 怎么解决这个问题(如果是 waf 拦截 可以尝试更换 http 头 如果是 tomcat 头过长 可以在 cookie 写一个 loader 然后 shellcode 写到 body 里)
参考完整回答(Shiro反序列化):
Shiro 经典反序列化漏洞通常出现在 rememberMe 功能。Shiro 会把序列化对象加密后放进 rememberMe Cookie,如果密钥是默认值或泄露,攻击者就能用这个密钥加密恶意序列化数据发给服务端,服务端解密后反序列化,触发 CommonsCollections 等 gadget 链。
我会回答形成原因是:客户端可控 Cookie、服务端自动解密反序列化、密钥弱或默认、环境中存在可用 gadget。修复包括升级 Shiro,使用随机强密钥,禁用不必要的 rememberMe,减少危险依赖,开启出网限制,并监控异常 rememberMe Cookie 长度、特征和反序列化异常。
9. 内存马扫描原理 如何检测内存马
参考完整回答(内存马):
内存马是不依赖传统落地 WebShell、驻留在应用运行时里的后门。Java Web 里常见形态包括动态注册 Filter、Servlet、Listener、Interceptor、Controller,或者通过 Agent、字节码增强挂入请求链。它的特点是文件落地少、重启后可能消失或通过其他方式重新注入,常规文件查杀不一定能发现。
排查时我会看异常路由、Filter/Servlet 注册表、线程、类加载器、堆内存、访问日志和异常响应特征;也可以通过 Arthas、JMX、RASP/EDR 做运行时检查。防护上要修入口漏洞、限制反射和动态类加载风险、最小权限运行,并加强运行时完整性监控。
10. 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。
11. ysoserial 原理 commoncollections 利用链的原理 (cc1 最后 invoke 反射加载输入的方法 cc2 cc3 等等大同小异)
参考完整回答(ysoserial原理commoncollections利用链的原理cc最后invoke反射加载输入的方法cccc等等大):
这题我会这样完整回答:针对“ysoserial 原理 commoncollections 利用链的原理 (cc1 最后 invoke 反射加载输入的方法 cc2 cc3 等等大同小异)”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
12. linux 全盘查找文件命令(find / -name fucku)
参考完整回答(Linux安全):
Linux 安全我会从账号、权限、进程、网络、启动项、日志和补丁几个方面回答。账号侧检查 /etc/passwd、sudoers、SSH key、弱口令和异常登录;权限侧关注 SUID/SGID、777 目录、敏感文件权限和 Web 目录可写可执行;进程和网络侧用 ps、top、ss、lsof 看异常进程和外连;持久化侧看 crontab、systemd、rc.local、shell profile 和自启动服务。
加固时禁用 root 远程登录,使用密钥和 MFA,最小化 sudo 权限,关闭不必要服务,配置防火墙,开启日志审计,及时打补丁。发现入侵时先保留证据,再做隔离和清除。
13. docker run 的常用命令(docker run -it centos -p --name -d )
参考完整回答(容器安全):
容器安全要从镜像、运行时、编排和宿主机四层看。镜像层要避免使用高危基础镜像、硬编码密钥和 root 用户;运行时要限制特权容器、hostPath、hostNetwork、SYS_ADMIN 等危险能力;Kubernetes 层要控制 RBAC、ServiceAccount token、API Server 暴露、etcd 访问和网络策略;宿主机层要及时更新内核和容器运行时。
容器逃逸通常依赖特权配置、危险挂载、内核漏洞、Docker socket 暴露或 K8s 权限过大。防护是最小权限、只读文件系统、seccomp/AppArmor、禁止特权容器、镜像扫描、网络隔离和审计异常容器行为。
14. java 反序列化 php 反序列化 python 反序列化的区别和相同点(java 反序列化需要利用链 php反序列化也需要利用链 python反序列化不需要利用链 有一个\_\_reduce\_\_可以自己构造 命令执行)
参考完整回答(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。
15. linux 全盘搜索含有某个字符的文件/linux 全盘搜索叫某个名字的文件(grep -rl 'abc' /)(find -name / fucku)
参考完整回答(Linux安全):
Linux 安全我会从账号、权限、进程、网络、启动项、日志和补丁几个方面回答。账号侧检查 /etc/passwd、sudoers、SSH key、弱口令和异常登录;权限侧关注 SUID/SGID、777 目录、敏感文件权限和 Web 目录可写可执行;进程和网络侧用 ps、top、ss、lsof 看异常进程和外连;持久化侧看 crontab、systemd、rc.local、shell profile 和自启动服务。
加固时禁用 root 远程登录,使用密钥和 MFA,最小化 sudo 权限,关闭不必要服务,配置防火墙,开启日志审计,及时打补丁。发现入侵时先保留证据,再做隔离和清除。
返回安全面经目录