您现在的位置是:首页 > 技术教程 正文

php特性靶场web 89-103

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

web 89

看代码,意思是包含了flag文件,如果get传参不为空,num赋上这个值,如果num中有0到9数字,则输出no并退出,如果把num转化为整数为真则输出flag。

想要flag,要输入能转化成数字的num,但是得绕过preg_match。

preg_match函数用于完成字符串正则匹配,成功返回1,否则0,但是只能处理字符串。

我们可以传入数组,preg_match不能处理会报错返回false,从而绕过它。

所以输入?num[]=1

web 90

看代码,===为强类型判断,不仅会判断值还会判断类型,输入的num转化为10进制要等于4476,但是字符串不能为“4476”。

可以用进制转换,例如输入16进制的4476——117c,转化为十进制满足条件同时又避开了字符串为4476。如下图即为成功,输入0x表示16进制。

web 91

看代码,首先多行匹配(m表示多行)是否有php,有再进行单行匹配,判断第一行是否有php,如果没有输出flag。

可以输入?cmd=%0aphp,%0a表示换行,使得第一行没有1PHP第二行有php,满足多行有单行无,得到flag。

web 92

看代码,与web90类似只不过将强类型判断变成判断,还可以用进制转换解决,输入?num=0x117c即可

web 93

本题与上一题类似,只不过有加了限定条件,即输入的内容不能有字母,16行不通,可以输入小数,intval会把它转化成整数。

输入?num=4476.1

还可以用八进制输入?num=010574

web 94

strpos() 函数查找字符串在另一字符串中第一次出现的位置(区分大小写),如果没有找到字符串则返回 FALSE。注释: 字符串位置从 0 开始,不是从 1 开始。

这题类似上题,开头不能为0,否则会返回0,只是过滤了八进制,但是还是能用小数,注意小数部分加上0,不然strpos会返回false。

web 95

在上一题的条件上加上了过滤小数点,num中有0但是开头不能为0,可以用空格加上八进制

还可以用换行加上八进制:?num=%0a010574

+加上八进制:?num=+010574

web 96

看代码,输入u,如果u为flag.php输出no并退出,否则输出u里的内容,要找flag,flag肯定在flag.php文件中,想办法绕过,flag在当前目录中,可以输入?u=./flag.php。

还可以输入flag的绝对路径。

web 97

看代码,要求输入a和b,a和b值不同但是md5值相同才能拿到flag

md5() 函数计算字符串的 MD5 散列,md5() 函数不能处理数组,数组都返回 null,md5(a[]) 结果为 null

因此可以输入两个不相等的数组,如a[]=1&b[]=2,注意是post传参,我这里用了个插件Max HackBar来执行post传参

web 98

看代码,get存在,get的值等于post,如果是flag先被cookie覆盖,然后被server覆盖,最后判断get传参的HTTP_FLAG如果等于flag就高亮输出。

我们只要在有get值时post传参HTTP_FLAG=flag,就会得到flag

web 99

相关函数:

   array() 函数用于创建数组。

   array_push() 函数向数组尾部插入一个或多个元素。

   in_array() 函数搜索数组中是否存在指定的值。

   file_put_contents() 函数把一个字符串写入文件中。

代码大概意思是定义一个空数组,从1到36,然后1到37一直到1到876之中随机写入一个数到数组中直到i=877,如果get输入的n存在且数组中也有,则会将post输入的content写入文件中。

get传参?n=1.php,post传参content=<?php eval($_POST[”1“]);?> (一句话木马)

php在使用in_array()时会将1.php强制转换成1。

然后访问1.php。将?n=删去访问即可

蚁剑链接一下,密码是1,发现有flag文件查看

web 100

is_numeric() 函数用于检测变量是否为数字或数字字符串。

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

大概意思是v1,v2,v3get赋值,赋值优先级高于逻辑运算,所以v0为is_numeric($v1),如果v0为真,且v2没有;v3有;,执行$v2('ctfshow')$v3。

('ctfshow')用/**/注释掉

方法:输入?v1=1&v2=var_dump($ctfshow)/*&v3=*/;  输出ctfshow里的内容

var_dump() 函数用于输出变量的相关信息,var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

web 101

和上一题类似,多加了几个限定条件,v2,v3都不能有某写符号,上一题方法就不能用了。

这题用反射,输入?v1=1&v2=echo new Reflectionclass&v3=;

反射是可以通过一个对象来获取所属类的具体内容。Reflectclass就是一个反射类,内置各种获取类信息方法,创建方法为new Reflectionclass(),再用echo打印。

web 102

call_user_func — 把第一个参数作为回调函数调用。

通过调用hex2bin函数,传入的十六进制内容解码为ASCII码,传入的参数通过base64编码,转换为16进制,之后call_user_func函数返回的结果就是base64编码之后的结果,然后可以使用php://filter伪协议将内容再经过base64解码,存放到某个文件中。由于要经过is_numeric()函数的检测,所以传入的参数的值要求是数字串。

输入?v2=105044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=11.php

post输入v1=hex2bin

然后访问11.php,查看源码得到flag

web 103

103题方法类似102题,只是过滤了一段php代码

/.*p.*h.*p.*/i 是一个正则表达式模式,用于匹配包含 "php" 子字符串的字符串,.* 表示匹配任意字符(除了换行符)零次或多次。102题解题时没有用到,还可以用102题的方法

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索