PHP知名开发框架Laravel,之前在官方博客通报了一个高危SQL注入漏洞,这里简单分析下。

首先,这个漏洞属于网站coding写法不规范,官方给了提示:

但官方还是做了修补,升级最新版本V5.8.7可修复。

我们先定位下这里:

Illuminate\Validation\Rule
   

官方推荐的写法是:

Rule::unique('users')->ignore($id),
   

如果网站coding没有预先对$id的值做处理时,用户可以直接传递恶意数据给ignore函数,就会导致SQL注入。

我们来跟一下函数:

\Illuminate\Validation\Rules\Unique.php class Unique {

... public function ignore($id, $idColumn = null) { if ($id instanceof Model) { return $this->ignoreModel($id, $idColumn);

        } $this->ignore = $id; $this->idColumn = $idColumn ?? 'id'; return $this;

    }
   

这里我们不考虑把$id写成实例的情况,$id是用户可控的话,$idColumn直接写为空即可,最后赋值情况如下:

$this->ignore = $id; $this->idColumn = 'id';
   

链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424

如果网站代码类似这样构造的话,黑客输入的值就属于可控状态:

$id = $request->input('id');
   

最后我们会走到这儿:

Illuminate\Validation\Rules\Unique.php public function __toString() {

        ...

        ...

    }
   

我们看下关键的代码变更:

Illuminate\Validation\Rules\Unique.php

V5.8.7【最新版】 public function __toString() { $this->ignore ? '"'.addslashes($this->ignore).'"' : 'NULL',

    }

Illuminate\Validation\Rules\Unique.php

V5.8.4 public function __toString() { $this->ignore ? '"'.$this->ignore.'"' : 'NULL',

    }
   

这里最新的代码v5.8.7,把$this->ignore直接给addslashes了,以前这里是没有防护的。

有趣的是,笔者对比了下diff,期间官方还试图对其他引用的地方进行过滤。最后还是在__toString处,进行了统一的过滤。

最后提一句,后面的代码会进入DatabaseRule,进行后续SQL规则匹配。

Illuminate\Validation\Rules\DatabaseRule.php
   

这之后就没有再进一步处理,接着形成了SQL注入。

浅析PHP框架Laravel最新SQL注入漏洞的更多相关文章

  1. Drupal 7.31版本爆严重SQL注入漏洞

    今早有国外安全研究人员在Twitter上曝出了Drupal 7.31版本的最新SQL注入漏洞,并给出了利用测试的EXP代码. 在本地搭建Drupal7.31的环境,经过测试,发现该利用代码可成功执行并 ...

  2. 齐博cms最新SQL注入网站漏洞 可远程执行代码提权

    齐博cms整站系统,是目前建站系统用的较多的一款CMS系统,开源,免费,第三方扩展化,界面可视化的操作,使用简单,便于新手使用和第二次开发,受到许多站长们的喜欢.开发架构使用的是php语言以及mysq ...

  3. DedeCMS V5.7sp2最新版本parse_str函数SQL注入漏洞

    织梦dedecms,在整个互联网中许多企业网站,个人网站,优化网站都在使用dede作为整个网站的开发架构,dedecms采用php+mysql数据库的架构来承载整个网站的运行与用户的访问,首页以及栏目 ...

  4. 【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现

    影响版本 wordpress < 5.8.3 分析 参考:https://blog.csdn.net/qq_46717339/article/details/122431779 在 5.8.3 ...

  5. 网站sql注入漏洞修复方案之metinfo 6.1.0系列

    近日,我们SINE安全对metinfo进行网站安全检测发现,metinfo米拓建站系统存在高危的sql注入漏洞,攻击者可以利用该漏洞对网站的代码进行sql注入攻击,伪造恶意的sql非法语句,对网站的数 ...

  6. Joomla CMS 3.2-3.4.4 SQL注入 漏洞分析

    RickGray · 2015/10/26 11:24 昨日,Joomla CMS发布新版本3.4.5,该版本修复了一个高危的SQL注入漏洞,3.2至3.4.4版本都受到影响.攻击者通过该漏洞可以直接 ...

  7. sqlmap查找SQL注入漏洞入门

    1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使用前请先使用扫描工具扫出sql注入点 ...

  8. WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞

    漏洞名称: WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞 CNNVD编号: CNNVD-201310-499 发布时间: 2013-10-23 更新时间: 20 ...

  9. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)

    漏洞版本: mod_accounting 0.5 漏洞描述: BUGTRAQ ID: 62677 CVE ID: CVE-2013-5697 mod_accounting是Apache 1.3.x上的 ...

随机推荐

  1. 阿里云Centos7用putty ssh链接掉线

    解决方法:修改云服务器 ssh 配置文件(修改前一定要先备份) (1)打开配置文件: vim /etc/ssh/sshd_config 1 (2)找到下面两行: ClientAliveInterval ...

  2. element表格的滚动条在合计上边

    默认滚动条是在下边的,不好看,这里改一下 修改样式.完美解决: .el-table { overflow-x: auto; } .el-table__header-wrapper, .el-table ...

  3. 8. Android加载流程(打包与启动)

    移动安全的学习离不开对Android加载流程的分析,包括Android虚拟机,Android打包,启动流程等... 这篇文章  就对Android的一些基本加载进行学习. Android虚拟机 And ...

  4. 前端开发者必备的Nginx知识

    摘要: 最常用的Web服务器 -- Nginx 原文:前端开发者必备的Nginx知识 作者:ConardLi Fundebug经授权转载,版权归原作者所有. Nginx在应用程序中的作用 解决跨域 请 ...

  5. Linux的基本指令-Linux从入门到精通第二天(非原创)

    文章大纲 一.指令与选项二.基础指令(重点)三.进阶指令(重点)四.学习资料下载五.参考文章   一.指令与选项 什么是Linux的指令?指在Linux终端(命令行)中输入的内容就称之为指令.   一 ...

  6. 使用paginate方法分页无法判断获取的数据是否为空

    问题:使用paginate方法分页无法判断获取的数据是否为空,在模板里面无法判断数据是否为空,比如在商品列表当中,当没有商品时无法判断生成的对象为空,所有就什么都不显示了. 解决办法: $newsDa ...

  7. HDU5952 dfs+剪枝

    题目分析: 对于给出的n个点和m条边,求这个图的完全联通子图的数量(每次查询的子图的大小为s),对于本题而言,很容易想到的是dfs暴力和这个点相连的所有的点,并且判断这个图是否是度为s 的完全联通子图 ...

  8. VMware下安装Ubuntu虚拟机

    ubuntu系统是以桌面应用为主的.当下最火的linux操作系统,具有实用的界面,并且完全免费. 在Ubuntu的 Linux 世界里,已经不再只是简陋的界面+命令行,而是一款华丽时尚且无比实用的操作 ...

  9. python基础之函数重点

    函数的返回值 现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪. 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值. 需要注意的是: return是一个函数结束的 ...

  10. 接口测试中,数据驱动时,参数各类型,空或None的处理

    天天说接口测试,天天说数据驱动,但网上的各种教程太烂,遇到实际情况就傻眼了. 来来来,我们看一个例子 假设,有下面这样一个接口,获取用户信息,可以带的参数如下: 用户名(uname) str(),非必 ...