web89-103

89.

首先,我们可以看到,主要的判断条件就是preg_match函数和intval函数,看上去形成了逻辑闭环,但是,通过学习我们可以得知,当输入的数据为数组时,preg_match会返回0,并报错,但是intval函数却刚好可以返回1,这样刚好就形成了第一句条件语句不表达,而第二句条件语句表达,所以便输出了flag

  90.

由题可知,输入的东西必须是4476有关的东西,这里可以从两个方面入手,首先是,第一个从intval的转化性质来看,intval后面的参数是0,即意味着,他是看数据的进制,自动转化的,所以,我们可以通过输入8进制或者16进制的4476来进行绕过第一个条件语句(注意8进制特征为'0'开头,16进制特征为'0x'开头);第二个就是通过intval函数本身不能识别科学计数法的数据,而科学计数法的数据不满足'==='的硬性全等,即是说,我们只需要输入类似'4476e2'的模式的数据即可! 

 

91. 

通过分析代码,我们可以知道,我们需要一个可以通过多行匹配的多行php字符串,但是却不能通过单行匹配的php字符串,所以,我们需要让我们输入的字符串第一行为回车,第二行为php就ok,

于是我们可以输入回车的ascii码%0a后添加php

92. 

我们可以看见,相较于90题,由"===" 变为了"==",但是不影响我们仍然用这两种方法来做,因为"=="不管进制,所以这道题跟90题相同的做法.

93.

可以看见又多了一个判断条件,字符串中不能有字母,所以不可以使用科学计数法,也不能使用16进制了,但是还可以使用8进制:

94.

可以看见,有多出一个strpos函数,这个函数会返回第一个搜索到的字符的位置,这里是搜索的"0"字符,但是由于8进制首位为"0",所以!strpos会返回"ture"会输出'die',所以需要换一种方式,就是使用小数:

95.

这次的正则表达式中添加了不允许出现小数点,......断我退路,但是据资料显示,在数字前面加'+'号也可以被intval函数取整,所以这里直接输入'+010574'就OK:

96.

本题比较简单,就是之前做upload中的简单绕过方式大写绕过就可以,也可以在后缀中加入空格的ascll码%20,也可以实现绕过,

当然,我还看网上也可以通过输入绝对路径获取flag,同样也是绕过了第一重的检查. 

97.

本题出现post传参,我们利用工具,可以直接在网页输入参数值,同时,我们看题,出现了既等于,又不等于的题,于是我们应该找到变化处"md5()"函数的出现,我们需要去寻找输入什么样的值可以让md5函数转化后的值是一致的,通过查询可以得知一个最简单的,即是让他直接报错,那么返回值就为false,就可以实现目的了.我们可以了解到,md5函数无法解析数组,并报错.

98.

 我们可以看见,代码中全是三目运算符,第一行说,如果有get传参,就会把post传参中的值赋值给get中的所有参数,而如果没有get传参,就会将其中的参数全改为flag,其中$_GET['flag']没啥用处不会影响其中高亮$flag,重要的是最后一步,我们需要$_GET['HTTP_FLAG']=='flag',所以综上所述,我们只需要任意来一个get传参,再将post传参的'HTTP_FLAG'==flag,就OK了.

因为,$flag,是flag.php文件中的一个变量,不会打开,而是报错然后显示出来.

99.

这里的代码,表示我们会创建一个空数组,并让$i从36到877循环,最后比对我们输入的n与数组中随机出来的数字,我们可以知道,我们输入一个字符串,只要开头是数字,会被自动转化为开头的数字,不会管后面的字符,除非是"===",所以我们可以传入一个空文件,我们可以去从"1.php"开始实验,但是大概率可以随机到,然后,我们就可以通过post传参令content=<?php @eval($_POST['x']);?>,上传一句话木马,然后访问我们刚上传的文件:

出现白屏,而不是404找不到,就成功了,接下来,就是连接蚁剑,看他的文件:

 

找到了flag

100.

 我们可以发现,最后的函数时eval(),那么我们的可操作空间就大了很多,首先分析代码,我们可以了解因为=的优先级大于and,所以我们只需要将v1赋值为数字,v2需要满足不包含\;,v3需要满足包含\;

我认为最简单的方法就是,我们已经看见了include() 了一个文件,我们只需要将它高亮出来,其他的注释掉    : ?v1=1&v2=highlight_file("ctfshow.php")/*&v3=*/;

满足条件,成功!

101.

 

这里,他不允许v2和v3中出现注释符号,所以就必须找一个可以读取类的函数  ReflectionClass,可以生成一个新的类,反映出我们所需要的类的信息,   ?v1=1&v2=echo new ReflectionClass&v3=;  即可

102.

substr($v2, 2)

  • substr() 函数用于返回字符串的子串。
  • $v2 是一个字符串变量,2 表示截取从第三个字符开始到字符串末尾的子串。
  • 结果存储在变量 $s

call_user_func($v1, $s)

  • call_user_func() 函数用于调用回调函数。
  • $v1 是一个变量,应该包含一个可调用的函数或方法的名称。
  • $s 是作为参数传递给回调函数的值。
  • 结果存储在变量 $str 中。

file_put_contents($v3, $str)

  • file_put_contents() 函数用于将数据写入文件。
  • $v3 是一个字符串,表示目标文件的路径。
  • $str 是要写入文件的内容。

 

 这个看见需要将东西写入文件,就需要一串代码可以读取文件,但是我们又需要v2是纯数字,搜索知道,可以将输入的内容进行base64编码,在将它转化为全为数字的16进制

搜索得到<?=`cat *`;       这个代码符合要求

转化过后v2=5044383959474e6864434171594473,,e会被处理为科学计数法,同时我们需要在v2前加上2个数字,因为substr函数会截断.

同时v3通过伪代码php://filter/write=convert.base64-decode/resource=1.php,将base解码写入1.php文件

v1只需要将其转化为字符,可以进行base解码的形式,就OK,所以v1=hex2bin

现在我们只需要打开1.php文件源代码就可以看见flag了:

 103.

本题多了一个对v2的判定,但是v2中没有php,正则表达式只过滤了php,所以不用管,此题与102题一致.

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值