代码审计之如何找到phpcms的代码执行漏洞

匿名者  1937天前

图片.png


概述

PHPCMS是一款网站管理软件。该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性化网站的设计、开发与维护。它支持众多的程序组合,可轻松实现网站平台迁移,并可广泛满足各种规模的网站需求,可靠性高,是一款具备文章、下载、图片、分类信息、影视、商城、采集、财务等众多功能的强大、易用、可扩展的优秀网站管理软件。

——来自百度百科

漏洞详情

最近看了下phpcms,发现一个代码执行漏洞,比较菜,大佬轻喷。简单说下我的思路。先找到漏洞函数 ---> 判断参数是否可控 ---> 定位功能模块

搜一下敏感函数。这里以“eval”为例:

图片.png

大致浏览一遍,然后发现在/install_package/phpcms/libs/functions/global.func.php这个文件的289-302行的“string2array”方法里调用了eval函数。如下:

图片.png

发现string2array方法的参数可控,看传入的参数,如果参数以array”字符开头,就执行eval,而且是双引号包裹,根据这个语法,开发者是想把array(1 => 2,3 => 4)”这种字符串调用eval来转成数组,或者把“{‘1’:’2’,’3’:’4’}”这种JSON格式转成数组。这里主要看第一种情况。找下哪里调用了“string2array”方法。图片.png

找到两个地方调用了“string2array”方法,看其中一个地方。在/install_package/phpcms/modules/member/member_model.php文件的37-102行调用了“string2array”方法

图片.png

看下代码逻辑。string2array($model_import)的$model_import来自于@file_get_contents($_FILES['model_import']['tmp_name']),意思是将上传文件的文件内容赋值给$model_import,并传入“string2array”。这里没有经过任何过滤。所以这里可以利用上传文件的内容控制$model_import的值,从而执行代码。

从以上信息得出,漏洞点位于上传文件的地方。根据phpcms的路由构造访问路径:

http://127.0.0.1/phpcms/install_package/index.php?m=member&c=member_model&a=add&pc_hash=*****http://127.0.0.1/phpcms/install_package/index.php?m=content&c=sitemodel&a=import&pc_hash=*****

图片.png

图片.png

回到第一步构造payload要求: 文件内容以array”字符串开头。这里可以自己构造上传包,也可以直接上传构造好的文件。

为了方便,我直接构造了1.txt,内容为“array(1);$b=phpinfo();” ,如下图:

图片.png

点击“上传“,成功执行命令,另一处同理:

图片.png

后记

本文主要结合实际简单讲一下代码审计的思路,供新手参考,大佬轻喷。

图片.png


本文由白帽汇原创,转载请注明 来自白帽汇Nosec:https://nosec.org/home/detail/2120.html

最新评论

ss  :  我们是菜的不能再菜了
1936天前 回复
xiannv  :  大家好我是菜**
1707天前 回复
昵称
邮箱
提交评论