
我从头到尾把奇安信2019春招安全试题“拆”着看了一遍。很多人对这套题的第一反应是去网上找原题、背答案但我更建议你换个角度搞清楚它到底在测什么比会做某一道题重要得多。这套题虽然是早些年的老题里面的底层考点直到今天依然是安全岗位笔试的“基本盘”。这篇文章我按自己的复盘思路把题目背后的考点、解题逻辑和复习方法完整梳理一遍不管你是准备校招还是想转岗做安全都能直接照着用。1. 先想明白一份安全岗笔试到底在考什么1.1 安全工程师的真实能力模型很多人在准备安全岗笔试时有个误解觉得笔试就是考“会不会打”。其实不然。厂商的安全岗位通常分好几类渗透测试、安全研究员、安全开发、应急响应、安全运营。这几类岗位对技能的要求有明显差异但笔试里会重合考察一些底层能力因为它们背后都是同一个模型第一是漏洞原理理解能力。你不仅要知道某个漏洞“存在”还要能解释它为什么存在。比如SQL注入不是因为程序员拼接字符串而是因为用户输入被当作了代码执行。题目会绕几个弯来考察你是不是真懂。第二是工程化排查能力。给你一段日志、一个流量包、一个系统状态你能不能快速定位问题。这考的不是记忆而是你有没有真正做过事。很多题目看着像“分析题”实际就是把你丢到一线环境里看你有没有基本操作手感。第三是安全编码和修复能力。笔试里经常会出现“请写出修复方案”这种题。很多人只会报漏洞不会说怎么修这在面试官眼里就是个半吊子。能发现问题只是第0.5步能给出合理的修复建议才算闭环。第四是综合逻辑能力。安全本质上是一场持续对抗题目往往设计成“你发现了一个可疑点下一步你查什么”考察你思路是否完整、是否按攻击链推进。所以准备这套题时不要只盯着“某道题的答案”而要盯住自己在这四层能力上有没有短板。1.2 为什么老题今天依然值得刷有人会觉得2019年的考卷技术早就更新迭代了刷它还有什么意义这是对安全行业的一个误解。安全笔试和前端笔试不一样它考的不是最新框架API而是那些不会轻易过时的“底层知识”——HTTP协议、Web应用漏洞原理、操作系统权限模型、加密算法思路、日志分析手法。你看这些年爆出来的严重漏洞本质上还是SQL注入、反序列化、命令执行、逻辑绕过这些东西换了个壳。2019年考的逻辑放到今天的实战场景里依然成立。刷老题的目的不是背答案而是通过这些题目建立一套“安全思维”的底层框架。框架一旦建立今后不管题目包装得多新你都能快速拆解到骨架上。再说句实在话厂商的题库都是长期沉淀出来的有些经典题目改动幅度很小只是换了场景和参数。把这些老题吃透等于提前做了几套“高仿模拟卷”。2. 核心考点逐个拆Web安全与代码审计2.1 注入类问题从SQL注入到命令注入的底层逻辑Web安全在奇安信这类安全厂商的笔试题里占据绝对大头而注入类问题又是Web安全里的“常青树”。我先说底层逻辑。SQL注入的本质是“数据与代码的边界被打破”——用户输入的数据被拼接进了SQL语句并作为SQL代码被数据库执行。笔试题目会从三个层次来考第一层是识别漏洞。给定一段代码让你找出哪里能注入、用什么姿势注入。这类题的关键是找“输入点”和“拼接点”。比如$id $_GET[id]; $sql SELECT * FROM users WHERE id $id;只要用户能控制id参数并且它被直接拼进SQL语句这就是一个注入点。你至少要知道经典的判断方式1 AND 11 1 AND 12如果两个请求返回结果不同基本可以确认存在注入。笔试不一定要求你真的去打一个站但会要求你把这种判断逻辑写在解决方案里。第二层是利用方式。你不能只会报“存在注入”得说清楚它有什么危害。这包括万能密码绕过登录 OR 11 --、通过UNION SELECT拖库、通过报错信息提取数据库结构、甚至在某些场景下直接写入文件。很多考生只会背payload却不理解为什么--是注释符、为什么UNION要保证列数一致。这一层卡住了很多人。第三层是修复方案。这个我最想提醒你笔试里特别爱考修法。最稳妥的回答是三层首选参数化查询预编译语句让SQL指令和数据彻底分离其次做严格的输入校验和类型转换比如id必须为整数用intval()强制转换最后是数据库权限最小化应用账号不该用root连接。命令注入的思路和SQL注入是一样的只是目标从数据库变成了操作系统。很多题目会让你从一段PHP代码里找命令注入点system(ping -c 3 . $_GET[ip]);这题就是在考你有没有意识到127.0.0.1; whoami会被拼进系统命令并执行。修复原则同样是尽量不用system()、exec()这类函数执行外部命令如果真的需要必须对输入做白名单校验只允许IP地址和少量合法字符。2.2 文件上传与路径遍历最容易被忽略的丢分点文件上传在笔试里几乎是必考项而且它的坑远比想象中多。有些题目会给一段简单的上传代码move_uploaded_file($_FILES[file][tmp_name], upload/ . $_FILES[file][name]);第一反应当然是文件名可控可以上传恶意脚本。但笔试真正想考的是一整套“攻防博弈”常规思路改后缀为.php直接上传WebShell。绕过思路如果后端只检查后缀黑名单就可以尝试.php5、.phtml、.php.jpg这种双后缀如果检查了Content-Type就尝试用image/png伪造如果前端限制后缀就绕过前端直接发HTTP请求。图片马思路把恶意代码藏在图片文件末尾再结合文件包含漏洞触发执行。修复方案也要成体系文件后缀用白名单而不是黑名单。重命名上传文件不允许用户控制存储路径和文件名。文件存储目录与Web根目录分离禁止直接访问。对图片文件做二次渲染去除可能夹带的可执行代码。使用对象存储或者OSS从架构层面减少Web层风险。再单独说路径遍历。这个漏洞在热词里出现了说明是高频考点。它长这样$file $_GET[file]; include(pages/ . $file);如果file传../../etc/passwd就能越过pages/目录读取任意文件。笔试常问的“如何防护”答案里有几个层次对传入路径做规范化处理解析掉../后再校验白名单限定只能访问指定目录下的文件对文件名做basename()或realpath()校验确保解析后的路径在允许范围内。这类题目不难但细节多丢分非常可惜。我在实际面试别人时发现很多候选人能把SQL注入讲得头头是道一遇到文件上传和路径遍历就语焉不详说明平时练得少只在靶场里优先刷了“看起来最热门”的漏洞。2.3 XSS、CSRF和SSRF三个“兄弟漏洞”的区分大法这三个漏洞在概念上经常混笔试也喜欢出“判断题”或“对比题”来区分你到底懂不懂。我推荐一个简单的记忆法XSS可存储、可反射、可基于DOM核心是“恶意脚本在受害者浏览器里执行”。它的危害不是“打服务器”而是“打用户的浏览器”。所以考题中一旦出现评论框、搜索框、昵称修改这些功能你就要警觉潜在XSS点。修复思路也很明确输出编码、输入校验、设置Content-Security-Policy。CSRF的核心是“借刀杀人”——攻击者借用受害者的登录身份向服务器发起请求执行增删改操作。关键点在于服务器无法区分这个请求是不是用户真实意愿发出的。修复方案就围绕这个点展开加不可预测的CSRF Token校验Origin和Referer头对敏感操作做二次验证。SSRF则是“服务端请求伪造”——服务器端发起的请求被攻击者控制导致内网资源被探测和访问。题目一般会给一个“图片抓取上传”或者“URL转码预览”的功能让你分析风险。比如$url $_GET[url]; $content file_get_contents($url);这就是典型的SSRF。修复核心是限制请求目标DNS解析后校验IP是否在内网段、禁用重定向、限制协议为http/https、关闭不必要的内网访问能力。如果你想在笔试里拿高分不要只背三者的定义要用一张表把它们的关键特征列出来漏洞攻击源头受害者核心危害关键修复XSS恶意脚本浏览器用户窃取Cookie、篡改页面输出编码 CSPCSRF恶意站点已登录用户伪造请求执行操作Token Origin校验SSRF服务端自身服务器探测内网、读取本地文件URL白名单 IP校验这套对比逻辑比死记定义有用得多答题时按“攻击者-受害者-成因-修复”串起来面试官一听就知道你理解到位了。3. 安全笔试里的硬骨头密码学、系统与协议3.1 密码学题目不是靠背公式而是理解设计意图密码学在安全笔试里的占比不小但很少真的让你手算复杂的数学公式。大多数题目考的是理解。比如哈希加密和对称加密有什么区别为什么密码不能直接明文存储而要加盐哈希数字签名和消息认证码MAC的区别在哪我见过不少考生能把AES、RSA、MD5这些词背得很熟但一被问到“登录密码忘了为什么系统不能把原密码还给我”就懵了。这道题其实就是哈希单向性和不可逆性的概念。答的时候要展开说密码存储不能用可逆加密因为数据库一旦泄漏攻击者可以直接还原所有明文密码正确的做法是用带盐的强哈希算法如bcrypt、argon2、PBKDF2每个用户都有独立随机盐加盐的作用是防止彩虹表预计算攻击即使两个用户密码相同因盐不同哈希值也不同攻击者无法批量破解。对称加密和非对称加密的对比也是一道经典送分题。答题框架建议是密钥数量、加解密速度、密钥分发难度、典型算法AES vs RSA、典型应用场景HTTPS里两者结合使用。如果题目给了一个具体场景比如“如何加密HTTP通信”你要知道HTTPS实际方案是用非对称加密协商对称密钥再用对称加密进行数据传输因为性能差异太大非对称加密不适合全程加密大量数据。数字签名和MAC的区别在概念上更抽象我建议从“公钥/私钥”和“消息认证”两个方面回答数字签名用私钥签名、公钥验证具有不可否认性MAC使用共享密钥提供完整性校验但不具备公开验证的能力。能区分这两点笔试里遇到基本不会扣分。3.2 系统安全权限模型、提权思路和日志排查安全笔试不只是Web系统安全题也很常见尤其是涉及Linux的题目。这类题对做过运维或者平时习惯用命令行的人来说不难但纯Web方向的考生容易栽。权限模型是必考内容。你要能说清楚Linux文件权限的三组身份属主、属组、其他和三类权限读、写、执行还要理解SUID、SGID、Sticky Bit这几个特殊位。尤其是SUID面试官最爱考“为什么需要小心SUID程序”——因为普通用户执行SUID程序时会临时获得属主权限一旦程序本身存在漏洞就可能被用来提权。提权思路也是高频题。比如拿到一个WebShell怎么从www-data用户提权到root回答可以从以下几个方面铺开查看系统发行版和内核版本确认是否存在已知内核漏洞检查SUID文件寻找可利用的异常SUID程序查看sudo -l确认当前用户有哪些特权命令检查环境变量和定时任务看有没有可劫持的脚本查找敏感配置文件数据库密码、私钥文件往往是突破口。日志排查题则更偏向“给你一段日志找攻击痕迹”。典型套路是先确认日志时间范围再搜索常见的攻击特征如union select、../、/etc/passwd、扫描器指纹、异常状态码403、500大量出现、异常大小请求包。这题不一定要求你当场抓出所有攻击但它考察你有没有“从日志中还原攻击链条”的经验。3.3 网络协议与常见攻击面网络协议题目一般不会太偏但HTTP协议的基础知识是安全笔试的“默认前提”。比如HTTP和HTTPS有什么区别Cookie的HttpOnly、Secure、SameSite属性分别解决什么问题三次握手和四次挥手到底怎么发生的这些看起来像网络基础其实和安全强相关。Cookie的HttpOnly属性在安全笔试中几乎必考。它能防止JavaScript通过document.cookie读取Cookie直接削弱XSS窃取会话的危害。Secure属性要求Cookie只能在HTTPS请求中发送防止明文传输被截获。SameSite属性则用于缓解CSRF攻击。这三个属性背后的原理各对应一个经典漏洞复习时建议对着漏洞一起记。端口扫描的常见服务也需要掌握22端口对应SSH、80/443对应HTTP/HTTPS、3306对应MySQL、3389对应Windows远程桌面、6379对应Redis。笔试常给一个装有异常服务的服务器让你判断哪些端口暴露有风险。这在真实安全评估里叫“攻击面梳理”答题时要按“端口-服务-潜在风险-加固建议”四步展开。4. 典型题型实战从题目语境到解题思路4.1 给定一个被入侵的网站如何还原攻击路径这类综合题是安全厂商笔试里最能拉开分差的题。题目通常只给一个背景描述网站被挂马了首页被篡改让分析是怎么进来的。我的答题框架永远是四段式入口识别、权限获取、持久化驻留、痕迹清理。先说入口识别检查Web访问日志重点看有没有扫描痕迹、异常参数、可疑UA以及非业务时段的访问记录。然后看敏感接口的上传记录确认是不是通过文件上传获取得WebShell。权限获取则要推断拿到WebShell之后攻击者有没有进一步提权比如通过内核漏洞或者错误配置接管服务器。持久化驻留要看启动项、定时任务、Web后门文件、/etc/ld.so.preload这类隐蔽位置。最后看清理痕迹攻击者可能删除或混淆日志。这套框架不仅能帮你答好笔试题放到真实应急响应场景里也直接能用。面试官要见的不是一句“应该是被上传了WebShell”而是你的思路有没有覆盖完整攻击链。4.2 一段异常流量日志怎么分析流量日志分析题通常给一堆访问记录让判断哪些属于恶意请求。我拿到题不会一条一条看而是先做聚合统计哪个源IP请求次数最多是不是在短时间内高频请求同一路径这大概率是扫描。哪个路径被反复访问但状态码异常比如/admin大量401可能是暴力破解。有没有明显的漏洞探测特征/etc/passwd、.git/config、phpinfo.php、..%2f这种路径都是明显的攻击信号。请求参数里有没有闭合符号、、--、union、select都是注入探测线索。笔试答案不需要写成复杂报告但要有层次先描述异常现象再给出判定依据最后提出下一步排查方向。比如发现大量包含../../etc/passwd的请求可以判断为路径遍历扫描需要检查Web服务器版本是否存在对应漏洞以及是否有历史请求已经成功读取了敏感文件。4.3 综合场景题从外网入口到内网横向移动还有一类题是把安全测试的完整过程浓缩成几段描述让考生复现思路。常见题型比如某企业授权你测试一个Web系统发现一处命令执行漏洞接下来你如何评估风险内网中有一台数据库服务器如何判断是否可被进一步访问答题时不要东一句西一句要按步骤走。我会这么答第一步判断当前命令执行环境权限。执行id拿到当前用户执行cat /etc/issue看系统信息确认是否在Docker容器里。记住容器内的命令执行和宿主机是完全两码事很多漏洞打下来卡在容器层提不了权。第二步利用当前权限做信息收集。读取Web config拿到数据库账号密码查看本机网络连接和ARP缓存寻找内网网段。第三步评估数据通道。如果当前机器能连通数据库3306端口尝试凭证复用如果无法外连可能要借助内网代理建立跳板。但笔试答题不用真上工具你只需要说清楚思路如何判断连通性、为什么要做端口转发、数据库权限如何控制。第四步收敛和修复。测试结束后如何恢复现场、如何删掉自己留下的后门、如何给开发列出修复清单。这部分特别加分因为它体现的是职业素养而不是攻击能力。5. 一份能落地的复习路线与避坑清单5.1 三个月复习路径基础、刷题、模拟三阶段先说实话三个月是从零到笔试及格的最低配。如果你想冲高分时间至少要砍掉一半用来实操。我把复习分成三阶段第一阶段第13周补底层知识。重点啃HTTP协议、Web漏洞原理OWASP Top 10逐条过、Linux基础命令和权限模型、密码学基础概念。这个阶段不要急着刷题遇到不懂的原理先看书或靶场手动复现一遍。推荐从DVWA、WebGoat这类开源靶场开始它们对新手非常友好而且题目场景跟厂商笔试题很接近。第二阶段第49周按模块刷题并整理错题。每刷一个模块写一篇几百字的复盘笔记内容包括漏洞原理、触发条件、复现步骤、修复方案、典型案例。这个过程看起来慢实际上是最快的路径。笔记就是你的答题素材库笔试时候直接提取。同时开始接触真实HTTPS流量分析、日志分析、简单应急响应场景培养工程手感。第三阶段第1012周做模拟卷和限时训练。这个阶段最重要的不是正确率而是节奏。安全笔试时间一般很紧张有些论述题要写几百字分析不提前练手速很容易写不完。模拟做题时要逼自己“先写框架再补细节”避免在一道题上死磕。5.2 一套好用的答题模板和现场时间分配答题模板是我最想分享的实战经验。安全笔试的很多题其实是“半主观题”不要求唯一答案而是看逻辑是否清晰。我建议养成“结论先行、过程分段”的答题习惯。不管遇到什么题先用一句话给出判断再分步骤解释。比如判断该处存在SQL注入漏洞。 依据id参数直接拼入SQL语句未做任何过滤和参数化处理。 验证输入1 and 11页面正常输入1 and 12页面异常说明参数可以被带入SQL执行。 危害可能导致数据库内容泄露、数据被篡改。 修复改用预编译语句绑定参数禁止字符串拼接。这种结构既清楚又专业。阅卷的人看到“依据-验证-危害-修复”四层结构印象分会明显提高。时间分配上我的经验是先做会做的再啃难啃的。笔试经常出现一道题占地很多分数但不一定会做千万不要一上来纠结它。先把能稳定拿分的题目写完再回头啃难题。5.3 我踩过的坑和“捡分”技巧最后说几个我在实际准备和带新人过程中反复看到的坑。第一个坑是只看不练。很多人把刷题等同于“看答案”看完觉得自己会了真到笔试时写不出一句完整分析。安全笔试是写出来的不是想出来的。复习阶段再简单的题也要动笔把分析写完整。第二个坑是忽略修复方案。我发现至少一半的候选人能说出漏洞原理但问到“怎么修”就支支吾吾。笔试是一个很好的提醒安全不只是发现漏洞更是闭环整改。你会写修复方案这个能力比多会一个payload值钱得多。第三个坑是堆砌专业词汇但不成体系。比如看到“XSS”就把能想到的相关词全倒出来没有逻辑线。答题时宁可用大白话把思路讲清楚也不要堆一堆自己都没吃透的概念。阅卷人最怕看到那种“每个词都对但连不成句”的答案。再分享一个“捡分”技巧凡遇题目涉及安全防护、加固方案尽量按照“架构层面-代码层面-运维层面”三个维度来答。即使你记不全所有细节这个框架也能帮你多拿不少分。比如问“如何防止文件上传漏洞”你可以说架构上把存储和Web分离代码上用白名单校验后缀并重命名文件运维上做WAF规则和访问审计。三个层面一套答案立刻就完整了。这套“老题”真正值钱的不是题目本身而是它逼着你去建立一套成体系的安全认知。我当年就是靠这样一套复盘思路啃下来的现在带新人做安全笔试辅导也还是这套打法。你把底层框架搭扎实了后续无论是考其他厂商还是做真实安服项目都会顺很多。