Web(105)【foreach函数】
Foreach函数PHP: foreach - Manual
?suces=flag post error=suces
Web(106)【shal】
?v2[ ]=3
v1[ ]= 之前104的做法不过这里因为加了一个条件所以要使用不同的赋值。
Web(107)【Parse_str函数】
Parse_str函数的使用是将一个字符串加入到数组中,就是将v1加入到数组中,
?v3【】=
Post
V1=
因为md5无法解析数组所以为空,我们不给v1的值到最后,v2的值也就为空,所以空对空为真。
Web(108)【ereg函数】
ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。
strrev() 函数反转字符串。
intval() 函数用于获取变量的整数值
首先需要知道%00可以截断ereg()函数的搜索,正则表达式只会匹配%00之前的内容;0x36d的十进制内容为877,我们需要字母在前来满足if条件的正则匹配来跳过if语句,接着再进行字符串的反转得到877a,接着intval()函数取整数部分得到877所以payload为
?c=a%00778
Web109【反射类和异常处理类】
V1和v2要求都有字母。就是最后的形式一般的不行所以要用个类来包含函数,最后输出。
Exception 处理用于在指定的错误发生时改变脚本的正常流程,是php内置的异常处理类
ReflectionClass 或者 ReflectionMethod 都为常用的反射类,可以理解为一个类的映射
?v1=Exception&v2=system('tac fl36dg.txt')
或者
?v1=ReflectionClass&v2=system('tac fl36dg.txt')
或者
?v1=ReflectionMethod&v2=system('tac fl36dg.txt')
构建异常类并在类中添加system函数之后是输出,首先要查看flag的位置可以system(ls)之后是发现在fl36dg.txt中。构建成功。
Web 110【FilesystemIterator迭代器】
利用 FilesystemIterator 获取指定目录下的所有文件
getcwd()函数 获取当前工作目录
echo new FilesystemIterator(getcwd()); //默认只显示第一个文件,需要遍历
?v1=FilesystemIterator&v2=getcwd
之后在url里访问得到的falg文件名称。
Web111【$GLOBALS】
这次依然考点在于变量覆盖(知识点忘记的话去温习一下web105),首选需要v1含有ctfshow才能过正则,执行getflag函数,所以v1=ctfshow,接着再getflag函数里,会把v2的地址传给v1,接着再输出v1,这里我们可以使用php里的全局变量GLOBALS
$GLOBALS — 引用全局作用域中可用的全部变量 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
所以payload为
Code
?v1=ctfshow&v2=GLOBALS
过程就是$ctfshow=&$GLOBALS(全局变量中会含有flag的变量),接着再通过var_dump输出$ctfshow
Web112【is_file()函数,filter() 函数】
is_file() 函数检查指定的文件名是否是正常的文件
filter() 函数用于对来自非安全来源的数据(比如用户输入)进行验证和过滤
这里首先if语句里需要我们传入的不是文件类型才能执行highlight_file语句来读取flag文件,也就是一个绕过的考点,我们使用php伪协议即可,所以payload为
?file=php://filter/resource=flag.php
Web113【.zlib:】
多过滤了filter上一题的不能在继续使用,可以使用hint中的那个解法和上一题中的compress.zlib://flag.php
这个的提示来解决。具体为啥没找到原因。
Web114【】
将filter解除了限制,试一下直接可以得到。?file=php://filter/resource=flag.php
Web123【变量名】
看到后面有个eval()函数会执行$c
,所以我们就关注$c和if判断需要的两个post即可
在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[
则会被转化为_
,所以按理来说我们构造不出CTF_SHOW.COM
这个变量(因为含有.
),但php中有个特性就是如果传入[
,它被转化为_
之后,后面的字符就会被保留下来不会被替换,所以payload为
post:
CTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag
web125
CTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag在上题的基础上进行修改然后是它将flag和echo进行了过滤,现在我们需要将一个读文件的操作和将flag传进去,flag被过滤了可以新建一个文件其转折作用
CTF_SHOW=1&CTF[SHOW.COM=1&fun=highlight_file($_GET[1]);
?1=flag.php
web126【$_SERVER['argv'][0]=$_SERVER['QUERY_STRING']】
$_SERVER['argv'][0]=$_SERVER['QUERY_STRING']
query string是Uniform Resource Locator (URL)的一部分, 其中包含着需要传给web application的数据
GET:?$fl0g=flag_give_me
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=assert($a[0])
Web127【extract】
extract() 函数从数组中将变量导入到当前的符号表,使用数组键名作为变量名,使用数组键值作为变量值
举例就是?a=2,就会变成$a=2,这里ctf_show有个_需要构造,前面说过php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,这里空格没有被ban,所以我们就使用空格,payload为
?ctf show=ilove36d