前言

提交的某微sql注入被公开了,网上有不少分析了,看了几篇文章,没有分析到要点。
这里来解释一下。

漏洞分析

sql注入触发点是在mobile/plugin/browser.jsp
这里对keyword 有一次url解码
image-20230305152302716
在weaver.mobile.webservices.common.BrowserAction 中也有一次解码操作
image-20230305152430580
并且在此类的某些功能中,还有着sql拼接操作,keyword参数经过三次url编码,绕过了其安全过滤,并拼接到sql语句中,导致sql注入。
sql注入也就到这里分析完了,那么还有两个问题,怎么绕过权限的?怎么后续利用?

绕过权限

看一下旧的权限判断
image-20230305152729141
判断为/mobile/后
会有黑白名单的校验,
白名单无所谓,那么黑名单怎么绕过呢?
黑名单使用的是

path.indexOf(url) 

来判断是否相等,如果我们能构造出特殊的url,即可绕过。
但是,在这之前以及使用过super.path(path) 来标准化url了,
看看逻辑
image-20230305153017613
这里存在一个逻辑问题,先是去掉//,再去掉空格,
如果我们的路径是 /%20/,标准化过后即为 //
绕过indexof的判断。
新的逻辑已经修复了
image-20230305153927006

利用

这个功能下,很多是可回显的,我们只要通过联合注入,构造所需返回的数据,找到一个String返回点即可,
image-20230305153942535
某微大部分情况下是sqlserver,并支持堆叠注入,但是其防御机制将;、--+等符号给过滤了,我们怎么进行堆叠注入呢?
实际上,sqlserver堆叠注入并不需要 ;
image-20230305154147881
所以,相应构造即可堆叠注入。