最近几天在入门ThinkPHP5.1,然后随缘找了一个CMS 来练练手。于是找到了Hsycms,发现是基于ThinkPHP5.0开发的,问题不大,说不定有其他收获。但说起HSY,就不得不说到CTF男子天团K&K……

SQL注入
审计过程
首先看index模块里面的公共函数,发现prevNext函数里面where方法查询的条件是字符串,并且里面有变量。

全局搜一下发现app\index\controller\Show.php里面的index方法调用了这个函数。

反向跟一下发现变量id是可控的,于是可以造成了SQL注入。

漏洞利用
首先看一下路由

查进数据库查一下entitle

构造payload:
/news/151) and if(#inject#,sleep(1),1) and ( 1=1

小结
在where方法使用字符串条件时,若条件里面有可控变量应该配合预处理机制确保更加安全。

字符串条件
使用字符串条件直接查询和操作,例如:
Db::table('think_user')->where('type=1 AND status=1')->select();
最后生成的SQL语句是
SELECT * FROM think_user WHERE type=1 AND status=1
使用字符串条件的时候,建议配合预处理机制,确保更加安全,例如:
Db::table('think_user')->where("id=:id and username=:name")->bind(['id'=>[1,\PDO::PARAM_INT],'name'=>'thinkphp'])->select();
via:ThinkPHP5.0完全开发手册