php curl 读取discuz注册验证码图片

步骤:(要设置REFERER才能获取

论坛:http://www.test.com


1. 通过 访问member.php?mod=register页面,分析得到验证码图片的URL=$src;

 代码:

  $fileget=vget("http://www.test.com/member.php?mod=register");
   
   //生成验证码的hash
   $pattern="//s";
   preg_match($pattern,$fileget,$match);
   $idhash=$match[1];
   
   $fcon=vget("http://www.test.com/misc.php?mod=seccode&action=update&idhash={$idhash}&inajax=1&ajaxtarget=seccode_{$idhash}");
   
   $pattern1="/src=\"(.*?)\" class=\"vm\" alt=\"\" \/>/s";
   preg_match($pattern1,$fcon,$match1); 
   $src="http://bbs.py168.com/".$match1[1];


2.通过curl获取验证码图片(因为验证码获取一定要设置 REFERER,这个我选择用curl来实现,简单的copy 是不能获取到图片的!)


getImg($url, $filename); 
/* 
*@通过curl方式获取指定的图片到本地 
*@ 完整的图片地址 
*@ 要存储的文件名 
*/ 
function getImg($url = "", $filename = "") { 
if(is_dir(basename($filename))) { 
echo "The Dir was not exits"; 
Return false; 

//去除URL连接上面可能的引号 
$url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url ); 
$hander = curl_init(); 
$fp = fopen($filename,'wb'); 
curl_setopt($hander,CURLOPT_URL,$url); 
curl_setopt($hander,CURLOPT_FILE,$fp); 
curl_setopt($hander,CURLOPT_HEADER,0); 
curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1); 
curl_setopt($hander,CURLOPT_REFERER,'http://www.test.commember.php?mod=register');
//curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来 
curl_setopt($hander,CURLOPT_TIMEOUT,60); 


curl_exec($hander); 
curl_close($hander); 
fclose($fp); 
Return true; 


#最后发现discuz x2一个注册验证漏洞:输入验证码后提交数据过去,注册成功; 然后继续填充数据注册,第二次验证码居然为空的时候仍然注册成功;应该是cookie保存了第一次验证成功,第二次就忽略了;神马?就可以不断填充数据进去注册,从而绕开了注册验证码,达到注册机的效果。


你可能感兴趣的:(php)