51.代码审计-PHP框架MVC类上传断点调试挖掘

在这里插入图片描述

知识点

1.文件上传漏洞挖掘:

  • (1)关键字搜索(函数、键字、全局变量等):比如$_FILES(全局变量),move_uploades_file等
  • (2)应该功能抓包(burp 抓包看路径):寻找任何可能存在上传的应用功能点,比如前台会员中心,后台新闻添加等。
  • (3)漏洞举例:逻辑漏洞-先上传文件再判断后缀名,通过MIME类型来判断文件类型、前端校验文件类型而服务端未校验。

2.MVC开发框架类:

https://www.cnblogs.com/wsybky/p/8638876.html
MVC各部分的职能:

模型Model – 管理大部分的业务逻辑和所有的数据库逻辑。模型提供了连接和操作数据库的抽象层。
控制器Controller - 负责响应用户请求、准备数据,以及决定如何展示数据。
视图View – 负责渲染数据,通过HTML方式呈现给用户。

img

3.Thinkphp框架:

了解怎么查找就行
http://sites.thinkphp.cn/1556331

4.phpstorm+xdebug调试:

调试步骤可参考:
https://mp.weixin.qq.com/s/7K8edea8imalZ8_jJp3ODw
https://blog.csdn.net/yinhangbbbbb/article/details/79247331

文件上传漏洞挖掘过程

  • 搜索$_FILES–>后台中心–>上传图像–>跟踪代码–>逻辑判断
  • 业务功能分析–>会员中心–>上传图像–>跟踪代码–>逻辑判断
  • 搜索文件上传–>会员中心–>上传图像–>跟踪代码–>逻辑判断

演示案例

- PHP文件上传全局变量$_FILES

- PHPStorm+xdebug断点调试演示

- Beescms无框架后台任意文件上传

- Finecms基于前台MVC任意文件上传

- Cltphp基于前台TP5框架任意文件上传

1.PHP文件上传全局变量$_FILES

活用函数定位,全局搜索等相关功能
在这里插入图片描述

2.PHPStorm+xdebug断点调试演示

![在这里插入图片描述](https://img-blog.csdnimg.cn/b22da1d7b71946e28982d4d13d15be91.png

配置好xdebug 后开始调试:

在这里插入图片描述跳出浏览器,你要不断放包才能到指定的登入界面
在这里插入图片描述上传图片到达该界面:
在这里插入图片描述
一步一步放包可以看代码它是怎么走的
在这里插入图片描述

Beescms无框架后台任意文件上传

上传时抓包,看到相关文件名
在这里插入图片描述
在这里插入图片描述搜索相关文件名:文字查找

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

载入源码到审计系统

搜索文件上传——$_FILES

登陆后台查看
在这里插入图片描述

或者抓包

找到参数,指向文件
找代码里是否有过滤函数
双击定位up_file

在这里插入图片描述定位函数:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述再对比前面是对比文件类型mime

在这里插入图片描述

这里file_type 是后缀名
在这里插入图片描述

获取路径文件名验证文件后缀等
上传一个.jpg发现不允许
pathinfo:以数组的形式显示文件的路径 名字 后缀

在这里插入图片描述

匹配到的后缀是txt

在这里插入图片描述

仍是txt
尝试截断%00
此处没有漏洞

换一个代码
抓包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-loaxvIFY-1642338584503)(C:\Users\huangzexin\AppData\Roaming\Typora\typora-user-images\image-20220116204126804.png)]

这个是判断MIME,存在上传漏洞,.php上传成功。

PHP文件上传全局变量$_FILES

PHPStorm+xdebug断点调试演示

在这里插入图片描述在这里插入图片描述

登录后台管理admin
点击步入,依次加载向后执行

在这里插入图片描述

Finecms基于前台MVC任意文件上传

  1. MVC相关概念

在这里插入图片描述

  1. 如何找到文件上传的核心代码?

    发现核心代码(文件上传的代码)不在指向的代码里
    试图view ——dayrui

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChTtNTSD-1642338584510)(C:\Users\huangzexin\AppData\Roaming\Typora\typora-user-images\image-20220116204552604.png)]
在这里插入图片描述

在这里插入图片描述

控制器里找核心代码

在这里插入图片描述

逻辑问题:他先上传 后验证

    public function upload() {

        // 创建图片存储文件夹
        $dir = SYS_UPLOAD_PATH.'/member/'.$this->uid.'/';
        @dr_dir_delete($dir);
        !is_dir($dir) && dr_mkdirs($dir);

        if ($_POST['tx']) {
            $file = str_replace(' ', '+', $_POST['tx']);
            if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){
                $new_file = $dir.'0x0.'.$result[2];
                if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) {
                    exit(dr_json(0, '目录权限不足或磁盘已满'));
                } else {
                    $this->load->library('image_lib');
                    $config['create_thumb'] = TRUE;
                    $config['thumb_marker'] = '';
                    $config['maintain_ratio'] = FALSE;
                    $config['source_image'] = $new_file;
                    foreach (array(30, 45, 90, 180) as $a) {
                        $config['width'] = $config['height'] = $a;
                        $config['new_image'] = $dir.$a.'x'.$a.'.'.$result[2];
                        $this->image_lib->initialize($config);
                        if (!$this->image_lib->resize()) {
                            exit(dr_json(0, '上传错误:'.$this->image_lib->display_errors()));
                            break;
                        }
                    }
                    list($width, $height, $type, $attr) = getimagesize($dir.'45x45.'.$result[2]);
                    !$type && exit(dr_json(0, '图片字符串不规范'));
                }
            } else {

                exit(dr_json(0, '图片字符串不规范'));
            }
        } else {
            exit(dr_json(0, '图片不存在'));
        }
  1. 分析代码段是否存在安全问题

在这里插入图片描述

这个函数:将一个字符串写入文件
在这里插入图片描述

要写入的文件,文件内容
逻辑问题:先上传 后验证

Cltphp基于前端TP5框架任意文件上传

  1. thinkphp

    MVC——操作系统
    thinkphp——操作系统的一个分类(windows)
    在这里插入图片描述

核心代码在框架里

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在个人中心上传文件抓数据包

在这里插入图片描述
参考上一例:mvc 结构
在这里插入图片描述

根据url访问模式决定
分析代码,不如说分析框架
也是逻辑问题——不使用thp官方验证,验证和顺序
上传不成功,抓不到包
前端——view

涉及资源:

ThinkPHP网址导航-教程资源:https://sites.thinkphp.cn/1556331

php MVC框架实例教程:https://www.cnblogs.com/wsybky/p/8638876.html

phpstorm+xdebug调试详细教程:https://blog.csdn.net/yinhangbbbbb/article/details/79247331

参考:
https://www.bilibili.com/read/cv13692186/
https://blog.csdn.net/grb819/article/details/118600611

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月清风~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值