Laravel 5.8 SQL 注入漏洞详解 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Laravel 5.8 SQL 注入漏洞详解

申博_安全工具 申博 128次浏览 已收录 0个评论

0x01 背景

最近研究Laravel框架的代码审计,因为3月份爆出过一个ignore函数的一个漏洞,网上找了些文章,看了下, 自己搭建环境测试,一直没有成功, 自己就详细的审计了一遍

0x02 laravel介绍

Laravel 在全球范围内有着众多用户。该框架在国外很受欢迎,国外用户量远大于国内。当然,国内也有大型企业使用该框架。此次曝出的 SQL 注入漏洞,并不是太通用,需要一定的条件。[直接复制粘贴]

0x03 漏洞测试环境搭建

数据库内容
Laravel 5.8 SQL 注入漏洞详解

代码测试:

$validator = Validator::make($request->input(), [
            'username' => [
                'required',
                Rule::unique("users")->ignore($request->input("id"),$request->input("column"))
                ],
        ]);

        dump($validator->fails());

路由定义:

Route::any("index","UserController@index");

访问测试:
Laravel 5.8 SQL 注入漏洞详解

Laravel 5.8 SQL 注入漏洞详解

理解这个漏洞之前, 需要了解laravel的自动验证机制
Rule::unique(“users”)->ignore($request->input(“id”),$request->input(“column”)) 这种写法不常见,常见的是 Rule::unique(“users”)->ignore($request->input(“id”)) 这种写法, 后面的变量如果不写,默认是id, 写上去代表自定义查询字段.

我们可以把测试环境更改为 Rule::unique(“users”)->ignore($request->input(“id”)) 然后进行代码跟踪调试

0x04 代码跟踪调试

参数提交内容
?username=admin&id=2
直接下断点
Laravel 5.8 SQL 注入漏洞详解

跟踪进入, 注意几个关键点函数即可
关键点1:
ignore函数
Laravel 5.8 SQL 注入漏洞详解

直接对ignore 和 idColumn进行赋值 如果idColumn没有传入,默认为id ,然后进入另一个 toString方法
Laravel 5.8 SQL 注入漏洞详解

漏洞也是主要对这里进行修复
修复后的代码
Laravel 5.8 SQL 注入漏洞详解

laravel社区对这种修复,讨论很多, 认为addslashes 无法根本防止注入, 因为ignore的有些写法还是会引起问题.

后面继续跟踪调试, 就会进入 laravel的PDO操作处理
跟踪的出来的sql语句为:
Laravel 5.8 SQL 注入漏洞详解

后续就是进行 PDO查询操作, 因为没有带入exp,所以会正常执行

0x05 注入演示

因为如果是pdo操作, 注入通常是对键名 进行带入, 如果带入进键值的话, 没有任何效果, 这里关键的突破点就是 ignore函数中的 idColumn 变量, 以及 toString() 在处理 ignore中的处理方式

讲传入的id参数修改为: 1″,”liusha”,”
url为:
Laravel 5.8 SQL 注入漏洞详解

这样传入id,就会对 idColumn 进行覆盖, 默认是id, 现在column 就变为 liusha, 如果这个字段不存在表中 , 这个键名 就会对带入PDO查询操作中,导致报错.
后续生成的sql :
Laravel 5.8 SQL 注入漏洞详解

sql的键值带入了我们出入的 liusha 非法字段
最后导致报错
Laravel 5.8 SQL 注入漏洞详解

提示不存在 liusha这个column.

ok,演示完成.

0x06 总结

这个漏洞是今年3月份爆出来的, 实际开发中, ignore函数用的比较少, laravel的代码审计 , 大部分还是审计一些开发作者在开发中的一些不规范写法导致的漏洞.


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Laravel 5.8 SQL 注入漏洞详解
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址