通天星CMSV6 远程代码执行漏洞分析
type
status
date
slug
summary
tags
category
icon
password
AI summary
漏洞分析
漏洞入口在
HelpCenterController#loadAllUserInfo()
这里通过
getRequestStringEx
方法获取name参数的值,然后传入helpCenterService#loadAllUserInfo()
先来看getRequestStringEx方法
通过request.getParameter并使用URLDecoder.decode对参数的值进行url解码了!
回过头来继续跟进到
helpCenterService#loadAllUserInfo()
跟进到
helpCenterDao#loadAllUserInfo()
这里将传入的name拼接SQL,构造SQL语句,传入
com.gpsCommon.service.impl.BaseServiceImpl#findByPage()
这里构造了一个countSql,把countSql和原始SQL一起传入
paginationDao#getExtraByNativeSqlEx()
继续跟进后发现,countSql和原始SQL都被在
action.doInHibernate(sessionToExpose)
中执行了。跟进到
com.framework.web.dao.HibernatePaginationCallback#doInHibernate()
这里默认pagination不为空的,而且countHql也不为空,最后只会执行countHql而不会执行Hql。
构造SQL语句
这里可控的name在子查询当中,所以需要闭合
')
并且需要给子查询的结果一个别名但是发现还有waf
WAF绕过
方法一
在SqlFilter里有对参数的SQL注入语句拦截
这里如果URL中出现downloadLogger.action则会返回false,添加
;downloadLogger.action
即可绕过。但是单引号被html实体编码了,跟进获取参数的代码发现
getRequestStringEx
才用的request对象是XssHttpServletRequestWrapperNew
在
XssHttpServletRequestWrapperNew#getParameter()
中参数被html编码了方法二
还有一种绕过方式就是之前获取参数的时候有手动URL解码一次,这里二次编码即可绕过。
sping-mvc.xml配有拦截器
不以do结尾就返回true,所以加一个分号即可
写WebShell
由于使用的自带的mysql,默认secure_file_priv为空,所以可以into outfile写文件。读写文件的目录在mysql/bin,使用../../tomcat/webapps/gpsweb/就可以定位到web路径
Loading...