尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

奇安信校招笔试题解析:网络安全基础与Web安全实战

奇安信校招笔试题解析:网络安全基础与Web安全实战 随便聊聊2019年奇安信校招笔试题二这套东西。如果你正在准备网络安全方向的校招或者打算往安全行业里钻这套题很值得拿来做一次系统的自检。它不像刷LeetCode那样考纯算法也不像学校的期末考试那样背概念而是把网络基础、Web安全、Linux实操、密码学、编程能力全部捏在一起考的是你有没有真正站在安全从业者的角度去思考问题。先说清楚这套题的定位。奇安信当年校招笔试题二面向的主要是两类人一类是安全技术岗包括安全研发、安全分析、渗透测试方向的应届生另一类是想转行进入安全领域的非科班同学。题目的难度并不是那种“劝退级”的但它有一个很明显的特征——覆盖面极广每个方向都会挑几个最核心的知识点来考而且很多题目看起来很基础真正做起来你会发现自己在某一个模块上存在明显的知识盲区。所以哪怕你不是要应聘奇安信这套题作为安全基础能力的摸底也非常有参考价值。1. 笔试考察思路与整体布局1.1 这套题想选拔什么样的人先把思路理清楚。企业出笔试题从来不是为了考倒你而是为了在最短时间内筛选出具备基本职业素养的人。2019年奇安信的校招笔试尤其是这套“二卷”整体风格明显偏向基础深入型不考偏难怪而是把每个方向最常接触的知识点挖到底。举个例子同样考HTTP协议普通学校期末考试可能只问你“GET和POST有什么区别”而这套笔试题里会直接给你一段抓包数据让你判断请求头里哪些字段存在安全隐患或者让你结合服务端日志分析一次完整的攻击链路。这就是典型的安全岗位思维——不是让你背协议而是让你学会在读流量、看日志时发现问题。从题型分布上看这套卷子基本可以分成四大模块网络安全基础协议、加密、认证、安全模型Web安全攻防OWASP Top 10相关渗透思路防御手段Linux与系统安全命令实操、权限管理、日志审计、常见服务加固编程与算法逻辑Python为主外加部分数据结构和逻辑推理说实话这样的布局和今天绝大多数安全公司校招笔试的架构是高度一致的。原因很简单安全工作本质上是一门“对抗性”的技术而对抗的基础是通识能力。如果你连TCP三次握手都说不清楚连Linux基本命令都不熟悉连一段简单的Python脚本都写不出来后面的渗透测试、漏洞分析、安全运营根本无从谈起。1.2 时间分配与做题策略我见过不少同学在笔试时犯同一个错误在某一两道难题上死磕结果后面的送分题没时间做。这套题虽然整体难度不算高但题量不小而且各个模块之间切换频繁所以临场的时间分配非常关键。我的建议是这样的先快速扫描全卷按“基础题→Web题→Linux题→编程题”的顺序答题因为基础题往往是最熟悉、得分最稳的部分。遇到卡壳的题目先用30秒判断“这是知识点没掌握还是题目理解有歧义”。如果是前者直接跳过不要犹豫如果是后者多读两遍题往往能发现题目里偷偷埋了提示。编程题宁可写得慢一点也要保证思路清晰。安全岗的编程题不会变态到让你手写红黑树更多是考察用脚本解决实际问题的能力比如处理日志文件、解析网络数据包、暴力破解某个简单加密逻辑。整体来说这套卷子要的不是“天才型选手”而是“基本功扎实、遇到问题能稳住心态”的人。2. 网络安全基础题别在送分题上丢分这个模块是整张卷子里最容易拿分、但也最容易翻车的地方。很多科班同学觉得自己网络基础学得不错结果一看题发现考的不是“TCP/IP有几层”而是实操场景里的协议特性。2.1 网络协议层考点在2019年奇安信这套笔试题里网络协议方向的题目主要集中在TCP、HTTP、DNS这三个点上。先说说TCP。这里不会直接问你“三次握手是哪三次”而是会结合安全场景来问比如“SYN Flood攻击利用的是TCP协议的哪个机制为什么这个机制会导致服务不可用”这个知识点其实很经典。SYN Flood利用的是TCP三次握手中的“半连接”机制——攻击者发送大量的SYN报文但不完成第三次握手导致服务器维护大量半连接队列资源耗尽后无法响应正常用户的请求。答题时不能只说“利用三次握手”要展开说明服务器收到SYN后会分配一块内存、进入SYN_RECV状态并把连接加入半连接队列。攻击者不回应ACK这些连接会一直占用资源直到超时。如果攻击速率远超服务器回收速率队列会被塞满新来的合法SYN直接被丢弃。再比如HTTP。这套题里HTTP的考点很常见我记得有一道和“HTTP请求走私”相关的题目——当然2019年时这个概念还不像现在这么火当时更偏重的是“从HTTP日志中识别SQL注入攻击的特征。”这类题的核心是看你对HTTP请求结构的敏感度。正常的GET请求格式是GET /product?id123 HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 ...而SQL注入攻击的请求往往会在参数里带有多余的单引号、UNION关键字、注释符--、#甚至还会把一些敏感的HTTP头藏进去GET /product?id1 UNION SELECT username,password FROM users-- HTTP/1.1所以遇到这类题你别光顾着看URL路径要把整个请求头、参数、Cookie、User-Agent都过一遍因为题目很可能会在某个不起眼的字段里埋一个“小彩蛋”。DNS也是常客。笔试里可能出现这样的题“DNS劫持攻击通常发生在哪一层如何从客户端角度检测DNS是否被劫持”答案的要点是DNS劫持通常发生在“DNS应答的传输过程”或“递归解析服务器”这两个位置。客户端角度检测方法很简单——使用nslookup或dig命令查询同一个域名多次看解析结果是否一致或者使用公共DNS进行对比测试。如果结果不一致基本可以判定就存在劫持。2.2 密码学核心考点密码学在安全的校招笔试里永远不会缺席。但好消息是企业笔试不会让你徒手算RSA的大数模幂更多是考察“什么场景用什么算法以及为什么”。我记得这套题里有一道关于“对称加密与非对称加密区别”的题目它没直接问区别而是给了一个需求“设计一个安全的数据传输方案要求在客户端和服务端之间传输敏感数据既要保证传输效率又要保证密钥本身不泄露。请画出方案流程并说明理由。”标准答案其实就是混合加密方案客户端首先生成一对RSA密钥或者直接用已有的服务端公钥。客户端生成一个随机的AES会话密钥用服务端的RSA公钥加密AES密钥发送给服务端。服务端用RSA私钥解密拿到AES密钥。后续所有敏感数据都使用AES会话密钥进行对称加密传输。这样既利用了RSA的安全性来保护密钥传输又利用了AES的高效性来加密实际数据。答题时要把“为什么要用混合加密”讲清楚——对称加密快但密钥分发困难非对称加密安全但慢两者结合是工程上的最优解。还有一类常考的是哈希算法和密码存储。给你一个场景“用户密码在前端传输时如何保护后端如何存储才安全”这题的正确答案分两层前端传输使用HTTPS/TLS加密整个HTTP请求避免明文密码在网络中暴露。后端存储不能存储明文密码。需要加盐salt后使用慢哈希算法如bcrypt、scrypt、PBKDF2计算哈希值防止彩虹表攻击和暴力破解。笔试中如果你只回答“用MD5加密存储”基本会被扣掉一半的分因为习惯性地把“哈希”说成“加密”本身就是安全基础不扎实的表现。3. Web安全笔试的重头戏如果你翻过奇安信历年校招笔试题会发现Web安全模块永远占据最多的篇幅。这不奇怪因为奇安信的核心业务就集中在Web安全、网关防护和态势感知上Web攻防理解得深不深直接影响你是否能胜任岗位。3.1 从攻击视角拆解Web考点这套题在Web安全方向的考察很有层次感。第一层是让你识别漏洞类型第二层是让你分析漏洞成因第三层是让你给出修复方案。有些题目甚至会把三者合并起来考很考验综合能力。举个例子关于SQL注入面试题会演化成“下面是后端的一段查询代码请指出其中存在的SQL注入漏洞并写出至少两种利用方式和对应的修复方案。”$id $_GET[id]; $sql SELECT * FROM products WHERE id . $id . LIMIT 1; $result mysqli_query($conn, $sql);这个漏洞非常明显——直接把用户可控参数拼进SQL语句没有任何过滤或参数化处理。利用方式可以写id1 OR 11使查询条件恒为真从而绕过WHERE限制获取多条甚至全部数据。id1 UNION SELECT username,password FROM users通过UNION注入直接读取其他表的数据。id1; DROP TABLE products--堆叠注入实现删表操作不过多数数据库驱动默认不支持多语句执行这一点最好在答案里提一句。修复方案的核心不是过滤而是使用参数化查询$stmt $conn-prepare(SELECT * FROM products WHERE id ?); $stmt-bind_param(i, $id); $stmt-execute();关于XSS这套题喜欢出“存储型XSS与反射型XSS的区别”以及“如何防御”这样的题。存储型XSS是攻击者把恶意脚本存到服务器数据库里其他用户访问页面时被加载执行反射型XSS则是恶意脚本通过URL参数反射到页面中需要诱导用户点击构造好的链接。防御手段包括输出编码HTML实体编码、输入校验、设置HttpOnly Cookie、使用CSP等。再说CSRF我印象中有一道题很有意思“假设用户在未退出登录的情况下访问了一个恶意网站该网站通过隐藏表单自动向银行系统发起转账请求。请分析此攻击的原理并说明如何防御。”原理很简单浏览器会自动携带目标网站的Cookie恶意站点利用这一点伪造一个“用户本人发起的请求”。防御方案写三条就够了使用CSRF Token校验请求来源、检查Referer头但不要完全依赖、关键操作如转账、改密进行二次验证比如输入短信验证码。3.2 安全防御与日志分析考点除了漏洞分析这套题还会从防御视角出发考察你“会不会看日志会不会做应急响应基础的流程判断”。有一道题让我印象很深它给了一段Apache/Nginx访问日志内容大概是192.168.1.10 - - [15/Oct/2019:13:45:12 0800] GET /vuln.php?id1%20AND%20sleep(3) HTTP/1.1 200 2345 192.168.1.10 - - [15/Oct/2019:13:45:15 0800] GET /vuln.php?id2%20AND%20sleep(3) HTTP/1.1 200 2345 192.168.1.10 - - [15/Oct/2019:13:45:18 0800] GET /vuln.php?id3%20AND%20sleep(3) HTTP/1.1 200 2345题目问请判断这是什么攻击行为并说明判断依据。答案非常清晰时间型SQL盲注。三个请求之间间隔了大约3秒明显是SLEEP(3)造成的时间延迟这就是最典型的基于时间的盲注特征。回答时要顺着时间线分析第一次请求id1 AND sleep(3)服务器响应延迟约3秒。攻击者依次枚举id的值通过数据库响应时间来判断条件真假。这种攻击比联合注入更难发现因为它不返回任何敏感数据只能“靠时间传信息”。这类题考察的就是你是否具备“从海量日志中发现异常”的敏感度。建议平时可以多看看真实流量日志和攻击日志培养对URL编码、SQL关键字、特殊符号的嗅觉。4. Linux、编程与工具实操题这套卷子的后半段偏实操Linux和编程题占比不小而且考得很有安全特色——不是为了考算法而考算法而是看你能不能写代码解决实际安全问题能不能用Linux命令完成系统排查。4.1 Linux命令与安全排查场景Linux方向的经典考法是给你一个“系统被入侵后的排查场景”让你写出排查步骤和命令。比如这样“某服务器运行异常CPU占用率持续100%请列出你的排查思路和所需命令。”这里就不能只写一个top了事而是要有层次地展开# 1. 查看CPU占用最高的进程 top -c # 2. 获取进程详情和启动命令 ps -ef | grep pid ls -l /proc/pid/exe cat /proc/pid/cmdline # 3. 检查网络连接定位是否在向外发送数据 netstat -antp # 4. 检查启动项和计划任务 vim /etc/crontab crontab -l ls -l /etc/init.d/ cat /etc/rc.local # 5. 检查异常登录记录 lastlog last cat /var/log/secure写答案的时候要体现出“思路完整性”先发现问题进程再追溯该进程的来源然后检查网络连接和持久化痕迹最后清理并固化证据。这不光是笔试考点真实应急响应时也是这个顺序。另外还有一类是“Linux权限和提权”相关的题目比如“文件/etc/shadow的权限是什么普通用户为什么无法读取如果某个普通用户能通过sudo读取该文件可能存在什么风险”答案要点/etc/shadow通常权限是000或400属主是root只有root进程可以直接读取。普通用户无法读取是因为权限位被设置为对非root用户不可读。如果某个用户被赋予了sudo cat /etc/shadow的权限那他就能获取所有用户的密码哈希可以尝试离线爆破甚至利用弱口令哈希直接登录其他账户这就是典型的权限配置不当。Linux这块如果你平时没有亲自搭建过环境、没有真正处理过异常进程很难单靠背命令过关。所以我的建议是备考时直接在虚拟机里“折磨”自己——故意留几个可疑进程和计划任务然后用命令一层一层查出来这个过程比刷十套题都有用。4.2 编程题的解题思路编程题在安全校招里考察的是“用代码解决安全问题的能力”。这套笔试题的编程题不考太复杂的算法重点在字符串处理、数据解析、简单加密解密、以及基本的代码逻辑。比如很典型的一道“请用Python写一段代码统计一个文件里出现次数最多的前10个IP地址。”这题的核心是Counter模块的使用和文件逐行读取。import re from collections import Counter ip_pattern re.compile(r\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b) counter Counter() with open(access.log, r) as f: for line in f: match ip_pattern.search(line) if match: counter[match.group()] 1 for ip, count in counter.most_common(10): print(f{ip}: {count})再比如有一道让你实现一个简单的“替换密码”加密解密函数要求输入一个字符串和密钥加密方法是将每个字母按照密钥偏移量进行替换。这类题考察的是ASCII码转换和边界处理def caesar_encrypt(text: str, shift: int) - str: result [] for ch in text: if ch.islower(): result.append(chr((ord(ch) - ord(a) shift) % 26 ord(a))) elif ch.isupper(): result.append(chr((ord(ch) - ord(A) shift) % 26 ord(A))) else: result.append(ch) return .join(result)编程题最忌讳的是“想复杂了”。安全岗的编程题一旦出现往往就是让你快速实现一个小工具不追求代码优雅追求的是“能跑、结果对、考虑边界情况”。说到边界情况我记得有些同学在写这种加密解密时经常忘记处理大写字母或非字母字符结果在测试用例上翻了车这种分丢得非常可惜。5. 典型题源与临场经验做了这么多年安全又带过不少新人我对校招笔试最大的感受就是题目本身不神秘它考的就是日常工作中每天都要用的东西。所谓“典型题源”其实就是安全圈子里大家都默认的基础技能集合。5.1 容易被忽略的考点有几个点是很多人在准备时容易忽略的。第一个是HTTPS与TLS握手流程。很多人只记住“HTTPS比HTTP安全”但问起TLS握手中客户端和服务端如何协商加密套件、如何交换证书、如何生成会话密钥就说不清楚了。这套卷子曾在基础题部分打过这个点而且它考察的是“key exchange”和“certificate verification”两个阶段的大致过程。备考时建议画一遍完整握手图重点记住ClientHello 和 ServerHello 阶段确定SSL/TLS版本和加密套件。服务端发送证书链客户端验证证书的合法性。密钥交换如ECDHE、RSA后双方生成相同的会话密钥。之后开始对称加密通信。第二个是Base64、URL编码、十六进制编码的识别与转换。安全笔试里经常给一串字符串让你判断它是什么编码。你需要心里有数Base64是A-Za-z0-9/字符集容易被一眼认出来URL编码是%开头加两位十六进制十六进制则全是0-9a-f。拿到编码串先不要慌按字符集特征分类然后手动或写脚本解码。第三个是端口和服务对应关系比如21FTP、22SSH、23Telnet、25SMTP、53DNS、80HTTP、443HTTPS、3306MySQL、3389RDP、6379Redis、27017MongoDB。这在做渗透题和网络排查时几乎必用。比如看到服务器开放了3306端口要知道可能是数据库对外暴露看到6379就要警惕Redis未授权访问漏洞。第四个是日志分析的敏感度。很多人会背OWASP Top 10但你给他一段真实日志他反而看不出来哪里是攻击。这个能力是可以刻意训练的——平时多看看安全设备告警日志、Web访问日志慢慢就会形成条件反射。5.2 备考建议针对类似的校招笔试题我给几个实操建议把OWASP Top 10的每一项至少弄懂一个经典攻击案例从攻击原理到防御手段都要能说清楚。用虚拟机搭一个DVWA靶场把SQL注入、XSS、CSRF、文件包含、命令注入这些漏洞亲手“打”一遍再亲手“修”一遍。这个过程比任何面试题都直观。每天保持写一点Python脚本的习惯不需要多大哪怕只是一个处理CSV的小工具也能让你在编程题上保持手感。Linux命令不要靠背要逼自己在命令行里完成日常操作比如查看日志、分析端口、查找大文件、备份压缩。多做一些“场景题”训练比如给定一个服务器告警让你写出排查步骤。这种题目没有标准答案但你的思路是否完整面试官一眼就能看出来。6. 常见问题与避坑指南最后这部分我把当年带新人笔试、面试以及自己做校招面试官时见到的坑集中说一下算是送给正在备考的同学一份“避坑清单”。6.1 笔试中最常见的五类错误第一类术语表达不严谨。比如把“哈希”说成“加密”把“认证”和“授权”混为一谈把“对称加密”和“非对称加密”的典型算法搞混。安全行业的笔试题改卷人大多是资深工程师术语不严谨很容易被打上“基础不牢”的标签。第二类只讲是什么不讲怎么做。比如问你“如何防御SQL注入”你不能就甩一个“过滤”两个字需要写清具体的方案参数化查询、输入校验、最小化数据库权限、WAF规则兜底。面试官希望看到的是“可落地的方案”而不是一句原则。第三类忽略边界与异常场景。写代码时只覆盖正常输入不考虑空字符串、超大输入、特殊字符、编码差异这些边界情况。这在校招笔试里尤其可惜因为测试用例往往就爱卡这些地方。第四类时间分配失衡。一道题卡了半小时后面的基础题反而空着。记住笔试的目标是拿总分不是证明你能死磕难题。第五类不够细心。有些题目会在题干里偷偷给提示。比如把请求数据包放在题目描述里把关键代码片段贴出来甚至把漏洞类型写在题目标题的小括号里。很多同学题目没读完就开始答题结果答非所问。6.2 我个人在实际操作中的几点体会这几年陆陆续续帮企业做过校招笔试的出题和评审也带过不少新人越来越觉得“基础不牢地动山摇”这句老话在安全行业里真的不是开玩笑。我见过一些简历上写着精通渗透测试的同学笔试时连/etc/shadow权限都不知道也见过基础题答得近乎满分、编程题也写得干净利落的人后来在工作中果然表现出很强的上手能力。这套笔试题本身难度不算高但它像一面镜子把你平时学习里的盲区照得一清二楚。如果你正在准备校招我的体会是与其焦虑地刷无数套题不如静下心来把每一个基础知识点吃透然后亲手做几个靶场实验。网上的wp再多都不如自己把数据包、日志、漏洞代码跑一遍来得踏实。这套“奇安信2019校招笔试题二”虽然已经是几年前的东西了但背后考察的能力模型放在今天依然适用。安全行业变化快新技术新漏洞层出不穷但TCP/IP不会变、SQL注入不会消失、Linux权限模型不会重新设计把基本功打牢后面学什么都快。
返回列表