### 简要描述: 帝国CMS 验证码可无视!可导致验证码无效(验证码识别都是渣渣) ### 详细说明: 看帝国 获取验证码的代码 ``` //显示验证码 function ShowKey($v){ $vname=ecmsReturnKeyVarname($v); $key=strtolower(domake_password(4)); ecmsSetShowKey($vname,$key); .................. } ``` ecmsReturnKeyVarname 是返回保存验证码的cookie的名称 比如本列打开的页面上注册页面的验证码 url 是 http://localhost/empirecms/e/ShowKey/?v=reg 第一步:根据ecmsReturnKeyVarname 返回的是checkregkey ``` //返回变量名 function ecmsReturnKeyVarname($v){ if($v=='login')//登陆 { $name='checkloginkey'; } elseif($v=='reg')//注册 { $name='checkregkey'; } elseif($v=='info')//信息 { $name='checkinfokey'; } elseif($v=='spacefb')//空间反馈 { $name='checkspacefbkey'; } elseif($v=='spacegb')//空间留言 { $name='checkspacegbkey'; } elseif($v=='gbook')//留言 { $name='checkgbookkey'; } elseif($v=='feedback')//反馈 { $name='checkfeedbackkey'; } elseif($v=='getpassword')//取回密码 { $name='checkgetpasskey'; } elseif($v=='regsend')//重发激活邮件 { $name='checkregsendkey'; } else//评论pl { $name='checkplkey'; } return $name; } ```...
### 简要描述: 帝国CMS 验证码可无视!可导致验证码无效(验证码识别都是渣渣) ### 详细说明: 看帝国 获取验证码的代码 ``` //显示验证码 function ShowKey($v){ $vname=ecmsReturnKeyVarname($v); $key=strtolower(domake_password(4)); ecmsSetShowKey($vname,$key); .................. } ``` ecmsReturnKeyVarname 是返回保存验证码的cookie的名称 比如本列打开的页面上注册页面的验证码 url 是 http://localhost/empirecms/e/ShowKey/?v=reg 第一步:根据ecmsReturnKeyVarname 返回的是checkregkey ``` //返回变量名 function ecmsReturnKeyVarname($v){ if($v=='login')//登陆 { $name='checkloginkey'; } elseif($v=='reg')//注册 { $name='checkregkey'; } elseif($v=='info')//信息 { $name='checkinfokey'; } elseif($v=='spacefb')//空间反馈 { $name='checkspacefbkey'; } elseif($v=='spacegb')//空间留言 { $name='checkspacegbkey'; } elseif($v=='gbook')//留言 { $name='checkgbookkey'; } elseif($v=='feedback')//反馈 { $name='checkfeedbackkey'; } elseif($v=='getpassword')//取回密码 { $name='checkgetpasskey'; } elseif($v=='regsend')//重发激活邮件 { $name='checkregsendkey'; } else//评论pl { $name='checkplkey'; } return $name; } ``` 第二步:ecmsSetShowKey函数将cookie保存到cookie中,看这函数好像是做了不少 其实是把验证码md5了一下就保存到cookie里面了 关键点:$key=$time.','.$checkpass.','.$val; $val就是验证码的md5 ``` /设置验证码 function ecmsSetShowKey($varname,$val,$ecms=0){ global $public_r; $val=md5($val); $time=time(); $checkpass=md5(md5($val.'EmpireCMS'.$time).$public_r['keyrnd']); $key=$time.','.$checkpass.','.$val; esetcookie($varname,$key,0,$ecms); } //设置COOKIE function esetcookie($var,$val,$life=0,$ecms=0){ global $ecms_config; $varpre=empty($ecms)?$ecms_config['cks']['ckvarpre']:$ecms_config['cks']['ckadminvarpre']; return setcookie($varpre.$var,$val,$life,$ecms_config['cks']['ckpath'],$ecms_config['cks']['ckdomain']); } ``` 第三步:查看cookie,mlukmcheckregkey=1409913237%2C26b915271f0eccf2eef645af070e7e63%2C8f136277f7544773106f4c06dcdb4bf4; 最后面%2C后面8f136277f7544773106f4c06dcdb4bf4就是验证码的md5 这四位数的验证码在cmd5那是一查一个准啊 [<img src="https://images.seebug.org/upload/201409/05183953a8b9916f4dcff15cd82049f5ba30a1ed.gif" alt="QQ截图20140905183708.gif" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/05183953a8b9916f4dcff15cd82049f5ba30a1ed.gif) [<img src="https://images.seebug.org/upload/201409/05184003d090444b134ea5894f9a097e9641ed54.gif" alt="QQ截图20140905183929.gif" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/05184003d090444b134ea5894f9a097e9641ed54.gif) ### 漏洞证明: [<img src="https://images.seebug.org/upload/201409/05183953a8b9916f4dcff15cd82049f5ba30a1ed.gif" alt="QQ截图20140905183708.gif" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/05183953a8b9916f4dcff15cd82049f5ba30a1ed.gif) [<img src="https://images.seebug.org/upload/201409/05184003d090444b134ea5894f9a097e9641ed54.gif" alt="QQ截图20140905183929.gif" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/05184003d090444b134ea5894f9a097e9641ed54.gif)