自动化测试和手工测试各有优缺点,如何平衡两者,发挥各自优势,是提高测试效率和覆盖率的关键。

扫描器虽然强大,但有很多局限性。它只能检测已知漏洞模式,对逻辑漏洞、业务漏洞、组合漏洞、0day漏洞等,往往检测不到。
扫描器不理解业务逻辑,检测不到逻辑漏洞。比如支付流程绕过、优惠券逻辑缺陷、业务流程绕过等,都需要深入理解业务流程才能发现。
假设用AWVS扫描一个电商系统,扫描器可能没有发现任何漏洞。但手工测试时,发现支付金额可以修改,优惠券折扣可以修改,订单状态可以回退。这些都是逻辑漏洞,扫描器检测不到,因为它们不依赖技术漏洞,而是业务流程的设计缺陷。
扫描器不理解业务,检测不到业务漏洞。比如业务规则绕过、业务流程缺陷、业务逻辑错误等,都需要理解业务才能发现。
组合漏洞也需要多种技术组合,扫描器可能检测不到。比如XSS + CSRF组合攻击,需要先利用XSS注入恶意代码,然后利用CSRF执行操作。这种组合攻击需要多步操作,扫描器无法模拟。
0day漏洞扫描器也检测不到。扫描器只能检测已知漏洞,对于新的攻击技术、框架的新漏洞、自定义代码的漏洞等,扫描器无法检测。
扫描器可能误报,把正常功能识别为漏洞。这是因为扫描器使用规则匹配,可能无法准确理解上下文。
常见误报包括:反射型XSS误报(扫描器发现参数在响应中,就报告XSS,但实际可能被编码,不会执行),SQL注入误报(扫描器发现SQL错误,就报告注入,但实际可能是正常的错误处理),信息泄露误报(扫描器发现某些信息,就报告泄露,但实际可能是正常的功能)。
处理方法:每个漏洞都要手工验证,不能直接相信扫描结果。要理解漏洞原理,判断是否真实。

验证扫描器发现的漏洞,需要遵循一定的流程。
首先理解漏洞原理:为什么会存在这个漏洞,攻击者如何利用,会造成什么影响。只有理解了原理,才能准确判断漏洞是否真实。
然后复现漏洞:尝试按照扫描器提供的方法,或者自己构造攻击,验证漏洞是否真实存在。如果无法复现,可能是误报。
最后评估影响:评估漏洞的危害程度,利用的难度,影响的用户范围。这有助于确定修复的优先级。
假设扫描器报告了一个反射型XSS,参数是keyword,Payload是<script>alert('XSS')</script>,位置在响应中。
验证步骤:理解原理(参数keyword在响应中直接输出,没有过滤或编码,可以执行JavaScript),复现漏洞(查看响应,确实存在XSS),评估影响(可以窃取Cookie,可以执行任意JavaScript,影响所有使用搜索功能的用户,危害高)。
如何识别误报?
检查响应:查看实际的响应内容,检查是否真的存在漏洞,验证Payload是否真的执行。如果Payload被编码或过滤,可能无法执行,可能是误报。
理解上下文:漏洞在什么上下文,HTML上下文还是JavaScript上下文,是否有防护措施。不同的上下文,防护措施不同,需要不同的绕过方法。
测试绕过:尝试绕过防护,如果无法绕过,可能是误报。但要注意,无法绕过不代表不存在漏洞,可能是绕过方法不对。
假设扫描器报告了SQL注入:
|参数:id Payload:1' AND '1'='1 响应:SQL syntax error
验证:检查响应,响应确实包含"SQL syntax error",但这是正常的错误处理,不是真正的SQL注入。进一步测试,响应正常,没有执行SQL。结论:误报,系统只是返回了友好的错误信息。

误报的原因包括:扫描器规则不准确(规则太宽泛,没有考虑上下文),系统防护(WAF拦截了攻击,但扫描器仍然报告漏洞),正常功能(正常功能被误识别为漏洞)。
处理方法:手工验证每个漏洞,不能直接相信扫描结果。调整扫描器配置,调整扫描规则,减少误报。记录误报模式,记录常见的误报,后续测试时注意。
漏报的原因包括:扫描器规则不完整(没有覆盖所有漏洞类型,特别是逻辑漏洞),系统防护(WAF拦截了扫描,扫描器无法检测),复杂场景(需要多步操作的漏洞,扫描器无法模拟)。
处理方法:手工测试补充,扫描器检测不到的,用手工测试,重点关注逻辑漏洞、业务漏洞。深度测试,不满足于扫描结果,深入测试每个功能点。组合测试,组合多种攻击技术,测试复杂场景。
本部分我们一起探讨了自动化测试和手工测试如何有机结合。大家应该发现,虽然自动化扫描器可以极大提高我们的测试效率,但它们也有不少“盲区”:像复杂的业务逻辑漏洞、组合型漏洞,或者0day等高级威胁,往往难以靠机器自动发现。这时候,手工测试、深入复现和原理理解的能力就格外重要。遇到误报时不能盲目信任扫描结果,要善于甄别与核实;而遇到漏报,更需要主动补充和拓展测试思路。
最佳实践其实没有所谓的“万能模板”,但合理安排测试流程、灵活选用工具、规范地撰写报告,都是我们日常工作中不可或缺的能力。在接下来的最后一个部分,我们会聊聊渗透测试报告和修复建议的撰写。这不仅仅是技术输出,更是展示专业性和帮助团队提升安全水平的关键一步。
最后,和大家共勉一句:自动化和手工并重,才能让你的测试既高效又有深度。工具是好帮手,但真正的核心竞争力,依然是你的分析和实操能力!