DouPHP靶场代码审计漏洞复现

目标

  • 删除目标douphp\data\install.lock文件
  • 注入恶意代码

流程:

1、进入目标网站后台,查看有没有可以利用的漏洞点
  • 进入网站之后,发现后台中有许多图片上传功能
  • 思路1:
    • 尝试使用文件上传漏洞,通过蚁剑连接
    • 获取文件目录之后,删除douphp\data\install.lock文件
2、思路1尝试
  • 选择首页幻灯广告模块,上传含有payload的图片文件

  • 通过抓包,修改后缀名为php,使我们上传的图片文件变为木马文件

  • 修改之后放包,发现不支持php文件上传

在这里插入图片描述

  • 应该是源文件对上传的文件做了过滤

  • 尝试文件上传漏洞的一部分其他方法,发现失败

  • 放弃思路1

  • 再次分析,我们的目标是删除install.lock文件

    • 搜索,查看资料,看是否存在删除文件的漏洞
    • 发现有一种任意文件删除漏洞,其利用函数为unlink()
    • 思路2:通过代码审计,查找是否有unlink()函数以及存在的漏洞
3、思路2尝试
(1)全局搜索函数unlink
  • 发现源代码中一共有24个文件中存在函数unlink

在这里插入图片描述

(2)代码审计
  • 结合网站后台页面以及代码进行初步判断,选择将要审计的文件

在这里插入图片描述

  • 选择出存在漏洞可能性更大的部分文件为优先审计部分
    • 优先级较高的文件:
      • action.class.php
      • index.php
      • mobile.php
审计文件action.class.php
  • @unlink(ROOT_PATH . $file['file']);
    
    • 其中ROOT_PATH为常量,查看后面拼接的变量$file
      • 向上审计又发现变量$number
      • 继续跟踪审计发现$number是全局变量$_REQUEST中的参数,不可控
  • 综上本文件中unlink函数中的参数不可控,进入下一个文件

审计文件index.php
  • if (file_exists($c_a_p = ROOT_PATH . "cache/custom_admin_path.candel.php")) @unlink($c_a_p);
    
    • 其中发现变量$c_a_p
    • 向上审计发现$c_a_p = ROOT_PATH . "cache/custom_admin_path.candel.php"
    • $c_a_p都由常量组成,不可控
  • 进入下一个文件

审计文件mobile.php
  • @ unlink(ROOT_PATH . M_PATH . '/theme/' . $_CFG['mobile_theme'] . '/images/' . $mobile_logo);
    
  • 其中发现变量$mobile_logo

  • 向上审计发现

    • ` $mobile_logo = $dou->get_one("SELECT value FROM " . $dou->table('config') . " WHERE name = 'mobile_logo'");`
      
    • 即从数据库中获取字段mobile_logo的值

    • 去后台对应的模块,查看其功能
      在这里插入图片描述

    • 发现只有一个上传文件的功能,在本地的后台系统中尝试上传文件

在这里插入图片描述

  • 上传完成之后,发现出现了删除LOGO的功能,即上面unlink函数部分代码的功能

  • 推测该点有可能存在文件删除漏洞的地方

  • 继续审计代码

    • @ unlink(ROOT_PATH . M_PATH . '/theme/' . $_CFG['mobile_theme'] . '/images/' . $mobile_logo);
      
    • 发现代码中的图片路径较为复杂,使用exit()或者die()函数替换代码中的unlink()函数,退出脚本并将其内容(路径)输出

在这里插入图片描述

  • 发现其文件路径如上,所以

    • 如果可以修改文件路径将其替换为install.lock,即可解决
  • 向上审计

    • $dou->query("UPDATE " . $dou->table('config') . " SET value = '$value' WHERE name = '$name'");
      
    • 发现这段代码有修改功能,有可以利用的可能性

  • 向上审计

    • foreach ($_POST as $name => $value)
      
    • 将变量$_POST中的键值对拆分为 键 n a m e 值 name 值 namevalue

    • 根据上面的分析

      • 如果要修改路径的话则应使得
        • $name=mobile_logo
        • $value=install.lock的路径
  • 向上审计

    •  if ($_FILES['mobile_logo']['name'] != '') {
                  // 图片上传
                  include_once (ROOT_PATH . 'include/file.class.php');
                  $file = new File(M_PATH . '/theme/' . $_CFG['mobile_theme'] . '/images/'); // 实例化类文件(文件上传路径,结尾加斜杠)
        
                  $mobile_logo = $file->upload('mobile_logo', 'logo'); // 上传的文件域
                  $_POST['mobile_logo'] = $mobile_logo;
              }
      
    • 即我们上传文件之后对其命名与路径的处理过程

  • 向上审计

    • elseif ($act == 'update')
      
    • 即只要有更新操作即可执行其中的代码

4、总结
需要满足的条件
  • 修改文件路径
方法
  • 抓包修改
过程
  • 通过测试我们要修改的value值install.lock的路径就在这个内容上方的位置

  • -----------------------------20720338393213792845923570
    Content-Disposition: form-data; name="mobile_subdir_binding"
    

在这里插入图片描述

  • 修改之后放包,点击删除LOGO

在这里插入图片描述

  • 删除install.lock文件成功

在这里插入图片描述

写马

在这里插入图片描述

查看

在这里插入图片描述

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值