:你有听过SQL Injection吗?
:有阿
:那你知道怎麽防范吗?
:参数化查询、ORM...
:那你听过ORM Injection吗?
:= =
物件关联对映 Object Relational Mapping 简称ORM,存在於资料库和Model资料容器之间,可以让开发者/使用者更简单安全的去资料库拿取资料,它是利用程序语言去操作资料库语言,实现物件导向概念,同时把SQL的语法进行封装的一种模式,而且通常会提供一组Safe Function来防止SQL Injection攻击。但若使用者使用接受User input的自订function,就特别容易遭到攻击。
而ORM Injection就是对ORM generate的data access model进行注入。这种攻击实际上跟SQL Injection很像,差别是ORM Injection是ORM Layer产生的程序码中存在Injection漏洞。因此不会使用SQL语法进行攻击。可参考: List of object–relational mapping software
ORM产生的object可以使用SQL或SQL的变种对资料库进行CRUD(Create, Read, Update, Delete),但若是一个Web Application使用了未经检查/处理的input参数,就可能受到这种攻击。
Hibernate
这是一个2020年发现的漏洞,Hibernate是一个Java的ORM框架,可以让Java开发者使用它来与MySQL、PostgreSQL互动,攻击者可以透过利用特定的DBMS功能突破HQL语法,将HQL转换为SQL语法
public static String doubleQuotes(String input) {
return input.replaceAll("'", "''");
上述的程序码看起来已经正确的检查已经清理(input.replaceAll),但攻击者只要再'
前加上一个backslash\
就可以简单的绕过限制如:attack\'
或是一个底层资料库为Mysql而且允许FILE权限被资料库用户使用,就可以透过以下方法,从Escape HQL,注入SQL到最後的INTO OUTFILE写入一个web shell:
100 or 6<>'\'' ) or 1=? into outfile "shell.jsp" -- - '
假设一个透过Hibernate查询语法进行的SQL查询注入:
SELECT column FROM table WHERE id = <injection>
以下是网路上别人整理出来可以用於测试HQL Injection的Cheetsheet
也可以参考PayloadsAllTheThings/HQL Injection
Ruby on Rails ActiveRecord
Orders.find_all "customer_id = 123 AND order_date = '#{@params['order_date']}'"
只要往order_date发送OR 1--
就可以成功注入。
下篇预告: NAT Slipstreaming
>>: 【Day 09】- 今天来创造 Ghost Process(基於断链隐藏 Process 的手法)
咦 大家有见网友的经验吗? 在还没见面前是否都是以照片来判断这个人是不是自己的菜? 网站也有一个时...
铁人赛的精神-毅力 终於来到铁人赛的最後一天,当然要来回顾一下这30天发生的点滴及感想罗~ 从Day...
开发工具我们选择Visual Studio Code VSC下载 请帮我点选上面的连结下载 Visu...
今日文章目录 番外篇:浅拷贝 番外篇:深拷贝 小结 ToDoList + 番茄钟时间管理,整体上练...
还没学到这个属性之前,一直以为必须使用到JavaScript,才能让网页有动画的效果,没想到用CS...