这是我在mysql注入领域第一滴血的故事。
当然了,利用别人的缺点并不是一件光彩的事,不过感觉确实挺爽。
起因和过程
需求上有个根据表格字段进行排序的功能。
我观察接口发现接口,有个请求参数叫做orderColumn
,而且传了一个字符串,所以我有理由相信orderColumn的值对应着数据库里面的字段,果不其然,试了试,这是一个sql注入点,但是这个注入点不是100%可以被利用,我需要一步一步往下走。
我修改了几个数值,orderColumn设置为如下的几个值
1, 2,3数字
字符串,猜测列名id, test
if(1=1, 1, sleep(1))
接口错误回显,没有脱敏,这对我来说是个利好消息,从情报的角度来说,我获得了一定的有用信息。
在生产环境试验if注入的时候, orderColumn 为if(1=1,1,sleep(1)),发现我的接口请求被WAF给拦截了。果然,WAF很强大。
于是我转战到测试环境,测试环境和生产代码一致,好处是测试环境没有WAF,如此我便可以深入研究。
我接下来再思考:
是否可以拼接任意的sql?
拼接的字符串有没有被转义?
后端到底用了哪些技术来组装SQL?例如orm还是mybatis?
最后思考是否可以通过sqlmap进行快速的探测?
结局
不过结局并不是我们想象的那么美好,我被打脸了,因为最后发现它根本不是mysql,而是支持sql查询kylin???