给你一个order by注入点,你能否脱下整个数据库?

故事背景

页面中有如下的表格,可以根据不同的列进行排序,这种动态的需求,开发人员往往使用最简单粗暴的方式来实现,也就给我可乘之机,一个未曾校验的疏忽,也许就是一个G的数据泄露。
在这里插入图片描述
我观察了此页面对应的接口,果然如此,orderColumn参数映入我的眼帘,那一刻我觉得世界都变得明亮了。我呼吸变得急促了,因为我知道,这有可能是我在sql注入领域的第一次实战。其兴奋程度完全不亚于我当年第一次遇到xss的时候,具体博文见我的第一个xss攻击
在这里插入图片描述

牛刀小试

上面说到我猜测orderColumn可能是个注入点,但是我不能确定。
我把这个http接口保存了下来,具体点就是copy as curl,然后导入到postman中,然后使用postman修改orderColumn参数。
不改不知道,一改吓一跳。
我使用了地球人可能都知道的sql注入法, ‘and 1 = 1’
接口响应度的错误信息,给我答案,让我认为这里很有可能是个注入点。
很多人错误信息不脱敏,我太喜欢这类人了,错误信息不脱敏相当于送人头,报错信息包含的信息量大到惊人。出于信息安全的考虑我就不把这段错误贴出来了,因为这段报错信息里面返显了SQL语句。大概是java.sql.SQLException 之类的错误,还有Error while preparing statement xxxx,但是结合这两个错误我发现它的SQL拼接竟然发生自预编译之前,所以这真的是个注入点。

峰回路转

就在我以为老子天下第一,即将开拖库(通过sql注入,拖拽数据库数据的简称)表演的时候,我发现我错了,小丑竟是我自己。
因为我忽略了一个重要的信息,那就是这条sql实际上被执行的地方是Apache Kylin,而不是我之前认为地关系型数据库mysql。可是我对Kylin毫无了解啊,这还能进展的下去吗?幸好,我选择时间做我的朋友,一天,一周,一个月这个注入点一直在,等待我学习Kylin。

柳岸花明

就在我以为小丑竟是我自己的时候,我突然发现小丑竟然不是我自己,这种快乐常人很难想象。

注入点判断和利用

伪代码:
order by xxx limit ? offset ? 其中xxx是注入点
判断: 我通过在参数添加asc和desc,发现返回的数据的顺序发生了变化,从而确定可以注入。

利用: order by类型的注入点如何利用呢?一个是在mysql中利用,另一个是在kylin中利用。
在mysql可以这样:
我去网上搜了一下,有个if函数,配合sleep函数可以实现拒绝服务。
order by if(1=1, sleep(1), 1) 可以通过这个判断大概有多少行,因为每查一行都会sleep(1)

插曲

我被WAF给拦截了
在这里插入图片描述

Guess you like

Origin blog.csdn.net/lineuman/article/details/118734472