php发展

首页 » 常识 » 问答 » CTFshowWeb入门php特性
TUhjnbcbe - 2024/10/21 16:09:00

前言

感觉了解php特性是基础,所以决定先做这部分。

Web89(pg_match和intval)

两步,绕过正则,intval不为0。采取传入数组的方式绕过:

pg_match()只能处理字符串,如果处理数组会返回false;intval如果传入数组,会返回。payload:

?num[]=

Web90(intval)

intval处理开头是数字的字符串时,返回值为开头的数,这个大家都比较熟悉了。payload:

?num=a

Web9(正则匹配多行模式)

本题中的正则:^表示表达式开头,$表示表达式结尾,i表示不区分大小写,m表示多行模式,这个多行模式具体是什么意思呢,看一下下面的结果:

上面两幅图中,左边的输出结果是no,右边的输出结果是success。所以多行模式的意思是每一行都进行正则匹配。右侧图中,第一行末尾为php,所以返回了true;左侧没开启多行,虽然有\n但也只有一行。所以本题的第一个正则是要求分行后至少有一行是字符串"php",第二个正则只能匹配字符串"php",所以传一个:

?cmd=php%0aphp//或aaa%0aphp,php%0abbb都可

这里还要说一下,URL的换行符是%0a,\n不起换行作用,因为URL编码中斜杠并不是转义字符,\n只是普通的字符串而已。

Web9(intval)

第一个判断变成弱类型比较,所以不能用a绕过。重点是intval的第二个参数base,base=0时,intval会自动探测num的进制:

如果num以0x开头,那么按6进制转换;如果num以0开头,默认按8进制转换;否则使用0进制。

所以这个题用6进制绕过即可,payload:

?num=0x7c

第一个弱类型会把0x7c转成0,绕过比较,第二个会进行进制转换,判断通过。

Web93(intval)

和上一题相比,这道题加了个正则匹配,不能出现字母,使用8进制绕过即可。在进行弱类型比较的时候,==。

Web94(intval)

时刻要注意num是个字符串,只要在后面用字符截断,即可绕过弱类型比较。关键是多了个strpos,这个函数的位置很巧妙,它要求num中必须有0,但还不能在开头,所以传入一个浮点数:

?num=.0

强类型比较通过,正则通过,含0且不在头部,intval转换后是,拿到flag。

Web95(intval)

多过滤了一个点,可以用8进制前面加个+绕过。在反序列化绕过正则时也有相似应用。intval接收+还是会转为。

关于intval的常见输出

Web96(按路径读取文件)

想办法读取flag.php,但还不能直接传flag.php,这里我们利用路径问题来读,传入payload:

?u=./flag.php

利用路径绕过比较。

Web97(md5函数漏洞)

md5函数是不能处理数组的,处理数组会返回null,所以传两个数组进去,null===null,成功绕过。

Web98(审计,传参,取址运算符)

什么卵代码,搜一下。

php中取值运算符""表示引用,比如$b=$a表示变量b是变量a的一个引用,相当于同一个变量两个名字,一个变化另一个也跟着变化。通常的赋值语句$b=$a相当于copy了一个a的副本给b,b变化a不变化。取址就相当于把根刨了。

第一句:如果传入get参数,则get参数变成post的参数。

第二句:如果get的flag参数等于字符串"flag",那么get的参数变成cookie的参数。

第三句:如果get的flag参数等于字符串"flag",那么get的参数变成server的参数。

第四句:如果get传入HTTP_FLAG参数的值是字符串"flag",那么高亮显示$flag变量对应的文件,否则就是当前文件。

分析完之后发现很简单,只要get一个HTTP_FLAG变量就好了,但是get会变成post啊,所以保证post一个HTTP_FLAG=flag。至于get就随便get一个,不能不get,不get不能触发第一条语句的。

Web99(审计,in_array)

先了解一下这些个函数:

array():创建一个数组

array_push():将一个或多个元素插入数组末尾(入栈)

in_array():检查数组中是否存在指定元素,第三个参数strict不指定默认为宽松比较

file_put_contents():将数据写入文件中,相当于fopen()+fwrite()+fclose()

这里就要用到in_array的漏洞了,如果我们传递n=.php,那么根据宽松比较.php==,是可以绕过的。get一个n=.php,向其中写入一句话木马?php

eval($_POST[]);?,蚁剑连接即可。

php中关于array的函数可以参考:

1
查看完整版本: CTFshowWeb入门php特性