tryhackme ORM Injection

https://tryhackme.com/room/orminjection

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
posted @ 2026-08-26 17:24  sec875  阅读(6)  评论(0)    收藏  举报