Laravel漏洞详解-第二弹

  • A+
所属分类:安全文章
Laravel漏洞详解-第二弹

Laravel漏洞详解-第二弹

作者:Catsay

Laravel漏洞详解-第二弹

圈子本着回馈粉丝的原则,免费给我们的粉丝分享精华文案,请大家不用用于商业,维护圈子的版权违者必究!有需要完整版pdf的小伙伴,最后有小编的微信,小编会将文档发送给您。

                                                        ——圈子社区

Laravel漏洞详解-第二弹

0x3 不规范的写法导致的注入

我们先来说一下 Laravel 是可以记录语句的

Laravel漏洞详解-第二弹

我们来看下面的风骚怪一号写法:

Laravel漏洞详解-第二弹

这是百分百会出现注入的一个写法,他没有过滤直接就拼接了语句拿去执行。我们去执行一下看看。

Laravel漏洞详解-第二弹

返回了 true ,那么我们去加一个单引号呢?

Laravel漏洞详解-第二弹

多么熟悉的数据库报错!这就是典型的 SQL 注入。 

我们的 Laravel 是带了有直接拼凑语句的写法的。

就是使用 whereRaw或者selectRaw

Laravel漏洞详解-第二弹

这时候我们去查询一下。

Laravel漏洞详解-第二弹

正常是都可以查出来的,这时候我们去注入一下。http://a.com/index?id=1 union select 1,2,3,4 #

Laravel漏洞详解-第二弹

然后我们可以看到这里引发了注入。如果说见到了拼凑出来的 SQL 语句,这里我们就要当心一下了,我们如何在这里修复这个漏洞 呢?


修改这一条语句为:

$data = DB::table("users")->whereRaw("id=?",$id)->get(); 

这样就不会存在注入了。我们再去查询一下

Laravel漏洞详解-第二弹

我们就发现会把绑定值带进去,这里下面的带入 SQL 语句就无效了。我们下面就来大概分析一下这个注入是怎么产生的。

Laravel漏洞详解-第二弹

首先得到 $id ,我们跟进去看到实例化对象

Laravel漏洞详解-第二弹

我们继续走,来到 whereRaw

$this->wheres[] = ['type' => 'raw', 'sql' => $sql, 'boolean' => $boolean]; 这里我们走下去看一下 $this 的值

Laravel漏洞详解-第二弹

然后 addBinding

Laravel漏洞详解-第二弹

也是对 $this 进行赋值,继续走来到 get()

Laravel漏洞详解-第二弹

我们来看一下它怎么带入我们的 SQL 语句的 来到 onceWithColumns 还是跟之前分析一样走进 SQL 查询,我们直接走到 compileSelect ,看 他如何进行拼接

Laravel漏洞详解-第二弹

我们可以看到经过拼凑的语句是带着注入的,然后一路 F8 到 getBindings

Laravel漏洞详解-第二弹

我们可以看到我们的 Bindings 值是空的,所以不会进行任何替换 紧接着来到了 select ,走进去

Laravel漏洞详解-第二弹

跟到 prepared 这里

Laravel漏洞详解-第二弹

我们的 $query 没有任何变化,所以执行之后就会引发注入。这就是我们完整的注入流程


Laravel漏洞详解-第二弹


本文始发于微信公众号(Secquan圈子社区):Laravel漏洞详解-第二弹

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: