PHPOK 5.3 前台注入
==================
一、漏洞简介
------------
二、漏洞影响
------------
PHPOK 5.3
三、复现过程
------------
### 漏洞分析
灵活获取参数:\$this-\>get()方法
framework / init.php#get
最后的公共函数get($ id,$ type =“ safe”,$ ext =“”)
{
// PGC进入获取
$ val = isset($ _ POST [$ id])?$ _POST [$ id]:(isset($ _ GET [$ id])?$ _GET [$ id]:(isset($ _ COOKIE [$ id])?$ _COOKIE [$ id]:''));
if($ val ==''){
if($ type =='int'|| $ type =='intval'|| $ type =='float'|| $ type =='floatval'){
返回0 ;
} else {
return”;
}
}
//判断内容是否有转义,所有未转义的数据都直接转义
$ addslashes = false;
if(function_exists(“ get_magic_quotes_gpc”)&& get_magic_quotes_gpc()){
$ addslashes = true;
}
if(!
$ addslashes){ $ val = $ this-> _ addslashes($ val);
}
返回$ this-> format($ val,$ type,$ ext);
}
跟进format函数:framework / init.php#format
最终的公共函数格式($ msg,$ type =“ safe”,$ ext =“”)
{
if($ msg ==“”){
return ;;
}
if(is_array($ msg)){
foreach($ msg as $ key => $ value){
if(!is_numeric($ key)){
$ key2 = $ this-> format($ key);
if($ key2 ==``|| in_array($ key2,array('#','&','%'))){
unset($ msg [$ key]);
继续;
}
}
$ msg [$ key] = $ this-> format($ value,$ type,$ ext);
}
if($ msg && count($ msg)> 0){
返回$ msg;
}
返回false;
}
if($ type =='html_js'||($ type =='html'&& $ ext)){
$ msg = stripslashes($ msg);
if($ this-> app_id!='admin'){
$ msg = $ this-> lib('string')-> xss_clean($ msg);
}
$ msg = $ this-> lib('string')-> clear_url($ msg,$ this-> url);
返回addslashes($ msg);
}
//转义去除
$ msg = stripslashes($ msg);
//格式化处理内容
开关($ type){
case'safe_text':
$ msg = strip_tags($ msg);
$ msg = str_replace(array(“ \\”,“'”,'“',” <“,”>“),'',$ msg);
break;
情况'system':
$ msg =!preg_match(“ / ^ [a-zA-Z] [a-z0-9A-Z \ _ \-] + $ / u”,$ msg)吗?false:$ msg;
打破;
情况'id':
$ msg =!preg_match(“ / ^ [a-zA-Z] [a-z0-9A-Z \ _ \-] + $ / u”,$ msg)吗?false:$ msg;
打破;
情况'复选框':
$ msg = strtolower($ msg)=='on'吗?1:$ this-> format($ msg,'safe');
打破;
情况'int':
$ msg = intval($ msg);
打破;
情况'intval':
$ msg = intval($ msg);
打破;
情况'float':
$ msg = floatval($ msg);
打破;
情况'floatval':