
做Web安全评估这几年我接过不少“客户说系统很安全”的项目结果上去一测SQL注入、存储型XSS一抓一大把。很多刚入行的朋友问我Web安全漏洞检测到底该从哪里学起我的答案一直很一致别一上来就抱着扫描器跑先把手动检测那套基本功练扎实把最经典的几类漏洞吃透。这篇内容我就围绕Web安全入门阶段最该掌握的5个漏洞检测技巧展开用真实案例把检测思路、操作步骤和踩坑经验完整讲一遍适合刚接触漏洞检测的渗透测试新人、安全运维同学也适合想自查自家网站安全性的开发者。1. 为什么入门先学这5个漏洞检测技巧1.1 从经典漏洞分布反推学习路径你去看OWASP Top 10也好看SRC平台的漏洞报告也罢排在前面的无非就是注入、失效身份认证、XSS、文件上传、越权这几类。它们占到了实际 Web 系统漏洞的绝大多数换句话说你把这几类漏洞的检测方法掌握了日常工作中至少七成的检测需求都能覆盖。更重要的是这5类漏洞对应着Web安全的5个核心检测维度输入校验SQL注入/XSS、文件处理上传漏洞、访问控制越权、信息暴露敏感信息泄露。每个维度都不是孤立的它们的检测思路可以迁移。比如你理解了“用户输入不可信”这个核心无论是SQL注入、XSS还是命令注入底层逻辑都一样——都是看到了没有经过合理校验就进入系统处理流程的数据。入门阶段如果把这5个技巧吃透后面的学习速度会快很多因为很多高级攻击手法本质上是这些基础漏洞的组合利用。1.2 先手动后工具的检测原则我第一次带新人做项目时就立了个规矩每个漏洞检测点必须先手动验证一遍搞清楚原理再上自动化工具。为什么因为扫描器只能告诉你结果不能告诉你背后的原理。比如一个SQL注入点Burp Suite能测出闭合方式、payload类型但如果你不理解为什么后面跟个会触发报错换一个参数类型你就不会测了。手动检测还有个好处是误报率低。工具扫出来的漏洞需要人工验证这是行业基本流程。真正影响系统安全的漏洞往往细节藏在参数的某个畸形输入里工具未必发现得了人肉测反而更可靠。我这里说的“先手动”不是让你完全不用工具。而是让工具回归辅助地位——在手动确定了漏洞类型和注入特征后用工具提高效率比如用sqlmap去扩展数据获取用XSS平台辅助利用。这个顺序我实测下来最稳妥也最能锻炼人对漏洞的敏感度。2. 5个必学漏洞检测技巧的实战拆解2.1 SQL注入检测从单引号报错到时间盲注SQL注入的原理说白了就是开发者在拼接SQL语句时没有把从外部获取的数据当作“数据”处理而是直接当成“代码”执行了。检测思路就是尝试让原SQL语句的语法结构发生改变观察响应差异。最经典的入门检测就是单引号试探法。比如一个搜索功能URL是search.php?keyword手机我手动把它改成search.php?keyword手机如果页面报数据库语法错误或者返回的内容异常那基本可以断定存在SQL注入点。接下来可以进一步判断注入类型数值型还是字符型闭合符是单引号还是双引号是用AND 11/AND 12做布尔判断还是用sleep(5)做时间盲注。我印象比较深的一个案例是给一家电商网站做授权检测它商品详情页的id参数存在字符型注入。输入/product.php?id1直接报了MySQL语法错误错误信息还泄露了表名前缀。我顺着用手工方式验证了id1 and 12时页面不返回商品信息、id1 and 11时正常返回确认存在布尔盲注条件。这类漏洞通常能直接拖库危害极高。参数类型不同检测姿势也不同。数字型参数可以尝试加减运算符比如id2-1如果页面内容和id1一致说明数字间能被当作表达式执行字符串型参数则要重点关注引号闭合和注释符的使用。规则的姿势就是先报错探路再条件判断最后考虑是否有必要做数据提取。2.2 XSS跨站脚本检测三类场景三种思路XSS的全称是Cross-Site Scripting本质是攻击者把JavaScript代码注入到页面中让它执行。检测XSS的核心是找到“后端把用户输入原样输出到页面上”的位置。反射型XSS的检测最简单。参数值里输入scriptalert(1)/script这种内容是很容易被过滤的所以实际测试时我习惯用无伤大雅的标签或事件载荷比如img srcx onerroralert(document.cookie)或者svg onloadalert(1)。如果浏览器弹出弹窗问题实锤。做过的项目里有个搜索框输入关键字后搜索词会原样带在结果页里属于典型的反射型XSS危害在于诱导用户点击构造好的恶意链接。存储型XSS更危险因为恶意代码被保存到服务器上每次有人访问触发页面都会执行。检测重点放在评论区、昵称、个人简介这类会被长期保存的内容输入位置。我之前测过某论坛的个人签名功能提交的img srcx onerroralert(document.cookie)被原样存储管理员访问该用户主页时弹窗。这种漏洞一旦被用来挂窃取Cookie的脚本账号批量失守不是说说而已。DOM型XSS和前面两种不太一样它不经过服务器纯粹是在前端JavaScript代码处理时发生的。检测时要打开浏览器开发者工具看URL中的参数值如何被document.write、innerHTML这类函数拼接进页面。有些正则过滤不严直接引入location.hash的内容也是DOM XSS的高发区。2.3 文件上传漏洞检测别只看后缀名文件上传漏洞的检测重点在于判断服务端对上传文件的校验是否可以被绕过。很多开发者以为只要检查了文件后缀就安全了实际上校验方式五花八门每种都有突破的可能。常规流程是这样我先准备好一个无害的测试文件比如内容是一句话木马的txt版本然后通过Burp Suite抓上传请求。依次尝试改后缀名.php为.php.jpg、.phtml、.php5或者直接改Content-Type为image/jpeg。如果服务器解析了PHP代码说明存在任意文件上传风险。一个学费交得比较多的案例是某系统的头像上传只做了前端JS后缀校验我用Burp Suite拦截后把文件名从test.png改成test.phpContent-Type也一起改成image/png服务器居然直接接收并给出了可访问路径。这种漏洞意味着攻击者可以直接上传WebShell拿到服务器权限属于最高危的漏洞之一。检测时注意看响应包里的路径如果上传后服务器明确返回了文件访问URL下一步才能确认是否成功解析。另一个细节是图片马检测也就是在图片的末尾附加一段代码再改后缀为.php上传如果服务器支持类似Apache的AddHandler解析机制这种文件就可能被执行。2.4 越权漏洞检测IDOR与角色切换越权漏洞的本质是服务器信任了前端传过来的身份标识没有在后端做二次校验。最常见的就是通过修改请求里的ID来访问他人资源即水平越权或者以普通用户身份访问管理员接口即垂直越权。水平越权检测技巧很简单准备两个普通测试账号A和B用A登录抓取查看个人资料的请求/profile?id1001改成id1002如果页面上出现了B账号的手机号、地址就说明存在越权。我在金融类项目里测到过一个线上报销系统订单详情接口只校验了登录状态没校验资源归属任意登录用户遍历订单号就能看到全公司人的报销金额这类问题通常和数据泄露直接挂钩。垂直越权的检测方式是找高低权限账号做对比。普通用户抓取一个管理员的删除接口直接重放请求如果返回成功说明垂直越权存在。检测越权不需要什么高端工具Burp Suite的Repeater改几个数字就够了也因此特别适合入门练习。2.5 敏感信息泄露检测从响应头到源码注释敏感信息泄露是个大类检测目标包括备份文件泄露、源码注释泄露、报错页信息泄露、响应头信息泄露、目录列举等。它的危害可能没前几个漏洞那么直接但往往是进一步深入利用的“引子”。我的检测习惯是先把这些点过一遍查看HTTP响应头里的Server版本、X-Powered-By访问常见路径如/.git/、/.svn/、/backup.zip、/www.zip看登录报错提示是否区分“用户名不存在”和“密码错误”看404页面是否还带框架版本号。之前代理检测过一个政府门户网站报错页面直接显示ThinkPHP V5.0.23版本号和一长串堆栈信息而该版本存在公开的RCE漏洞等于自己给攻击者递刀子了。另外一个案例是备份文件/test.sql直接在爆破中被扫了出来里面包含整站数据库的备份。信息泄露检测的产出不在多而在于能否串联成攻击链。比如Server: Apache/2.4.49这个版本存在路径穿越漏洞敏感信息就变成了漏洞利用的前置条件。3. 实操环节搭建靶场走一遍完整检测流程3.1 目标确认与授权边界新手最容易忽略的一个问题就是授权。我反复强调任何检测都必须限定在你有合法权限评估的目标范围内比如自己搭建的靶场、公司指派的项目、获得书面授权的众测目标。没有授权就开扫轻则被封IP重则引发法律风险这不是吓唬人。所以我在教学和项目实操里一律使用本地自建靶场来做演示。推荐 DVWADamn Vulnerable Web Application它在 Docker 里跑起来只要一条命令docker run -d -p 80:80 vulnerables/web-dvwa。装好后是一个漏洞百出的Web应用SQL注入、XSS、文件上传、命令注入等漏洞全都有非常适合入门练习。3.2 以SQL注入为例的完整检测流程把DVWA的Security Level调到low进入SQL Injection模块。先用单引号试探URL变更为id1后页面报错确认存在注入。接着用ORDER BY判断字段数量id1 ORDER BY 2--正常ORDER BY 3报错说明查询只有2列。接下来用UNION SELECT验证回显位置payload是id1 UNION SELECT 1,2--页面显示数字1和2说明两列都在页面上有输出。再进一步把第二个字段换成database()当前数据库名直接显示在页面上。这个过程从发现到验证5分钟就能走完但它清晰反映了SQL注入从“存在性判断”到“可利用性验证”的完整路径。很多真实漏洞的确认走的就是这个流程。3.3 工具辅助Burp Suite的入门用法自学也好做项目也好Burp Suite是绕不过去的工具。你需要掌握的入门功能就三个Proxy抓包、Repeater重放、Intruder爆破方向。Proxy配置好浏览器代理后提交表单、翻页时请求包会被拦截下来右键Send to Repeater后改参数、发请求、看响应都变得非常方便。这套操作几乎能覆盖我在2.3节提到的所有请求篡改测试场景。另外建议用浏览器插件比如FoxyProxy配合Burp做代理快速切换或者直接用Burp自带浏览器它能自动解决SSL证书报错问题初学者实测下来会少很多挫败感。3.4 自动扫描工具如何正确使用自动化扫描不是不能用而是要“懂它的脾气”。我用nuclei的习惯是这样先对目标做基础的指纹识别确认中间件和框架版本再使用对应的nuclei模板做定向验证而不是一上来就跑全量模板集。比如确认目标跑的是Spring Boot就可以针对Spring Boot Actuator泄露和相关CVE做重点检测。这样既避免扫出大量误报浪费时间又能高效地命中真实存在的风险。工具是放大器不是替身——你手动扫一遍确认了方向再用工具去扩大覆盖面这个顺序能让你对目标的情况有一个全景认识。4. 检测路上的常见坑与排查实录4.1 典型误判与干扰场景速查现象原因排查思路实际操作建议注入payload导致500但无回显可能是代码里做了基础过滤并返回空页面尝试布尔盲注或者时间盲注不要只看报错构造条件成立/不成立的查询对比响应时长XSS payload输入后弹窗没反应前端有转义但可能位置是属性或JS上下文换触发方式事件属性、伪协议逐个测试在a href位置尝试javascript:协议上传PHP文件提示类型错误服务端校验Content-Type改Content-Type为合法图片类型后再传用Burp拦截后手动修改请求体头部修改ID后返回404接口做了归属校验或查询结果为空尝试更换ID段、替换为其他合法资源ID多准备几个测试账号轮流替换ID扫描器报了一堆洞但复现不了工具误报或需要特定会话条件优先手工验证影响等级高的漏洞先看扫描报告里的请求包手动重放一遍4.2 处理WAF和过滤机制的基本规避思路很多真实系统会部署WAF或代码层过滤规则这不代表漏洞不存在只代表你要换个姿势验证。先说绕过过滤的基础思路大小写混写SeLeCt、注释分割sel/**/ect、URL编码、双写绕过selselectect、使用INFORMATION_SCHEMA替代敏感函数等。但这些方法在不同过滤场景下的效果差异很大核心原则是观察目标的过滤逻辑——是黑名单还是白名单是拦截了关键字还是拦截了特殊字符。我提醒一句绕过WAF的技术可以作为学习方向但真正靠谱的出路是推动开发团队做参数化查询、白名单过滤、统一编码等修复措施这也是安全检测最终应该走向的结果。4.3 写检测报告时容易被忽略的细节做安全检测最终交付物就是一份报告报告的字段和逻辑直接影响使用方能否快速定位问题。每个漏洞至少应该包含漏洞URL和参数、危害等级、复现步骤、PoC请求包、修复建议。修复建议不能写成一句泛泛的“加强输入过滤”。比如SQL注入的修复建议要具体到“使用PDO prepared statement带参数查询禁止拼接SQL字符串”XSS修复建议要具体到“对输出到HTML的变量做htmlspecialchars编码并设置Content-Security-Policy响应头”。这样开发团队拿到报告后能直接照着改不必再去查文档。报告里还必须有复现请求的原始HTTP报文这是一个容易被新手忽略但对其他测试人员非常重要的字段。后续做回归测试时可以直接用这个报文重放验证修复是否生效。另外建议在报告开头加入目标范围的描述、测评时间、测试人员、采用的工具版本这关系到整个报告的可追溯性和合规性。4.4 适合入门者的持续练习路线写到这里顺便分享下我建议的练习路径。先花一两周时间把DVWA的low级别全部过一遍目标是能手动检测每个漏洞模块再用medium和high级别练习看代码审计和绕过思路。之后用Pikachu靶场补充逻辑漏洞类题目比如越权、支付逻辑、验证码绕过。遇到不会的题不要急着看答案。先从请求层面把所有参数列出来逐个修改、观察响应变化对比正常和异常请求之间的差异。这个过程比答案本身重要得多因为真实漏洞检测的思维就是在无数个“对比”里训练出来的。我个人在实际项目中最深刻的体会是Web漏洞检测与其说需要很炫酷的技术不如说需要一套稳定严谨的验证思维。检测的每一步其实都在回答两个问题这里用户能否控制输入这里输入是否被合理处理把这两个问题想透了你的检测思路就会变得非常清晰。最后再分享一个小习惯每测完一个目标我都会把请求包和关键响应保存好编号归档不是为了应付检查而是这些原始记录就是后续编写检测报告和复盘分析的最大底稿。