齐博前版本sql注入 - 代码审计 - 90Sec
2019-08-10 23:50:01 Author: forum.90sec.com(查看原文) 阅读量:160 收藏

list($token,$secret,$openid,$time) = explode("",qqmd5($_GET[qq_api],"DE",$webdb[QQ_QBappkey]));
		if(!$openid){
			showerr('ÐÅÏ¢²»È«,³ö´íÁË!!');
		}elseif($timestamp-$time>60){
			showerr('³¬Ê±ÁË!!');
		}
		set_cookie('token_secret',mymd5($token."".$secret."".$openid),3600);

		if($rs=$db->get_one("SELECT * FROM {$pre}memberdata WHERE `qq_api`='$openid'")){

可以先看见通过提交的qq_api进入QQmd5 decode出来切割为token secret openid time赋值,我们跟进

if($action=="DE"){	//+ºÅÔÚURLµÄ´«µÝ»á³öÎÊÌâ
		$code=str_replace('QIBOSOFT','+',$code);
	}

    $secret_string = $rand.'9=-)~.,/|(5*j,.^&;?.%#@!';	//ÕâÀï²»¿ÉÒÔÔÙÐÞ¸Ä
	if(!is_string($string)){
		$string=strval($string);
	}
    if($string==="") return ""; 
    if($action=="EN") $md5code=substr(md5($string),8,10); 
    else{ 
        $md5code=substr($string,-10); 
        $string=substr($string,0,strlen($string)-10); 
    }
    //$key = md5($md5code.$_SERVER["HTTP_USER_AGENT"].$secret_string);
	$key = md5($md5code.$secret_string); 
    $string = ($action=="EN"?$string:base64_decode($string)); 
    $len = strlen($key); 
    $code = "";
    for($i=0; $i<strlen($string); $i++){ 
        $k = $i%$len; 
        $code .= $string[$i]^$key[$k]; 
    }
    $code = ($action == "DE" ? (substr(md5($code),8,10)==$md5code?$code:NULL) : base64_encode($code)."$md5code");

	if($action=="EN"){	//+ºÅÔÚURLµÄ´«µÝ»á³öÎÊÌâ
		$code=str_replace('+','QIBOSOFT',$code);
	}
    return $code;
}

我们不看加密过程,我只需要确定在整个加密过程是否还存在除QQ_QBappkey以外的key值(确定是不存在其他的)那现在我们需要看看QQ_QBappkey的值是多少并且怎么来的
image

QQ_QBappkey是内置在config文件中的一处值并非install时生成,那么现在看进入点
if(!$webdb[QQ_login]){
	showerr('该功能已关闭');
}

if(!table_field("{$pre}memberdata",'qq_api')){
	$db->query("ALTER TABLE `{$pre}memberdata` ADD `qq_api` VARCHAR( 32 ) NOT NULL AFTER `username`;");
	$db->query("ALTER TABLE `{$pre}memberdata` ADD INDEX ( `qq_api` );");
}


if($webdb[QQ_login]==2){

首先判断功能是否开启(默认是开启),其次是否开启公共接口(默认开启)


文章来源: https://forum.90sec.com/t/topic/285
如有侵权请联系:admin#unsafe.sh