朋友给了一个某传销诈骗的网站,让我帮忙看看,记录一下,尽量还原一下渗透的思路
根据后台页面,告诉你了是**cms
,我第一反应就是代码审计
(因为注册了新账号没有什么权限,做不了什么事情),然后baidu,google都搜不到这个源码,于是用凌风云
搜索看一下,没想到还真有找到了
把文件下载下来,然后放在phpstudy
运行,一模一样,源码找对了
因为这是一个类似于mvc
的cms,所以代码审计之前要弄清楚路由
,不然的话对后面的代码审计部分非常的煎熬,摸清楚路由的方法对于我来讲就是,用phpstorm
的debug
模式一个个往下看。
首先、第一步就是用Seay源代码审计系统进行危险函数搜索
说实话,审的时候,我想直接getshell
,但是文件上传都写的非常死,只允许图片或者xlsx上传,不允许其他后缀名的上传,其次也没有注入点,这条路我就放弃了,然后后面的话我就换了一种思路,从黑盒的方式对源码进行查看,首先,先对后台的登录按钮
进行代码审计,源码如下
解释一下,$_GPC
这个变量我们是可控的,然后如果$_GPC['password']
等于数据库里面md5计算后的密码,那就是登录成功,否则登录失败,但是这里有个问题,那就是它判断的时候是用了==
而不是===
,也就是说这个存在弱类型
,可以直接绕过,存在任意用户登录(后来才发现这是一套基于微擎cms二次开发的,所以这个漏洞在微擎cms
是通用)。简单的说一下弱类型
判断,就是让整数型和字符串进行布尔判断的时候,只取字符串中开头
的整数部分,例子
<?php
var_dump("admin"==0); //true
var_dump("1admin"==1); //true
var_dump("admin1"==1) //false
var_dump("admin1"==0) //true
var_dump("0e123456"=="0e4456789"); //true
?> //上述代码可自行测试
然后它这个是依靠uid
来判断用户,所以我们可以注册
个用户,然后在登录,最后把cookie
改一改就可以实现管理员登录了
因为这套源码,文件上传后缀名控的死死的,然后我也反反复复看了这套源码不止2次了,后面就发现了终于有一个file_put_contents
是可控的了
(文件路径:网站根目录\addons\ewei_shopv2\core\web\member\card.php)
解释一下:$_GPC['card_logolocalpath']
这个是可控的,所以$imgurl
也是可控的,$img
是获取$imgurl
的页面,所以按道理来讲这个也是可控的,然后我们断点在105行
那里,然后按照流程走一遍
大概请求是这个样子
尝试一下把card_logolocalpath
变量改成http://127.0.0.1:81/1.php,发现能成功 读取远程
1.php的内容,但是因为文件名是http://127.0.0.1:81/1.php,导致 file_put_contents
写入失败
想了一会,就想到了一个办法,就是我们读取服务器本地的存在文件,然后在利用http的特性,在url后面添加#
号,然后在利用../
进行绕过,最终利用的办法就是,先在后台找个图片上传
的功能,上传一句话木马的图片
,复制上传后图片的路径,然后card_logolocalpath
写成
images/2/2023/02/uRZ5mti22cfbp5fIpfF20C5fapFBaF.jpg#/../666.php
成功绕过并写入
附上拿下目标的shell