马原理是什么原理

[版权声明] 本站所有资料由用户提供并上传,若内容存在侵权,请联系邮箱。资料中的图片、字体、音乐等需版权方额外授权,请谨慎使用。网站中党政主题相关内容(国旗、国徽、党徽)仅限个人学习分享使用,禁止广告使用和商用。

  5. 业务逻辑处理完成之后,返回给Servlet容器,然后容器将结果返回给客户端。容器关闭时候,会调用destory方法

Servlet 的装载、初始化、执行以及资源回收

filter也称之为过滤器,过滤器实际上就是对web资源进行拦截,做一些过滤,权限鉴别等处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。

  当多个filter同时存在的时候,组成了filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

  如果我们动态创建一个filter并且将其放在最前面,我们的filter就会最先执行,当我们在filter中添加恶意代码,就会进行命令执行,这样也就成为了一个内存 Webshell

和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。web 应用程序启动时, web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只 会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。

Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载Filter对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。

在IDEA中创建Servlet,可参照下方链接《》,唯一不一样的是Filter配置在web.xml,而不是通过@注释配置在类中。

这里写了两个FilterDemo,代码基本相同,主要是为了展示这个Filter过滤链

接下来借用下面这张图分析一下 Tomcat 中是如何将我们自定义的 filter 进行设置并且调用的:

可以看到此时已经装配第一个filter

Filter是javaweb中的过滤器,会对客户端发送的请求进行过滤并做一些操作,我们可以在filter中写入命令执行的恶意文件,让客户端发来的请求通过它来做命令执行。而filter内存马是通过动态注册一个恶意filter,由于是动态注册的,所以这个filter没有文件实体,存在于内存中,随着tomcat重启而消失。一般我们把这个filter放在所有filter最前面优先执行,这样我们的请求就不会受到其他正常filter的干扰。

web.xml简单实现内存马注入

看完上面的Filter过滤链,本地模拟一个Filter内存马注入:

我们把恶意的Filter注入内存中,只要符合urlpattern,就可以触发内存shell,但这个Filter内存马注入是一次性的,重启就没有了。

Filter内存马动态注入

从上面的例子简单知道内存马的注入过程,但是实际环境中怎么可能在web.xml中添加对应的恶意Filter类,所以我们需要借用Java反射来修改filterConfigs,filterDefs,filterMaps这三个变量,将我们恶意构造的FilterName以及对应的urlpattern存放到FilterMaps,进而达到利用Filter执行内存注入的操作。

现在要解决的两个问题:

  1. 如何获取这个context对象。

其实也是层层递归取出context字段的值。

当然也可以从MBean中获取,可以参考下面文章:

看一下filterDef类的参数格式:

实例化一个FilterDef对象,并将恶意构造的恶意类添加到filterDef中

//定义一些基础属性、类名、filter名等
 

看一下filterMap类的参数格式:

//创建filterMap,设置filter和url的映射关系,可设置成单一url如/xyz ,也可以所有页面都可触发可设置为/*
 

至此,我们的恶意filter已经全部装载完成

结合上面的分析,最终的内存马为:

此时的内存马已经注入到内存中,只需 ?cmd=Command,即可执行我们的命令

输入1选择tomcat的进程,之后会进入下面的操作界面:


利用下面的命令进行模糊搜索,会列出所有调用了Filter的类

利用下面命令将 Class 进行反编译


同时也可以进行监控 ,当我们访问 url 就会输出监控结果

输入1选择tomcat的进程,之后会进入下面的操作界面:

然后在java或class文件夹会保存木马以及运行的类

c0ny1 师傅写的检测内存马的工具,通过jsp脚本扫描并查杀各类中间件内存马,比Java agent要温和一些。能够检测并且进行删除,是一个非常方便的工具

内存马远不止这些,本文中内存马还是需要上传 jsp 来生效,但是实际上利用方式远不止这样,我们还可以借助各种反序列化来动态注册 Filter 等。

本次项目的代码文件已打包在github:

马术运动是一项人马配合共同完成比赛的竞技项目,骑手不仅自身的技术、感觉、比赛经验要求高,还需要了解马匹的基本调教原理,才能掌握马匹习性,才能挖掘马匹的能力,才能与马一起成长,取得理想的效果和成绩。如果骑手的知识面窄,调教方法简单,调教马匹的基本原理欠缺,就会使有潜力的马匹无法脱颖而出,无法达到预期的水平和目标,也会使有实力的并已取得较高水平的马匹渐渐衰退,无法保持原先水准,造成资源的浪费。本文通过四个方面的调马原理,分析调马过程中的利弊,使我们避免失误,提高成功率,为取得良好效果和成绩奠定基础。

一、循序渐进的基本原理

马是有个体差异的,不同的年龄,不同品种的马匹接受调教的适应能力是不同的;调教时必须考虑是什么品种,什么血统的马,什么年龄段的马,曾经接受过什么程度训练的马,给予正确的评估后,制定循序渐进的调教计划;例如:我们在调教奥运竞技项目的马匹时,通常是从四岁开始的,调教的内容应该是由易开始,从简单规整的慢步开始,到快步,再到跑步,马匹获得了简单的信号,知晓如何服从骑手的指令动作,如何转换步度,马匹在简单的平地训练过程中,逐渐学会伸长、中间、收缩等步幅,从中获得良好的平衡能力后,就可深化一些调教内容,如增加一定的低栏训练,地杆训练等,然后再评估马匹适应后,就可增加障碍的高度,增加连续栏的关联跳跃训练。不同血统的马匹也有差异,例如:纯血马比较敏感,比较神经质,对它的调教更要细心、安静,动作和缓,由简到难,一个训练内容巩固后才可进入下一个训练内容;那种超越年龄、急功近利、拔苗助长的调教方法,只会使马匹失去信心,注意力下降,技术动作走样,从而使有潜质的马匹失去上升的空间,失去成才的机会。

马匹调教需要参照人类幼儿教育的方法,即采用“连哄带骗加耐心,分门别类加执着,有趣成长加爱心”的调教方法,就能使不同类形、不同性格、不同能力的马匹都能获得恰当的教育,能为不同需求的人类服务,获得各自的快乐。有的马匹聪明机灵,接受能力强;有的则接受能力差一些;有的注意力相对集中,有的东张西望不专一;有的对周围的事物、声音特别敏感;有的过于沉闷、懒惰懈怠不努力;有的胆大不小心,有的胆小不进取。调教时,骑手要学会观察马匹,属于什么性格的马匹,给予恰如其分的训练内容。有的马匹一次次失误,骑手要有足够的耐心,调整训练的难易程度,并对马匹多一些包容;同时要掌握好训练间歇时间,一个内容不可训练时间太长,5-8 分钟可考虑休息一下,然后再进行下一个内容。对不够用心,不思进取,胆子较小的马匹,骑手要执着引导,方法要科学,手段要有效,使马匹逐渐改掉一些毛病,让其成长为有修养的、注意力集中的、有良好习惯的马,顺从人类对它的指令,勇敢自信完成各项人类的要求,人马愉悦达到和谐。

人与马匹通过彼此的相互沟通,共同愉悦地体验彼此带给对方的快乐,提高彼此生活乐趣和质量。对于人类最佳伙伴之一的马匹,应对它有更多的包容和爱意,多一些鼓励和奖励。人与马无法用语言沟通,重视和学会用肢体语言和声音与马沟通,既反映人类的文明素养、绅士风度,又能使马理解人类的意图、用意、要求,从而愉悦地接受人类的调教,逐渐成长为一匹有能力、有修养、有大气、有规矩的成熟马;因此,在调教过程中,骑手要对马匹一个好的表现及时给予奖励,可以通过拍拍马脖颈部位,马体臀部,和缓温柔的声音,或给予马匹爱吃的食物,让马匹精力集中地及时了解骑手的意图,使它愉悦地接受调教,积极地配合骑手完成训练内容。建立一个良好的条件反射过程对马尤为重要。相反,对马匹的任性,不服从,精力不集中,懈怠等行为,尽可能不可采取粗暴的鞭打,二是要在第一时间终止它的错误行为,然后重新再尝试;要有耐心地一遍遍教,不断地用肢体语言和声音鼓励它尝试;而简单的鞭打和使用马刺,只会造成马匹的抵触和反抗,使调教的计划无法实施。应该树立这样一个观念:鞭子和马刺在调教过程中主要是起到威慑作用,而不是惩罚工具。只有确认马匹是懈怠、偷懒的时候,在诱导不起作用的情况下,采取短暂的、温和的处罚方法为好。调教过程中遵循诱导、鼓励、奖励为主的原则,将使马匹获得良好的健康性格和技术积累,将使调教工作事半功倍;而不恰当的惩罚只会造成马匹抵触、反抗、不配合,从而使调教工作事倍功半,甚至毁掉马匹的成长前途。俗话说:有其父必有其子。马圈里也有类似的一句话:马如其人。什么样的骑手调出什么样的马匹。

四、运动量合理掌控的原理

马匹如人类的幼儿,精力不可能长时间集中,相对容易分散;马匹的腰背和四肢也是相对薄弱的和容易受伤的地方;因此我们在调教过程中要特别注意训练量、强度的掌控,训练时间尽可能控制在1 小时之内,可分成三块执行,即准备活动10-15 分钟,让马匹头部向前下方伸展,让马匹的背部充分伸展,让马匹的四肢通过直行的伸、缩和侧向的交叉,使马体柔软和肌肉预热起来,为训练内容做好准备。正式的训练内容一般在40 分钟以内,分成三到五个部分,每个部分的练习内容尽可能不重复,每个部分的训练要尽可能有趣味,每个部分结束有二到三分钟的间歇;每个部分中要有不同步度、步幅、节奏,强度和难度的训练,使马得到全面、平衡的发展;那种一味地收缩训练,一味地局部负担较重的训练都容易造成马匹疲劳和受伤,影响整个训练计划的执行,影响整体的训练效果。最后的整理活动需要5 分钟以上的时间,让马伸长的慢步放松,有利马匹体症的正常恢复。要遵循个体差异、分别对待的原则,年龄差异、训练年限和水平的差异、马匹品种的不同,都是运动量掌控的考虑因素。马匹的生理结构可想象为一台手风琴,手风琴需要拉出美妙动听的音乐,就必须有风箱上下彻底地拉开和压缩才能做到,马匹调教训练过程中也应遵循这一原理,有伸有缩,有放也有收,有直也有侧,这样的训练才能使马有一个良好柔韧身体,稳定的平衡肌能,顺从配合的性格,才能便于人的驾驭和优异成绩的取得。

综上所述,骑手在马匹调教过程中所起的作用是至关重要的。骑手不仅仅是一名运动员,不仅要懂得骑马,更应懂得调教马,懂得调马的基本原理,懂得马匹的生理机能,懂得马匹的心理学和行为学,自身有很好的修养,有很宽的知识面,才有可能成为一名优秀的骑手,才有可能获得成功。因此,调马是一项难度大、周期长、较为复杂的工作,必须倾注骑手的心血和爱心,必须要有学无止境地学到老的态度,才会逐渐成长为一名懂马的马语者。

1、《动物高级神经活动》(俄)巴浦洛夫著;

2、《人类与动物心理学讲义》(德)冯特著;

3、《动物行为学》尚玉昌著;

4、《幼儿教育学》郑惠英主编。

(文/ 徐根发(上海市马术运动管理中心) 图/ 李艳阳)

我要回帖

更多关于 对马原理的建议 的文章

 

随机推荐