ce安全网绿色资源分享

教程资讯|常用软件|安卓下载|下载排行|最近更新

软件
软件
文章
当前位置:首页网络安全网络安全文章 → ThinkPHP3.2.x框架SQL注入

ThinkPHP3.2.x框架SQL注入

时间:2018-06-02 07:16:39人气:作者:本站作者我要评论

环境搭建

这里我们使用ThinkPHP3.2.3完整版来进行实验

我们先安装好phpstudy,然后将下载好的ThinkPHP3.2.3完整版解压,将里面的thinkphp拷贝至phpstudy的网站根目录下的thinkphp32文件夹下,php版本这里用5.6。在thinkphp32目录下新建一个index.php文件,内容如下:

  1. <?php
  2. define("APP_PATH","./Application/");
  3. define('APP_DEBUG',True);
  4. include "ThinkPHP/ThinkPHP.php";

浏览器访问http://localhost/thinkphp32/index.php ,会在thinkphp32目录下生成一个Application文件夹,目录结构如下:

Application
├─Common         应用公共模块
│  ├─Common      应用公共函数目录
│  └─Conf        应用公共配置文件目录
├─Home           默认生成的Home模块
│  ├─Conf        模块配置文件目录
│  ├─Common      模块函数公共目录
│  ├─Controller  模块控制器目录
│  ├─Model       模块模型目录
│  └─View        模块视图文件目录
├─Runtime        运行时目录
│  ├─Cache       模版缓存目录
│  ├─Data        数据目录
│  ├─Logs        日志目录
│  └─Temp        缓存目录

修改 thinkphp32\Application\Home\Controller\IndexController.class.php 文件代码,内容如下:

  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class IndexController extends Controller {
  5.     public function index(){
  6.         $condition["name"] = I("name");
  7.         $data["pass"] = "1998";
  8.         $result = M("users")->where($condition)->save($data);
  9.     }
  10. }

配置连接数据库的文件 Application\Common\Conf\config.php ,内容如下:

  1. <?php
  2. return array(
  3.     'DB_TYPE'   => 'mysql', // 数据库类型
  4.     'DB_HOST'   => 'localhost', // 服务器地址
  5.     'DB_NAME'   => 'thinkphp', // 数据库名
  6.     'DB_USER'   => 'root', // 用户名
  7.     'DB_PWD'    => 'root', // 密码
  8.     'DB_PORT'   => 3306, // 端口
  9.     'DB_PREFIX' => ''// 数据库表前缀 
  10.     'DB_CHARSET'=> 'utf8', // 字符集
  11.     'DB_DEBUG'  =>  TRUE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增
  12. );

漏洞分析

这次,我们还是根据payload,使用正向审计的方式来进行本次审计工作。首先我们来看一下我们创建的 thinkphp32\Application\Home\Controller\IndexController.class.php 文件代码,程序使用 I 方法来安全获取 username 变量

我们跟进 I 方法看看, I 方法位于 thinkphp32\ThinkPHP\Common\functions.php 文件中,可以看到 $input 变量的值等于超全局数据 $_GET 的值

接着主要是对获取到的变量,使用 htmlspecialchars() 进行过滤

函数尾部使用了thinkphp自定义的过滤该方法 think_filter

该方法也在这个文件中定义,代码如下。可以清楚的看到并没有过滤 bind

  1. function think_filter(&$value){
  2.     // TODO 其他安全过滤
  3.     // 过滤查询特殊字符
  4.     if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i',$value)){
  5.         $value .= ' ';
  6.     }
  7. }

再回到 thinkphp32\Application\Home\Controller\IndexController.class.php 文件,看语句 $result = M("users")->where($condition)->save($data);我们跟进 M 方法, M 方法的话就是新建了一个 Think\Model类

save 方法,在程序末尾有个 update 操作

update 方法位于 thinkphp32\ThinkPHP\Library\Think\Db\Driver.class.php 文件中, parseSet 方法主要做了set[0] =password=:0 ,我们主要关注 parseWhere 方法

我们跟进 parseWhere 方法,发现其中拼接了经过 parseWhereItem 方法处理的语句

我们跟进 parseWhereItem 方法,会发现当 $val[0] 等于 bind 的时候,直接将参数进行拼接

最终,执行攻击者构造的 SQL 语句

ThinkPHP3.2.x框架SQL注入

相关文章

猜你喜欢

  • Ougishi绿色版下载 V4.00 中文版

    2020-06-19 / 561k

  • 谷歌地图下载助手睿智版破解下载 V9.5绿色版

    2020-06-19 / 32.7M

  • OfficeFIX中文破解版V6.110 注册版

    2020-06-19 / 26.8M

  • Plotagraph破解版V1.2.0 免费版 32/64位

    2020-06-19 / 31.5M

  • IP查详细地址工具下载 V1.1 官方免费版

    2020-06-19 / 408K

  • 内存扫把中文版下载V1.97绿色版

    2020-06-19 / 1.3M

网友评论

验证码:

请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

最新评论

已有人参与,点击查看更多精彩评论

关于CE安全网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2019-2029 cesafe.com 【CE安全网】 版权所有 蜀ICP备19039426号-2| 蜀ICP备19039426号-2

声明: 本站为非赢利性网站 不接受任何赞助和广告 所有软件和文章来自互联网 如有异议 请与本站联系 技术支持:ce安全网