tryhackme ORM Injection
ORM Injection
ORM 的本意是简化数据库交互并提升安全性
理解 ORM
- 什么是 ORM(What is ORM)

ORM 充当了面向对象编程模型与关系型数据库模型之间的桥梁。ORM 的首要目的是抽象掉数据库层,让开发者直接操作对象,而不必面对表(tables)与行(rows)
- 常用 ORM 框架
Doctrine(PHP)
Hibernate(Java)
SQLAlchemy(Python)
Entity Framework(C#)
Active Record(Ruby on Rails)
ORM如何工作
-
代码中对象与数据库表的映射
-
常见 ORM 操作(增、查、改、删 / CRUD)
-
SQL 注入与 ORM 注入的对比
SQL 注入(SQL Injection):针对原始 SQL 查询
SELECT * FROM users WHERE username = 'admin' OR '1'='1';
ORM 注入(ORM Injection):针对 ORM 框架本身,操纵 ORM 的方法与属性,来影响最终生成的 SQL 查询语句
$userRepository->findBy(['username' => "admin' OR '1'='1"]);
- 利用技术的关键差异

- 配置环境
Eloquent ORM(基于 Laravel)
- 配置数据库凭据
Laravel 使用 .env 文件来存储环境变量
- 配置迁移(Migrations)
创建迁移
识别ORM注入
- 框架与 ORM 注入测试对照

- 识别框架的技术
Cookie
网页源码
HTTP 头
URL 结构
登录页与错误页
ORM注入 - 弱实现
1' OR '1'='1
$users = User::whereRaw("email = '1' OR '1'='1'")->get();
ORM注入 - 存在漏洞的实现
name-%3E%22%27))%20LIMIT%2010%23 → name->"' )) LIMIT 10#
SELECT * FROM `users` ORDER BY json_unquote(json_extract(`name`, '$.""')) LIMIT 10#"')) ASC LIMIT 2
主要在于胡扯烂造,大家就当相声看看吧。【本人不保证技术的实用性,一切文章仅供参考,如有谬错,请留言】

浙公网安备 33010602011771号