在系统中有多处数据导出页面未有权限认证且允许执行SQL查询,并直接把SQL查询结果写到导出文件里面。
以下页面的中的subStrSql参数用于执行SQL语句,注意其中的vn参数的数值:
具体数据包如下:
注:这里只列出四个将查询的结果输出到页面的文件,sta目录下还有其他页面的subStrSql、companyid、toTime参数存在盲注,请厂商自行排查。
这里以http://**.**.**.**/live800/为例进行具体测试,查询用户密码:
拿到账户密码后登陆后台:
在addOperatorUtil.jsp文件中:
live800Page.jsp用于验证管理员权限,然后调用saveFile(request,filePath)保存文件,代码为:
可以看到程序直接从request中获取数据,主要是最终的保存的文件名是怎么处理的:
filePath是保存文件夹由tempFileDir和companyId组成,item.getName().substring(item.getName().lastIndexOf("\\")+1,item.getName().length())获取的就是当前文件名,然后直接使用item.write(new File(fileName))直接写入web目录,整个过程没有过滤后缀导致getshell。
在登陆后台的情况下直接访问:
上传一个jsp文件:
最后访问:
companyId为数字可由数据库中查询得到,也可直接遍历。
列几个受影响的站点: