0x0E 360-安全工程师
来源:https://github.com/vvmdx/Sec-Interview-4-2023
说明:本文件按原面经问题整理答题要点,答案为面试复习口径。
1. 自我介绍
参考完整回答(自我介绍):
可以按“背景、方向、项目、工具、优势、求职动机”来讲。示例:我主要学习网络安全方向,熟悉 Web 漏洞、渗透测试、Linux 安全、日志分析和代码审计;项目中做过资产收集、漏洞验证、权限控制或应急处置,常用 Burp、Nmap、sqlmap、Wireshark、Linux 等工具。最后强调自己能从漏洞原理、利用条件和修复方案三个层面分析问题。
2. WAF及其绕过方式
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
3. IPS/IDS/HIDS
参考完整回答(WAF/IDS/误报):
WAF/IDS 误报多来自规则只看单个关键字、缺少业务上下文、参数位置不同、编码变化、正常运维脚本触发和资产类型差异。比如 mysql 执行 powershell 可能是运维脚本,也可能是入侵后的横向行为,不能只看一个命中点。
优化时我会做分层:高危明确攻击特征可以阻断;中低危先告警并结合频率、来源信誉、参数位置、响应码、命中规则数、登录态和资产重要性打分;对确定的正常业务加精确白名单,而不是大范围放行;持续把处置结果反馈到规则,形成闭环。
4. 云安全
参考完整回答(云安全):
云安全我会重点看身份、网络、数据和审计。身份侧是 AK/SK、RAM/IAM 权限、临时凭证和 MFA;网络侧是安全组、ACL、公网暴露和出入站策略;数据侧是 OSS/S3 桶权限、数据库公网访问、KMS 加密和备份;审计侧是云审计日志、登录异常、API 调用和告警。
常见攻击链是代码泄露 AK/SK、SSRF 访问元数据服务、过宽 IAM 权限横向到云资源、对象存储公开导致数据泄露。修复上要最小权限、密钥轮换、元数据服务加固、存储桶默认私有、安全组收敛和开启云审计。
5. 怎么绕过安骑士/安全狗等
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
6. Gopher扩展攻击面
参考完整回答(Gopher/SSRF扩展):
Gopher 常用于扩展 SSRF 的攻击面,因为它可以构造比较原始的 TCP payload,不只访问 HTTP,还可能和 Redis、MySQL、FastCGI、Memcached 等内部服务交互。比如 SSRF 入口支持 gopher 协议时,攻击者可以构造 Redis 命令写文件,或者构造 FastCGI 请求触发 PHP-FPM 相关利用。
防护上首先要限制协议,只允许业务需要的 http/https;其次禁止访问内网和保留地址;对跳转后的 URL 也要重新校验;服务端出网走统一代理并做 ACL;内部 Redis、FastCGI 等服务不能无认证暴露。
7. Struct2漏洞
参考完整回答(Struts2漏洞):
Struts2 漏洞常见根因是 OGNL 表达式注入或文件上传解析问题。攻击者通过参数、Content-Type、URL 或表单字段把表达式传到 Struts2 处理链中,框架在特定版本和配置下执行表达式,最终可能调用 Java 方法造成命令执行。
回答时可以从“入口可控、框架解析、表达式执行、命令执行”这条链讲。修复方式是升级 Struts2 到安全版本,关闭危险动态方法调用,限制参数绑定,避免把用户输入进入表达式上下文,并在 WAF/网关层监控 OGNL 特征。
8. UDF提权
参考完整回答(UDF提权):
UDF 提权是 MySQL 场景里比较典型的数据库到系统权限扩大方式。攻击者如果拿到高权限数据库账号,并且具备写文件条件,就可能把自定义函数动态库写入 MySQL 的 plugin_dir,然后通过 create function 注册函数,最后调用函数执行系统命令。
利用条件主要有三个:数据库账号权限足够,能写 plugin_dir 或可控目录,目标系统架构和 MySQL 版本匹配。防护就是业务账号最小权限,禁止 FILE/CREATE FUNCTION 等高危权限,plugin_dir 不可写,MySQL 低权限运行,并审计 UDF、outfile、load_file 等行为。面试中我会强调它不是单纯“数据库漏洞”,更多是权限配置不当导致的提权链。
9. DOM XSS
参考完整回答(XSS):
XSS 是用户可控内容被浏览器当成脚本执行。反射型常见于搜索参数或错误提示,存储型常见于评论、昵称、工单内容,DOM 型常见于前端从 location、hash、postMessage 中取值后写入页面。影响包括窃取用户信息、发起越权操作、劫持页面、钓鱼和横向传播。
修复要按输出上下文处理:输出到 HTML 文本要 HTML 编码,输出到属性要属性编码,输出到 JS 字符串要 JS 编码,输出到 URL 要限制协议并 URL 编码。富文本不能自己写黑名单,应该用成熟清洗库。Cookie 设置 HttpOnly、Secure、SameSite,降低被盗风险;CSP 可以限制脚本来源,作为纵深防御。
10. 数据库提权
参考完整回答(数据库提权):
数据库提权一般是从数据库权限扩大到系统权限,或者从低权限数据库账号扩大到高权限账号。常见方式包括 MySQL UDF、select into outfile 写 WebShell、load_file 读取敏感文件、SQL Server xp_cmdshell、Oracle 高权限包滥用、弱口令和配置不当。
回答时我会先说明利用条件:数据库账号权限、文件写入能力、数据库运行用户权限、插件目录和目标系统类型。防护上要最小权限分配,业务账号不要有 FILE、SUPER、CREATE FUNCTION、xp_cmdshell 这类高危能力;数据库进程低权限运行;限制数据库访问来源;审计高危 SQL 和异常登录。
11. 怎么打Redis
参考完整回答(Redis漏洞):
Redis 常见安全问题是未授权访问和弱口令。如果 Redis 暴露在公网或内网可被攻击者访问,攻击者可能写入 SSH 公钥、写 WebShell、写计划任务,或者通过主从复制和模块加载达到命令执行。它本质上不是 Redis 单点漏洞,而是配置和网络暴露问题。
修复应包括:Redis 只监听内网或本机地址,不暴露公网;设置强密码和 Redis 6 ACL;rename 或禁用高危命令只是辅助;使用低权限用户运行 Redis;限制工作目录写权限;防火墙只允许业务主机访问;开启日志审计和异常命令监控。业务侧还要避免 SSRF 能直接访问 Redis。
12. 内网渗透
参考完整回答(内网渗透/横向):
内网渗透我会先确认当前落点的权限、网段、路由、DNS、域环境和出网情况。然后做低噪声主机发现和端口识别,重点关注域控、文件共享、数据库、中间件、运维平台和代码仓库。接着收集凭证线索,例如配置文件、历史命令、浏览器缓存、数据库连接串、共享目录和内存凭证;如果授权允许,再验证横向移动和权限提升路径。
防守视角我会补充:内网安全不能只靠边界防火墙,要做分区分域、最小权限、凭证隔离、禁用明文密码和本地管理员复用、开启 EDR、监控东西向流量、审计异常登录和远程执行行为。
13. 容器安全
参考完整回答(容器安全):
容器安全要从镜像、运行时、编排和宿主机四层看。镜像层要避免使用高危基础镜像、硬编码密钥和 root 用户;运行时要限制特权容器、hostPath、hostNetwork、SYS_ADMIN 等危险能力;Kubernetes 层要控制 RBAC、ServiceAccount token、API Server 暴露、etcd 访问和网络策略;宿主机层要及时更新内核和容器运行时。
容器逃逸通常依赖特权配置、危险挂载、内核漏洞、Docker socket 暴露或 K8s 权限过大。防护是最小权限、只读文件系统、seccomp/AppArmor、禁止特权容器、镜像扫描、网络隔离和审计异常容器行为。
14. k8s docker逃逸
参考完整回答(容器安全):
容器安全要从镜像、运行时、编排和宿主机四层看。镜像层要避免使用高危基础镜像、硬编码密钥和 root 用户;运行时要限制特权容器、hostPath、hostNetwork、SYS_ADMIN 等危险能力;Kubernetes 层要控制 RBAC、ServiceAccount token、API Server 暴露、etcd 访问和网络策略;宿主机层要及时更新内核和容器运行时。
容器逃逸通常依赖特权配置、危险挂载、内核漏洞、Docker socket 暴露或 K8s 权限过大。防护是最小权限、只读文件系统、seccomp/AppArmor、禁止特权容器、镜像扫描、网络隔离和审计异常容器行为。
15. linux、windows命令:过滤文件、查看进程环境变量
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
16. 站库分离怎么拿webshell
参考完整回答(文件上传/WebShell):
文件上传漏洞的风险在于攻击者上传脚本文件或伪装文件,最终让服务器解析执行。绕过方式可能包括双后缀、大小写、MIME 伪造、图片马、解析漏洞、条件竞争和上传路径可控。
完整修复我会这样做:后端使用扩展名白名单,只允许业务需要的类型;校验文件头和真实内容,不信任 Content-Type;上传后随机重命名,文件名不使用用户输入;上传目录放到静态资源域或对象存储,禁止脚本执行;图片类文件做二次处理;限制大小和数量;最后配合杀毒/内容检测和日志审计。Nginx/Apache/PHP-FPM 也要避免把非脚本目录交给解释器解析。
返回安全面经目录