网站建设建设_太原网站建设_北京高端网站建设_昆明网站建设 ;KPQ">

郑州app开发

昆明网站设计、光谷网站建设、永久使用、不限域名、机票网站建设

太原网站制作?

网站建设建设_太原网站建设_北京高端网站建设_昆明网站建设

IDEA设置

下载了导入的依赖库源码后才能对库中代码进行搜索和跳转

SQL注入

在源文件中,多处出现 include 引用 sqlwhere

而sqlwhere的foreach语句中存在着sql注入,如果传入的集合sqlWhereList的el属性为eq,则可以控制field属性来写入恶意sql语句

搜索发现有好几处条件查询引用了sqlWhere

先查看net\mingsoft\mdiy\dao\IDictDao.xml

向上查询query,发现是net\mingsoft\base\dao\IBaseDao定义的接口

这里还是属于Mapper层

其传入的参数为BaseEntity

里面有获取sqlWhereList的方法

如果我们传入sqlWhere参数,且是JSON数组类型,就会转换为sqlWhereList

向上查看哪里调用了query方法

来到Service层

net\mingsoft\base\biz\impl\BaseBizImpl

再往上即controller层

有这么多地方调用了query,逐一尝试

其实不应该漫无目的的逐一尝试,有些query并没有引用sqlWhere,应该去搜索引入sqlWhere的query对应的controller

应重点关注这四个的controller

第一个

net/mingsoft/cms/action/CategoryAction

接口地址为:/ms/cms/category/list

传入的参数类型是CategoryEntity,该类又继承自BaseEntity,因此可以传入sqlWhere参数,并构造恶意的json数组:
[{"field":"updatexml(1,concat(0x7e,(select database())),1)","el":"eq"}]

第二个

net/mingsoft/cms/action/ContentAction.java

接口地址:/ms/cms/content/list

虽然这个做了过滤

但他只是对参数中的CategoryId做了过滤,没有考虑sqlWhere

同样存在sql注入漏洞

第三个

net\mingsoft\mdiy\action\DictAction

接口地址:/ms/mdiy/dict/list

第四个

接口地址:/ms/basic/log/list

第五个

跟前面的不一样

net/mingsoft/base/dao/IBaseDao.xml

在net.mingsoft.base.biz.impl.BaseBizImpl多处调用了queryBySQL

其中一处向上追踪

发现在net.mingsoft.basic.action.BaseAction#validated进行了调用

把fieldName和fieldValue作为键值对传入sql语句

其中fieldName就是里面的${key},如果fieldName可控,就会存在SQL注入漏洞

向上追踪,在net.mingsoft.mdiy.action.PageAction#verify调用了

接口地址:/ms/mdiy/page/verify

fieldName和fieldValue用户可控

payload:

/ms/mdiy/page/verify?fieldName=updatexml(1,concat(0x7e,(select%20database())),1)&fieldValue=1

XSS

地址:http://localhost:8080/mcms/search.do

当在输入框搜索恶意代码时,会报错

在IDEA中可以看到报错信息:

跟踪到XssHttpServletRequestWrapper.java查看

此处虽然对输入做了过滤,但是最后却直接将输入返回给前端

throw new BusinessException("参数异常:"+ content);

导致了XSS漏洞

文件上传

第一个

后台登录地址:http://localhost:8080/ms/login.do

系统设置->模板管理中存在上传接口

其接口地址为:/ms/file/uploadTemplate.do

文件上传的信息都保存在Bean中

此处虽然说只能上传zip文件,但是抓包之后可以修改为其他类型的文件,修改为一个TXT文本进行尝试:

打断点调试

发现bean对象的uploadPath默认都为template

将bean对象的相关属性放到Config中然后调用uploadTemplate方法

uploadTemplate方法负责文件上传,并黑名单检测文件后缀是否为exe,jsp,jspx,sh

最终上传的文件都会到web根目录下的/template/1/中

同时返回文件地址

且能够成功访问

但是并不能上传jsp后缀的文件

尝试将jsp文件打包成zip然后上传,看看是否会自动解压

查看代码发现在文件上传成功后会自动调用/template/unZip.do方法进行解压

该方法将ZipFile解压到ZipFile的父目录下,且限制了路径穿越

可以看到成功解压了,绕过了后缀名的限制

但是springboot启动的情况下,虽然能访问到jsp⽂件但是不能解析,⼀般是在tomcat部署的情况下才能解析成功

第二个

在模板管理中可以编辑模板,并保存

此时抓包得到的接口地址为:/ms/template/writeFileContent.do

通过控制fileName可以上传任意文件(除了jsp和exe后缀的)

fileName=1.txt&fileContent=123&oldFileName=1.txt

此时上传到的是web根目录

尝试目录穿越,但是发现报错

原因为BasicUtil.getRealTemplatePath方法获取web根路径会调用getRealPath方法,而getRealPath方法会判断路径中是否存在../,导致报错

freemaker模板注入

在内容管理->静态化中,可以根据模板生成主页

接口地址为:/ms/cms/generate/generateIndex.do

调用了CmsParserUtil.generate方法

调用了ParserUtil.rendering方法

该方法中又调用了另一个rendering

触发了process

一般freemaker漏洞常位于后台可以编辑模版的地方,通过插入恶意的ftl指令到ftl文件中,当后端再次return或者process时即可触发代码执行

因此在模板内容中插入恶意的指令,并生成主页,即会触发模板注入

<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

任意文件删除

这里用到了AOP切面技术

代码位于net/mingsoft/cms/aop/CategoryAop.java

@Pointcut("execution(* net.mingsoft.cms.action.CategoryAction.delete(..)) ")

拦截CategoryAction.delete方法

并在执行完delete之后执行AOP中的delete方法

实现删除栏目后并删除文章对应的静态化文件

deleteCategoryHtml方法没有对传入的categoryPath做任何过滤,因此可以实现任意文件删除

在内容管理->栏目管理处删除栏目并打断点调试

该方法会提取传入参数中的categoryPath

并调用deleteCategoryHtml方法

其中htmlPath为webapp目录下的html目录

appDir为web

最后拼接的路径为:

src/main/webapp/html/web/gywm/gongsijieshao

因此我们可以控制categoryPath,使其删除webapp目录下的1.txt文件:

删除成功

东莞网站开发建网站公司公司小程序开发公司小程序开发公司门户网站开发兰州网站制作网站程序开发义乌小程序开发网站建设空间网站设计工作室深圳建设网站微信定制开发企业网站建设一条龙横沥网站设计泉州网站设计益阳网站制作公司深圳品牌网站建设公司昭通网站建设3g网站建设大连网站制作报价豪华网站建设广西网站建设网站构建网上商城开发苏州企业网站建设软件app定制开发网站制作公司网站东莞企业网站制作扬州网站建设网站定制小程序广州开发公司网站建设建设

猜你喜欢