ThinkPHP的SQL注入问题
0x00 前言
由于之前对于PHP的了解仅限于原生PHP,因此最近利用空闲时间学习了thinkphp3和thinkphp5两个版本的框架,学习后发现两个版本差别还是挺大的,比如:
1、在tp3中Index控制器类命名为IndexController.class.php,在tp5中则为简单的Index.php
2、在tp3中的单字母函数被tp5中提供的助手函数给替代了,如模型层操作时:
在tp3中为:
M('user')->where(["username" => $username])->find();
在tp5中则为:
db('user')->where("username", $username)->find();
3、使用 /id/1001 方式传参时:
在tp3中可以从GET参数中获取:
$data = $_GET['id'];
在tp5中,则改为了使用Request对象的param()方法获取:
$data = $request -> param();
除了这些,还有很多其他的变化,这里就不一一列举了。
虽然tp3和tp5的差别很大,但是对于代码审计人员来说,语法上的差别是可以很快适应的,我们关注的重点应该是安全方面的变化。因此本篇记录下学习到的tp框架中一些常见的sql注入问题。由于刚开始学习tp框架,所以总结的可能不够全面,后面学习到新的再补充。
0x01 where()方法 + exp表达式
1.1 漏洞代码
如下是在tp3.2.5版本中的漏洞代码:
<?php
namespace Home\Controller;
use Think\Controller;
class HelloController extends Controller
{
public function sqli()
{
// $username = I('username');
$username = $_GET['username'];
$data = M('user')->where(["username" => $username</

本文详细分析了ThinkPHP框架中几种常见的SQL注入漏洞,包括where()+exp表达式、数据查询方法参数可控、where()+bind表达式+save()方法及order()方法的漏洞代码、利用方法及其修复方案。
最低0.47元/天 解锁文章
1996

被折叠的 条评论
为什么被折叠?



