问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
SRC挖掘之“捡”洞系列
渗透测试
在SRC挖掘中,当输入单引号,出现报错,会不会高兴的跳起来,然后打开sqlmap,level设到最高,以为自己竟然能捡到洞,运气真好,结果却是does not seem to be injectable。
### 前言 在测试过程中接触到一个从没有见过的数据库,不过好在有AI的加持,其次也很幸运地有一个能线上直接用的数据库网站,造就了这次“捡”洞之旅。 ### 发现过程 开局一个登录框,挂上burp,先抓个登陆包看看,可以看到跟网址有区别应该是个前后端分离的网站,遇到前后端分离的网站时复制一下数据包的url,去访问一下看是否为springboot搭建的,这个网站运气很好是springboot,使用工具测试看看是不是有泄露,有一个env泄露,env里面通常会有各种key啊,真是让我欢喜。     打开查看后,只想说一句,梦里啥都有,一点用都没有,怪不得一直留着没关了。  固定密码进行爆破,没任何结果,一群大佬虎视眈眈,也不会留给你啊。 查看熊猫头,也没什么有用的东西,有一个没见过的网址,访问后,发现是swagger界面。难道这次真掏上了?   swagger基本上就是去测试接口,看看是否有未授权,泄露等漏洞。打开接口进行测试,发现没有任何返回,可以看到首先端口不一样,并且访问的网址是本地127.0.0.1。尝试将接口拼到该网址下,发现是有回显的,证明是可以用的,可能是需要其他东西,并没有搞成,所以选择跳过。   查看其他接口,发现有些接口是会给一些需要的参数的,直接拼凑进行测试,数据库报错,运气太好了。   仔细查看报错信息,是在3的地方出现了报错,可以看到是成功带入到语句中的,并且可以发现该数据库是clickhouse数据库。这种数据库是列式数据库,与mysql数据库不同,如果感兴趣的话可以看一下这篇文章,讲的还挺详细的。  ```php https://mp.weixin.qq.com/s/zAAteksBIvCXaqzCMGqAMw ``` 既然带入到数据库了,直接上sqlmap进行测试。结果没有结果。  #### 测试过程 回到数据包中,参数logstore,会不会是路径呢,输入/tmp/log发包,/报错,删除第一个/后发现本来带入的是tmp/log,但是最后显示出来的只剩/log,前面的tmp没了,难道是tmp对了?将/log删除,此时数据库不再报错,但是显示tmp表不存在。    到这先稍微了解一下语法,在clickhouse数据库中,查询表名的语法例子:如果有数据,select *from default.actors  如果没有表不存在没有数据,select* from default.actor1  对比一下漏洞网站的报错不存在tmp表,大概还原一下查询语句 ```php SELECT *from apaaslog.tmp WHERE 1 = 1 AND appid = '1' AND tenantname != '' AND receive_date IN (today(), yesterday()) ORDER BY tenantname ASC ``` 在演示网站可以看到也是有log相关的表名的,结合一下该系统的title就是日志管理系统,并且这种数据库大多数是用来做大数据分析的,猜测是否该系统存着该厂商的一些日志,难道这个系统就是类似于某音,根据喜好做分析推送的?  想到这回到刚开始发现的/env泄露,应该是给这些企业做分析的。可以看到网站都是以公司名为开头,格式为:公司名.厂商主域.com。   到此想到既然tmp不存在,是不是它使用公司名作为日志文件的呢?将env中的子域名进行收集,使用ai查找关于日志文件的构造,利用脚本直接进行生成日志文件。放入burp中,进行爆破。    发现问题,生成的日志名在爆破过程中显示的是Database test doesn't exist,而不是Table apaaslog.tmp doesn't exist,对比发送的数据一个是tmp,另一个是test.log,最后发现是点的问题,也就是说它会把点前面的识别成数据库,如果我们用一个系统自带的数据库和数据表,这样的话岂不是语句的条件就成立了。  在clickhouse中,system.tables是系统自带的表,直接进行测试,报错显示的是没有相关的列,证明SQL语句是完整的执行了,只不过是前面做筛选的列这个表中没有,庆幸的是爆出了真正的sql语句。其中$$包含的就是数据包的参数。虽然拿到了真正的语句,但是在测试时前面的限制条件我们是无法更改的,所以只能对语句后面做测试,所以还是得找一个满足限制条件的表,只能继续爆破了,并且只要加上点他就会默认点前面是数据库,回想到演示网站中的日志表后缀为\_log,将点改成\_重新生成,然后继续爆破。   ```php SELECT DISTINCT tenantcode, tenantname from $system.tables$ WHERE 1 = 1 AND appid = '1' AND tenantname != '' AND receive_date IN (today(), yesterday()) ORDER BY tenantname ASC ``` 成功爆破出一个表  #### 利用过程 直接访问发现并没有任何信息,在mysql数据库中有注释符--和#用来做注解,但在渗透测试过程中,更多的是用来注释后面要执行的语句,在clickhouse中同样也有--,但是在clickhouse中需要加上分号(;--),成功返回信息。   既然可以注释掉后面的where语句,当然也可以添加sql语句进行查询,例如查询数据库。到此算是初步找到了漏洞点,后续就要围绕这个点继续扩大危害。  在该数据库中存在一个url函数本意是对向外访问然后将数据插入到数据库,但是在渗透测试里,我们可以把它看成ssrf的利用点,先说一下我的当时的思路,首先利用dnslog可以看到它回显的ip地址,通过查询发现是腾讯云,既然是云上的就查元数据,获取凭证,拿下该数据库,但是不幸的是没有设置cam(类似于阿里云的RAM),使用到的语句为 ```php select * from url('http://metadata.tencentyun.com/latest/meta-data/', CSV, 'column1 String, column2 UInt32') ```   到此我们已经确定是存在ssrf的,我们只是想进一步去扩大危害,比较平常的利用方式网上一堆,在这也就不说的,这里我们只针对clickhouse做利用。在clickhouse数据库中有一个system.clusters表放着数据库集群ip以及端口开放情况,通过漏洞点可使用命令select \* from system.clusters进行查询,就能得到数据库集群的相关信息,这样就可以直接配合url函数对相关ip进行进一步测试了。  与此同时,clickhouse集群中,有一个专门的端口是用来进行数据查询的,就是8123,使用方式为http://IP:8123?guery=SQL语句,同样也可以配合url函数进行使用,可惜的是这个系统做的权限校验,没办法继续进一步利用,没法将中危利用成高危。  到这再次回到开局单引号报错,其实我们已经能任意执行sql语句了就没必要再管他了,但是sql注入也是洞啊,并且他应该是有注入只能报错回显才能被识别,现在已经得到了一个表,语句也就可以正常执行了,sqlmap直接测试,成功跑出注入。  其中由于多个接口使用了logstore参数,所以也是造成了多个接口的sql注入和sql语句执行。这里也就不一一列举了大提思路是一样的。    #### 总结 这几个漏洞没有多大的难度,更多的是查找相关大佬的漏洞文章和一些官方的文档,一步一步靠拿到的线索去猜,去完善测试思路,我相信如果是mysql数据库,各位大佬挖到这些漏洞手拿把掐,但是可能对不熟悉的数据库会忽视一些东西。相信各位大佬结合mysql也会有更多的挖掘思路,如果有我忽视的点和思路还请各位大佬指教,毕竟我也是一边看文档一遍挖的。最后放上那个使用clickhouse的演示网站,可以直接在上面测试clickhouse的相关语法https://play.clickhouse.com。
发表于 2025-08-01 09:41:38
阅读 ( 602 )
分类:
渗透测试
3 推荐
收藏
0 条评论
请先
登录
后评论
_7
技术爱好者
2 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!