步骤:(要设置REFERER才能获取)
论坛:http://www.test.com
1. 通过 访问member.php?mod=register页面,分析得到验证码图片的URL=$src;
代码:
$fileget=vget("http://www.test.com/member.php?mod=register");
//生成验证码的hash
$pattern="/<input name=\"sechash\" type=\"hidden\" value=\"([A-Za-z0-9]+)\" \/>/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保存了第一次验证成功,第二次就忽略了;神马?就可以不断填充数据进去注册,从而绕开了注册验证码,达到注册机的效果。