Burp Suite实战:5种验证码绕过技巧(附Pikachu靶场复现步骤)
Burp Suite实战5种验证码绕过技巧与Pikachu靶场复现指南1. 验证码安全机制概述与绕过的核心思路验证码CAPTCHA作为区分人类和自动化程序的重要安全措施其设计初衷是防止暴力破解、垃圾注册等恶意行为。但在实际应用中开发者常因实现不当留下可乘之机。从技术实现角度验证码漏洞主要源于三个层面前端校验缺陷验证逻辑仅依赖客户端JavaScript执行服务端逻辑漏洞验证码未及时失效或校验不严格交互设计问题验证码与身份认证流程解耦在Pikachu靶场环境中我们将重点演示以下五种典型验证码的绕过方法graph TD A[验证码类型] -- B[前端验证] A -- C[图形验证码] A -- D[短信验证码] A -- E[滑动验证码] A -- F[点选验证码]2. 前端验证码绕过实战2.1 漏洞原理分析当验证码校验完全依赖前端JavaScript时攻击者只需绕过浏览器直接发送请求即可突破防护。Pikachu靶场的on client场景完美模拟了这种不安全实现// 前端验证逻辑示例 function validate(){ var inputCode document.querySelector(#bf_client .vcode).value; if(inputCode ! code){ // code为前端生成的验证码 alert(验证码错误); return false; // 阻止表单提交 } return true; }2.2 Burp Suite操作步骤拦截登录请求配置Burp Proxy监听流量在浏览器输入任意验证码触发拦截验证前端校验POST /pikachu/vul/burteforce/bf_client.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 49 usernametestpassword123vcodeWRONGCODEsubmitLogin删除vcode参数后放行请求观察仍能提交Intruder爆破配置攻击类型Sniper模式爆破参数仅标记username和passwordPayload设置使用常见弱口令字典关键技巧通过Repeater模块反复测试确认服务端是否校验验证码3. 图形验证码自动化识别3.1 OCR技术绕过对于简单图形验证码可通过Burp插件实现自动化识别安装Captcha Killer插件在Burp的BApp Store中搜索安装配置OCR接口推荐Tesseract或第三方打码平台自动化识别流程# 验证码识别示例代码 import pytesseract from PIL import Image def recognize_captcha(image_path): img Image.open(image_path) return pytesseract.image_to_string(img)Intruder联动配置将验证码图片请求发送到插件在Payload Processing中添加识别结果3.2 验证码复用漏洞当服务端不使验证码立即失效时获取验证码后不刷新页面在Burp中固定captcha_id参数值使用Repeater重复发送相同验证码漏洞特征GET /captcha?id123 HTTP/1.1 → 返回图片ABCD POST /login HTTP/1.1 ... captcha_id123captcha_codeABCD # 可重复使用4. 短信验证码爆破技术4.1 四位数字爆破当验证码为短数字时Intruder配置攻击类型Cluster bombPayload 1目标手机号Payload 2数字0000-9999优化爆破效率# 生成数字字典 seq -f %04g 0 9999 sms_codes.txt绕过频率限制添加X-Forwarded-For头切换IP设置请求延迟Options → Throttle4.2 响应包信息泄露检查短信发送接口的响应{ status: 1, message: 验证码已发送, code: 3682 // 关键漏洞 }利用Session Handling Rules自动提取验证码1. 新建规则 → 添加Extract from response 2. 使用正则匹配code:(\d{4}) 3. 应用到登录请求的code参数5. 滑动验证码绕过方案5.1 轨迹参数分析典型滑动验证请求参数参数名类型说明distanceint滑动距离(px)trackJSON滑动轨迹坐标tokenstring会话令牌5.2 固定距离值绕过多次滑动记录成功距离值如182px在Repeater中固定该值POST /slide_verify HTTP/1.1 ... {distance:182,track:[]}5.3 轨迹生成算法对于需要轨迹验证的情况# 轨迹生成算法示例 def generate_track(distance): track [] current 0 while current distance: step random.randint(1, 5) track.append([current, 0, random.randint(50, 200)]) current step return track通过Burp的Macro功能实现自动化1. 录制获取滑动参数的请求 2. 在Session Handling Rules中调用6. 点选验证码突破方法6.1 坐标识别技术使用OpenCV识别目标位置import cv2 template cv2.imread(target.png) result cv2.matchTemplate(img, template, cv2.TM_CCOEFF) min_val, max_val, min_loc, max_loc cv2.minMaxLoc(result)转换坐标格式{points:[[125,56],[78,120]]}6.2 验证码复用当点选图片内容固定时首次成功验证后记录坐标在后续请求中复用相同坐标值7. 高级技巧Token绕过与防护虽然Token设计用于防CSRF但错误实现仍会导致安全问题不安全实现示例input typehidden nametoken valuea1b2c3d4绕过方法使用Pitchfork攻击模式配置递归获取TokenPayload类型Recursive grep 从响应中提取nametoken value(.*?)设置线程数为1保证顺序8. 防护措施建议针对开发者的安全建议验证码类型防护方案图形验证码添加干扰线、扭曲变形短信验证码6位以上60秒失效滑动验证码后端校验轨迹加速度点选验证码语义化指令加密坐标服务器端关键校验逻辑// 验证码校验示例 function verify_captcha($input, $session_code){ if(empty($input) || $input ! $session_code){ $_SESSION[attempt]; // 记录尝试次数 if($_SESSION[attempt] 5){ sleep(10); // 限速措施 } return false; } unset($_SESSION[captcha]); // 立即失效 return true; }9. Pikachu靶场环境搭建快速搭建测试环境docker run -d -p 80:80 vulnerables/web-dvwa # 或使用本地PHP环境 php -S 127.0.0.1:8080 -t /path/to/pikachu常见问题排查验证码不显示检查GD库是否安装Burp无法拦截确认代理设置和CA证书安装插件不生效确保使用Java 11环境在实际渗透测试中验证码绕过需要结合具体场景选择合适方法。最近在审计某金融系统时发现其滑动验证码虽然前端加密轨迹参数但后端仅校验最终滑动距离通过固定distance值成功绕过。这再次验证了安全防护需要端到端的完整校验。