简介:由阿里巴巴云效应主持的第三届第83步行法规挑战赛已经结束。有20,000人观看,近4,000人参加了比赛,有85支球队进行了战斗。比赛采用了比赛来突破游戏,并整合了科学元素。小说和剧本杀死宇宙中的元素,使一群开发人员感到高兴。
今天,我邀请决赛的设计师Du Wan与您分享设计和解决问题的想法。
使用“使用代码播放脚本?”的官方分析第三83代码竞赛图的正式分析更好。
第四个问题是整个C/S架构。客户端是无法修改的编译命令行程序。该服务器是Spring Boot Web应用程序;客户端有两个职责,一个是向服务器发送普通的HTTP请求,以使参与者发现该错误。
另一个是验证错误维修情况,然后将其发送到远程评分程序以获取分数。整个主题是在我们的阿里巴巴云Devstudio上运行。在DevStudio中,我们启动了Intellij Idea的社区版本,该版本内置在Appobserver插件中。
让我们看看第一个错误是如何修复的。“ MVN测试”,在10个测试中有9个错误。
这里有几个错误。让我们看一下与正则表达式相关的。我们首先修复了Extracthtmltest,读取源代码,然后很快将utils.striphtmltag方法定位。
已删除的标签内容包括>和,这表明规律性存在问题。下图是对规律性的分析。
因此,该错误的两种维修方法是可以的。
解决方案:将正则表达式放在utils.java中<(?.*)>`更改为`<(?[^>]*)>`。
再次执行MVN测试,发现仍有单个测试未通过,我们会发现字符串较少。
再次查看utils.striphtmltag方法,并找到方法。AppendReplacement方法。如果您不熟悉此方法,在查看JDK的评论后,您会发现Matcher.AppendReplacement和Matcher.Appendail出现。
查看图片是Matcher.appndreplacement and Matcher.Appendtail的工作机制。使用此方法,替换字符串更加方便。
再次执行MVN测试,仅保留EofException错误。可以快速定位的方法是ultils.decodemessage。
通过分析ReactiveWebsockeThandler的头部注释和Utils.codemessage的方法,我们了解二进制软件包结构:
然后比较utils.decodemessage,您可以发现这是一个呼叫正时问题。校正方法如下:
此订单错误已经完成,然后我们来修复操作的错误。
配置应用程序观察
首先,让我们配置appobserver。在游戏的Devstudio中,Papobserver已预先安装。这是想法启动器,以及应用程序的代理。
在配置了观察到的应用程序后,请通过Spring Boot的主要功能启动服务器侧进程。
客户程序rough4执行项目的根目录
Step2有一个CSRF错误。由于无法修改客户端程序,因此您需要在服务器上解决此问题并关闭CSRF验证。
使用上述错误关键字Google,您可以很快找到弹簧安全修改方法。
然后在下午进行修改,然后再次验证它。发现响应代码从403更改为401,因此修改是有效的。
最后一步是执行https://www.shouxicto.com/article/round4,step2返回401,并提示请求头:“授权:基本ywrtaw46ywrtaw4xmjm =”被使用。然后401提示用户名和密码可能是错误的,因此您可以使用base64解锁身份验证标头并修改服务器上的用户名密码。
执行https://www.shouxicto.com/article/round4之后,我们发现它转回了403,但是返回错误已被拒绝。似乎密码是正确的,但是没有权限访问权限。打开WebSEcurityConfig文件。我们会发现管理员字符有两种写作“管理员”和“ admin”的方法。问题在这里。
Step2,计算,然后从步骤3中出来。
步骤3错误,使用记者用户无法连接到:ws:// localhost:8080/ws/appobserver,响应状态代码:403禁止,请求头:{“授权”:“基本CMVWB3J0ZXI6CMVB3J0ZXI =”}。
这是另一个权限。首先,解锁基本64编码的授权,发现用户密码是reforter.next,您需要使用应用程序观察者使用应用程序观察者在round4controller.adduser上添加虚拟断点。虚拟断点可以获取上下文的线程堆栈和可变信息,但是虚拟断点不会阻止执行执行此功能的执行对生产系统非常有用。
特定操作如下图所示
通过虚拟断点,我们发现记者用户的角色称为记者,端点“/ws/**”当前被允许访问管理员字符。因此,在安全配置中,将记者字符添加到路径中。
解决角色问题,已经修复了4个春季安全相关的错误。修理服务并执行https://www.shouxicto.com/article/round4。
通过分析ReactiveWeweBockeThandler中的一系列映射器,我们会发现GetBufferConverter方法返回固定的缓冲区,并且该缓冲区背后会有一系列0值,这很可疑。在许多没有空的呼叫之间共享缓冲区。解决方案也非常简单。将共享缓冲区更改为每次新建的。如下所示:
维修后,执行https://www.shouxicto.com/article/round4乱七八糟,但是返回内容少一些,表明还有其他问题。
修复上面的乱码问题后,客户循环的操作输出没有明显的错误。这是一个简短发现的内容。查看服务器的日志,您会看到NPE的错误:
NPE最好维修,很快就可以找到回返回。
更改以返回“”;
重新启动服务方面并执行https://www.shouxicto.com/article/round4。
最后一个错误不容易调试。您需要依靠认证的阅读代码来了解上下文。您可以看到一个奇怪的threaclocal变量用于缓存charsetname。
它在线程中是否没有变化?估计它不会影响效果,并且最高性能稍差一些。尝试删除它。
重新启动服务方面并执行https://www.shouxicto.com/article/round4。
现在一切正常。
提取线索
上面的三个频道的返回包含竞争线索,因此我们可以使用GREP工具选择。
我们不会讨论情节问题。您可以阅读另一篇解密文章。
总共已经修复了10个错误
游戏中涉及的技术
工具
资料来源:阿里巴巴云