尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

奇安信2019春招笔试题复盘:安全岗高频考点与答题思路

奇安信2019春招笔试题复盘:安全岗高频考点与答题思路 2019年那场春招奇安信笔试我印象挺深。当时我身边不少同学以为网络安全公司的笔试就是刷“安全工程师题库”结果一上来就被题目里的场景化问法打懵了。那一轮笔试考察的并不是简单的概念背诵而是安全服务、渗透测试、应急响应里真正会遇到的问题全部压缩成一张在线试卷。这篇文章不打算贴所谓的标准答案因为网上流传的版本本来就七零八落。我根据自己的回忆结合当年校招群里大家讨论出来的复盘版本把奇安信2019春招笔试题一涉及的题型、高频考点和答题思路完整梳理一遍。目标是帮准备走安全方向的读者建立一条清晰的复习线索同时也让你知道每道题背后对应的工作场景和影响范围。无论你是在校生还是刚转行想做安全这篇文章应该都能帮你少走一点弯路。1. 笔试到底在筛什么1.1 不是让你背答案是看你怎么分析问题奇安信的笔试题目有一个很明显的特征题目都会套上一个“已经发生了什么”的场景。比如一道选择题它不会直接问“SQL注入是什么”而是给你一段登录接口的代码让你判断存在问题。这种出题方式筛掉的是靠背题通过的选手留下的是真正理解攻击链路的人。我当时印象很深的一道题大意是给了一个PHP文件上传功能的代码片段选项里有“未校验文件类型”“文件名拼接路径时可目录穿越”“上传目录没有禁止脚本执行”等。很多同学只盯着“文件类型校验”这一个点却忽略了后面的路径拼接问题。那道题的正确思路应该是把文件上传一整个流程走一遍从哪里上传、存储到哪个目录、文件名怎么生成、上传之后能不能被解析执行。任何一个环节有疏漏都会导致完全不同的利用方式。所以准备笔试不要只记结论要习惯用“输入-处理-输出-影响”这条链去思考安全风险。这个思维在后面的编程题和场景分析题里基本上会反复出现。我把题目里“为什么这么问”当成第一件事来复盘后面再去拆具体知识点效率会高很多。后来跟一些做招聘的同学聊过他们也说笔试要看的往往是“分析路径”而不是那个最终结论因为最终结论在真实工作里可以查文档分析路径却只能靠自己攒。1.2 题型分布与时间分配建议根据当时的印象奇安信2019春招笔试题一大致分为三类客观题、主观场景分析题、在线编程题。客观题分布在最前面覆盖网络基础、Linux、数据库、Web安全基础主观题一般是给一段日志或代码让你写出漏洞成因、利用思路和修复建议编程题则是标准的在线编程平台模式会有用例判分。我建议的时间策略是客观题控制在总时长的35%以内不要在一道不确定的选择题上纠结太久主观题至少留30%因为这类题按点给分写得越完整越容易拿分最后剩下的时间全部给编程题哪怕只能过部分用例也要把暴力解法跑通至少不能交白卷。年份和具体题量我不保证完全准确但备考时按这个结构来分配是稳妥的。你可以把投递方向也考虑进去偏渗透的方向Web安全和系统安全权重更高偏研发的方向编程题和数据结构权重更高。我见过有人把大量时间花在记忆CVE编号上结果笔试里其实不考这种死记硬背的东西反而因小失大。时间花在哪里方向要对。2. 高频考点逐个拆解2.1 网络基础端口、协议、日志特征网络安全公司笔试考网络基础算是一种“行业惯例”。TCP三次握手、HTTP状态码、DNS解析流程、TLS握手过程这些几乎是必背内容。但奇安信的考法会加一层“安全视角”。比如同样的HTTP状态码它不会只考404代表什么而会问你“扫描器不断收到401/403说明目标可能做了什么防护”。这种题考的是对协议特征和访问控制机制的理解。端口映射也是一个高频点。SSH是22MySQL是3306Redis是6379Elasticsearch是9200这些数字在安全日志分析里天天出现。笔试里可能会给一段报警日志让你判断是Redis未授权访问还是MySQL弱口令爆破。看到端口和返回特征基本就能判断个八九不离十。我当年就是把常用端口和服务整理成一张表每天过一遍笔试时确实帮了大忙。还有一类网络题跟流量分析相关会让你从HTTP日志中找异常。正常日志的User-Agent比较杂但如果大量请求的UA都是同一个扫描器特征或者URL路径里包含常见的敏感目录就值得警惕。这种题与其说考协议不如说考能不能从日志里读出安全事件。如果你平时用过Wireshark或者tcpdump看到这类题目会觉得特别亲切因为本质就是把抓包分析搬到了试卷上。2.2 Web安全SQL注入、XSS、CSRF、文件上传Web安全在整张试卷里的占比很高。这跟实际工作有关不管是攻防还是防护Web漏洞都是最常见的突破口。SQL注入要理解本质是“数据被当成代码执行”因为开发者把用户输入直接拼进SQL语句。修复手段不是简单“过滤关键字”而是参数化查询把数据和SQL结构分开。MyBatis里#{}和${}的区别本质上也是这个原理。XSS考的更多是分类和利用场景。反射型、存储型、DOM型的区别以及各自的危害范围都要能说清楚。这里容易丢分的地方是“影响范围”的描述。很多人只写“弹个窗”但阅卷人想看到的是“存储型XSS会把恶意脚本持久化在服务器上访问该页面的用户都会被影响可能造成会话劫持”。把这个描述完整分数自然就上去了。CSRF相对容易被忽略但笔试里也出现过。核心是“浏览器会自动携带Cookie”服务端无法区分这个请求是用户主动发起的还是恶意页面借用户的身份发起的。防御思路主要有三种校验Referer、加CSRF Token、关键操作二次确认。答题时把这三条写全基本不会失分。文件上传是另一个笔试常客。题目一般会给一个上传接口的代码问你存在什么问题。你至少要能讲清楚几个关键检查点扩展名是否做白名单校验、文件内容是否校验了文件头、存储目录是否禁止脚本执行、上传后的文件名是否随机生成。这几点对应了不同的攻击路径写全才能拿高分。我自己在准备这部分时会把每一个漏洞点都配一个“如果我是攻击者我怎么利用”的脑图反向记忆印象特别深。2.3 加密与编码识别套路比会写算法更重要加密相关题目在2019年的笔试里不算难但坑很多。比如给你一串“5L2g5aW9”选项里有MD5、Base64、URL编码、SHA-1。看到结尾的“”和字符集范围就能判断是Base64但很多同学一看到密文就慌了。我当时是先把常见编码的特征记下来Base64由大小写字母、数字、 /组成长度是4的倍数经常有填充URL编码是%后跟两位十六进制十六进制是0-9和a-f。另一个高频坑是“哈希是不是加密”。MD5、SHA-1、SHA-256都属于哈希算法不可逆AES、RSA属于加密算法可逆。笔试里经常有人混淆。题目如果问“用户密码在数据库里存储使用MD5是否安全”只回答“MD5不可逆所以安全”是不完整的。因为弱口令可以被彩虹表反查所以要加盐并选择更合理的密码哈希方案。这类题背后的工作场景是日志分析和应急处置。你在日志里看到一串可疑参数首先要能判断它是编码混淆、加密数据还是普通参数后面才能决定要不要解码、怎么分析。所以笔试考编码识别不是单纯为了为难你。我复习时会把Base64解码和URL解码这几个常用操作练到形成肌肉记忆因为工作里真的会频繁用到。2.4 系统权限与主机安全安全岗笔试基本不会绕过系统基础。Linux文件权限、用户和组、SUID位、环境变量、计划任务这些都可能出题。我记得有一道题是问“Web服务以root权限运行存在什么风险”。答案是一旦Web应用被攻破攻击者拿到的就是root权限后续提权步骤都不需要了影响范围等于整个服务器。正确的做法是给服务单独建一个用户只授予它需要读取的目录和文件权限。进程监听端口也要尽量不用1024以下的特权端口除非确实有需要。这类题考察的是最小权限原则笔试里可以用一个反向问题来检验理解程度假如一个WebShell成功落地但服务运行在低权限用户下攻击者能碰哪些东西想清楚这个你对权限的理解就会扎实很多。Windows方向也可能出题比如自启动目录、注册表Run键、服务权限配置。如果目标岗位偏终端安全这些内容占比会更高。我备考时把Linux和Windows的常见提权路径各自整理成一张表不背细节只记风险点因为笔试关注的是“你知不知道这里可能有问题”而不是“你能不能复现提权exp”。2.5 安全运营与日志分析题除了漏洞利用奇安信这类安全厂商也很重视安全运营能力所以日志分析题在笔试里出现的概率不低。核心考点是给你一堆系统日志、应用日志或流量日志让你找出异常并判断原因。比如同一IP在短时间内对多个账号尝试登录题目会问“这是什么行为该怎么处置”。回答这类题要先定位异常特征时间维度上有没有集中爆发源IP是否单一目标是否集中在某个接口返回状态码有没有规律。描述清楚这些再给出处置建议封禁来源IP、通知业务侧确认账号安全、增加登录频率限制、对已经登录的会话做失效处理。这套回答逻辑我在笔试里用过很多次基本能覆盖大多数日志分析题。安全运营题最忌讳的就是只回答“封IP”三个字。阅卷人希望看到你有没有“检测-响应-处置-加固”的完整闭环意识。哪怕你写的步骤很简单只要你把这个流程走完分数就会明显不一样。这也是我在整理这份复盘时最有收获的一点。3. 几道典型题的完整复盘3.1 流量日志分析识别SQL注入尝试当时笔试里有一道题给了一段HTTP访问日志里面有几个POST请求请求参数长这样192.168.10.7 - - [01/Mar/2019:10:15:23 0800] POST /login.php HTTP/1.1 200 5261 - Mozilla/5.0 192.168.10.7 - - [01/Mar/2019:10:15:26 0800] POST /login.php HTTP/1.1 200 5380 - Mozilla/5.0 usernameadmin OR 11password123456题目问判断请求是否存在攻击行为说明判断依据和处理建议。我看到这个参数的第一反应就是SQL注入尝试。判断依据有三个参数值里出现了SQL关键字OR和恒真表达式单引号打破了原有SQL语句结构登录场景下这种输入极大概率是在尝试绕过认证。如果有返回包还可以补充判断依据请求返回的长度异常、响应状态码变化、数据库报错信息等。处置建议要从两个角度写一是临时防护在网关或WAF上封禁来源IP并对登录接口增加频率限制二是根治修复代码里改用参数化查询把用户名和密码作为参数交给数据库预编译而不是拼接进SQL语句。影响范围要写明如果注入成功可能造成登录绕过、用户数据泄露甚至通过数据库写文件能力进一步控制服务器。这种题不需要多么高深的知识但回答要完整按“发现-判断-影响-处置”四步走把你看到的现象、依据和后续动作都写出来。即使判断错了方向只要逻辑清晰多少也能拿到分。当时群里好几个人讨论说自己只写了“存在SQL注入建议修复”一句话就结束了。这种回答太单薄阅卷人根本看不出你懂不懂原理。3.2 代码审计从参数拼接到预编译代码审计题是奇安信笔试里比较有区分度的题型。给我印象最深的是这么一段简化代码?php $id $_GET[id]; $result mysql_query(SELECT * FROM users WHERE id $id); while ($row mysql_fetch_assoc($result)) { echo $row[username]; } ?虽然是很老的写法但思路可以套用到任何语言。第一眼看代码先找外部输入$_GET[id]。接着看数据流向这个变量直接拼到SQL语句里没有任何过滤或类型校验。最后看执行点mysql_query执行了这条语句。三步走下来SQL注入的判断就很明确了。修复方案怎么写至少给出两层第一层是参数化查询用PDO预处理把$id作为参数传入第二层是输入校验比如is_numeric判断id是否为数字或者按业务规则做白名单校验。答题时把两层都写比只写一句“过滤单引号”要专业得多。这段代码对应的工作场景是旧系统改造和安全审计。你去审一套老代码经常能看到mysql_query这种写法不可能直接推倒重来只能在现有基础上用最小改动降低风险。笔试里考代码审计本质上是在模拟这个场景。我当时复习的做法是每天看5段有漏洞的代码先自己找问题再对照修复方案。看得多了代码里的危险点基本一眼就能扫出来。3.3 编程题IP合法性校验与日志统计在线编程题里我遇到过的题型包括字符串处理、数组、基础数据结构。有一道题很典型实现一个函数判断传入的字符串是否是合法的IPv4地址。这题本身不涉及安全但很考验边界处理跟安全日志处理密切相关。import re def is_valid_ipv4(ip: str) - bool: if not ip or len(ip) 15: return False parts ip.split(.) if len(parts) ! 4: return False for part in parts: if not re.fullmatch(r\d{1,3}, part): return False if len(part) 1 and part[0] 0: return False num int(part) if num 0 or num 255: return False return True这道题容易漏的点有几个字符串为空、包含非法字符、分段数不是4、某段超过255、前导零问题。比如“01.2.3.4”算不算合法不同题目要求不一样题目通常会说明如果没有说明我倾向于按严谨格式判False。边界条件全考虑清楚代码才算稳。另一类编程题更贴近安全运营给一段日志文件要求统计每个IP出现的次数输出Top10。核心就是用正则把IP行提取出来再用字典或defaultdict计数最后排序。先写一个能跑通的版本再考虑日志文件很大时如何流式处理不至于一次性读入内存。笔试平台限时代码不一定最优但必须保证逻辑正确、能跑出结果。我的经验是编程题平时刷LeetCode的简单到中等题就够但一定要自己手写不能只看题解。因为在线笔试的判题环境对缩进、函数签名、输入输出格式要求很严格平时不练考场上很容易因为小问题拿不到分。3.4 安全配置题Redis未授权访问笔试里还有一类题目不给你代码给你环境配置让你判断风险。最典型的就是Redis未授权访问。题面可能简化成这样一台服务器的Redis服务监听在0.0.0.0:6379没有配置密码也没有设置protected-mode问有什么风险。这道题考察的知识点很集中Redis默认只监听本机回环地址如果修改成公网或内网全网段监听并且没有设置认证外部主机可以直接连接并执行命令。结合Redis自身的功能攻击者能往web目录写WebShell、写计划任务、修改配置影响范围不光是缓存数据还可能扩散到整个主机。修复建议包括设置密码、开启protected-mode、监听内网地址、不要用root权限运行Redis服务。我把它单独拿出来复盘是因为很多人复习时只关注Web漏洞却忽略中间件和数据库配置。奇安信笔试既然考了这类题目说明安全厂商确实看重“基础安全配置”这一块。你在回答时如果能补充一句“需要先判断Redis进程用什么权限运行”会让阅卷人觉得你考虑到了权限维度印象分会明显提升。4. 最容易被扣分的坑4.1 时间分配策略我在前面说过客观题不要恋战这里再展开讲讲具体的坑。我当年做客观题时遇到一道关于Linux权限的题犹豫了很久结果后面编程题时间不够最后一道题只写了个半成品。后来复盘发现那道权限题就算做对了也就1到2分但编程题半个题的分值远高于它。两相对比非常不划算。进答题页之后建议先把全部题目快速扫一遍题目分值一般会标注没有标注的话就从主观题和编程题的分值反推。先做自己确定能拿分的题主观题就算不确定也要写思路至少要把“漏洞点-利用效果-修复建议”这个框架填满。只要框架在阅卷人大概率会给你过程分。在线笔试平台通常不允许切屏所以提前把草稿纸、IDE、文档准备好很有必要。不过笔试过程中的操作规范也要注意我在校招群里看过有人因为频繁切屏被判违规虽然不知道具体原因但可能跟平台监控有关。环境干净一点对自己只有好处。4.2 常见答题误区第一个误区是“答得太短”。主观题只写结论不写过程。比如“有什么风险”只写“严重”却不说明被攻击后会造成什么影响。你得把攻击者拿到什么权限、能读到什么数据、对业务有什么影响串起来才能体现你真正理解了风险。第二个误区是“修复方案太笼统”。写“加强输入过滤”不如写“使用参数化查询并对上传文件扩展名做白名单校验”。阅卷人看的是可落地性。面试官在后续追问中也一定会问“具体怎么改”如果你笔试和面试回答不一致会非常减分。第三个误区跟编程题有关不测异常输入。很多同学写完代码只跑正常用例提交之后才发现边界条件没处理。比如IP合法性那道题空字符串和超长字符串是常见隐藏用例。平时练习就养成补边界测试的习惯考试时会省很多冤枉时间。第四个误区是忽略“影响范围”的描述。安全岗位最核心的能力之一就是评估影响范围。一道题问“这个漏洞有什么危害”你不仅要答“命令执行”还要说明执行权限是什么、能访问到什么数据、是否可能横向移动。对这些有意识才说明你有实战视角而不是只会背书。4.3 笔试结束后如何复盘和准备面试笔试不是交卷就结束了尤其对安全岗来说笔试题目往往就是面试提纲。你写了“使用预编译修复SQL注入”面试官大概率会追问预编译的原理是什么MyBatis的#{}和${}有什么区别Join查询和子查询在预编译下有没有例外情况这些东西必须在笔试结束后马上整理成一套自己能讲清楚的版本。我建议做一个“为什么”清单。每一道做过的题都往下问三个为什么。比如Web服务为什么要用普通用户运行因为最小权限最小权限具体怎么落地给服务单独建账号、目录权限按需分配、限制Shell登录那如果这个账号被攻破攻击者能干什么能读服务数据但改不了系统文件提权还需要找新漏洞。能把这个链条讲清楚面试基础关基本就过了。安全行业变化快2019年的题目和现在的题目肯定有差异但考察的能力模型没有变懂协议、懂漏洞、懂权限、懂编码还要能写代码。把这些基础能力夯实不管题目怎么变你都能接得住。我个人在整理这份复盘时最大的体会是笔试最大的价值不是那张分数而是逼你把零散的知识串成体系。把每个考点当成一个锚点往外延伸出原理、场景、修复方案这套复习方法我后来推荐给好几个朋友效果都还不错。希望这篇关于奇安信2019春招笔试题一的复盘也能帮你把复习思路理清楚。
返回列表