官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
Preface
前面谈到了Upgrade内存马的查和杀的步骤,这里我们谈谈websocket层面上以及timer思想的内存马的查和杀的思路
websocket
review
在动态添加一个websocket的关键位置是在WsServerContainer#addEndpoint
方法中
将我们构建的恶意的ServerEndpointConfig
对象,在获取了其的path路径以及将对应的endpointClass
封装成ExactPathMatch
对象之后传入configExactMatchMap
属性中保存
而对于websocket的处理,主要是在创建WsServerContainer
的过程中添加了WsFilter
过滤器
在WsFilter
类中的doFilter
方法中
将会在每次请求的时候进行拦截,在这个过程中通过调用WsServerContainer#findMapping
方法中根据path来获取对应的映射结果
这里的findMapping
方法获取映射结果也就是从configExactMatchMap
属性中获取对应的ExactPathMatch
对象,这里也就和前面的调用addEndpoint
方法向configExactMatchMap
属性中写入值结合了起来
当然,如果没有这个映射结果,这里将会调用chain.doFilter
调用下一个过滤器
detect
看看使用getWebsocketMaps
方法来获取所有endpointClass的方式:
前面提到了addEnpoint
方法是向configExactMatchMap
这个Map对象中添加元素
我们在获取了configExactMatchMap
属性值之后,通过遍历这个Map对象的元素,其中每个元素的value值为ExactPathMatch
对象
关键的是在config属性中,存放的是我们传入的ServerEndpoingConfig对象值
而在该类对象中存在有两个关键的属性path
和endpointClass
这里的path就是我们的路由,这里的endpointClass
就