网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

PHPCMS 9.4.2 手机号验证绕过 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-15 14:59 作者: 阅读:

[导读] 在api sms_idcheck php中, 存在一处手机号码认证的代码, 该认证有问题, 用户可以轻意绕过 并将可控的输入带到sql语句中 if($mobile){ if(!preg_match( 39; ^1([0-9]{9}) 39;,$mobile)) exit( 39;ch...

在api/sms_idcheck.php中, 存在一处手机号码认证的代码, 该认证有问题, 用户可以轻意绕过. 并将可控的输入带到sql语句中. 
 
if($mobile){

  if(!preg_match('/^1([0-9]{9})/',$mobile)) exit('check phone error');

$posttime = SYS_TIME-360;

$where = "`mobile`='$mobile' AND `posttime`>'$posttime'";

$r = $sms_report_db->get_one($where,'id_code','id DESC');

if($r && $r['id_code']==$mobile_verify) exit('1');

/*

我们看到,它过滤手机号的时候,采用的正则是/^1([0-9]{9})/, 这个正则存在问题, 

它只判断了第一位是不是1, 接下来的是不是存在9个数字, 后面的内容都没进行判断. 

所以即使,我们输入10000000000*********(*******代替任意字符),它也会认为这是手机号, 

从而,带到下面的$where中去查询,从而存在一定的威胁. 



在默认的情况下,连接的数据库mysql,由于单引号被转义, 所以不好利用了. 

但在特定的情况下, 譬如连接的mysql时,采用gbk的字符集连接, 就可以绕过该转义, 从而进行利用.



另外,在采用别的数据库的情况下, 也有可能存在一定的风险.



*/

 

 
http://localhost/api.php?op=sms_idcheck&action=id_code&mobile_verify=123456&mobile=13800138
 
时,会返回check phone error.
 
 
 
http://localhost/api.php?op=sms_idcheck&action=id_code&mobile_verify=123456&mobile=10000000000%bf'
 
时,它会绕过mobile的验证, 将内容带到数据库中去查询.
修复方案:
本来就是一个鸡肋.
 
修不修复没啥危害.
 
preg_match('/^1[0-9]{9,10}$/') //在正则的后面,加个$结束符.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论