web89
分析源码
首先,代码中包含flag.php文件,文件中应该有我们需要得到的flag
其次,通过highlight_file高亮显示文件
然后,检查是否存在名为num的get参数,若存在,则将至赋予变量$num
然后,检查$num中是否只包含了数字,若是,则输出no no no!并停止代码继续运行
然后,将$num转换为整数,若成功转换,则输出flag
通过分析源码,发现只要输入一个不带整数且能转换为整数的值即可
传入一个数组,即可得到flag
web90
分析源码
与上一题不同的是,本题检查$num中是否为4476,若是,则输出no no no!同时停止代码运行
然后将$num转换为整数,如果转换后的整数为4476,则输出flag;如果$num转换后不等于4476,则输出转换后的值
通过分析发现,输入一个不是4476的字符串,但是可以转换为4476的字符串即可
eg:传入4476abc
web91
分析源码
这段代码先将得到的cmd的值赋给了变量a
然后通过正则表达式检查$a中是否只包含了字符串‘php’,若是则执行后续代码
然后又通过一个正则表达式再次检查$a中是否只包含了字符串‘php’,若是则输出hacker
若为假,则输出flag
若外部条件为假,则输出no no no
ps:^php$ 这个正则表达式表示匹配仅包含字符‘php’的字符串
^表示字符串的开始,php表示需要匹配度字符序列,$表示字符串的结束
i 表示匹配时不分大小写
m表示多行,使得 ^
和 $
可以匹配每一行的开始和结束位置,而不仅仅是整个字符串的开始和结束位置
通过分析源码得知,传入的值应该是多行且开始位置不是php,结尾为php,因此传入一个两行且首行开始位置不是php,第二行结尾为php的字符串即可
ps:%0a表示换行
web92
分析源码
发现是和90题重复的,则输入?num=4476.1abc即可
web93
分析源码
本题与90和92题不同的地方在于本题多出了验证是否有小写字母,若是则输出no no no!然后停止运行
那么本题输入?num=4476.1这种小数即可
web94
分析源码
本题与93题相比,多出了对数字0的验证,如果不包含数字0,则输出no no no!且终止代码运行
同时使用了严格等于(==)来检查是否等于字符串4476
通过分析源码发现,传入的数据需要满足以下三个条件:
1.不等于4476 2.不包含小写字母 3.包含数字0
由此得知,传入4476.0即可
web95
分析源码
本题与94题的差别在于本题通过松散等于对4476进行验证,还多出了对小数点的验证
通过对源码的分析发现,要想获取flag,需要满足三个条件:
1.不等于4476 2.不包含小数点和小写字母 3.一定包含0
将4476转换为8进制,在8进制前面加一个空格,这样strpos()会返回1
传入?num= 010574即可
web96
分析源码
首先检查是否存在名为u的参数,若是且参数值松散等于flag.php,则输出no no no且停止代码运行
若存在参数u,但不为flag.php,则使用highlight_file($_GET['u'])高亮显示参数u指定文件
通过加上./绕过即可
web97
分析源码
首先检查是否收到了两个post参数a和b
然后检查a和b是否不相等
然后检查a和b两个参数的的MD5哈希是否相等
如果所有条件都满足,则输出 flag,否则输出 wrong
传入a[]=1&b[]=2即可
web98
分析源码
首先检查是否设置$_GET数组,若存在,则赋给$_POST,若不存在,就执行flag
然后检查$_GET数组中键为flag的值是否等于flag,若等于则赋给$_COOKIE,若不等于则执行flag
然后检查$_GET数组中键为flag的值是否等于flag,若等于则赋给$_SERVER,若不等于则执行flag
然后使用highlight_file函数高亮显示php文件内容,将php代码转换为html,使用了一个条件表达式来决定显示那个文件的内容,若$_GET['HTTP_FLAG']的值等于flag,则会显示flag的内容
通过分析源码,可以先发送一个get参数,然后再post上传一个HTTP_FLAG参数并赋值为flag即可
web99
分析源码
首先创建了一个名为allow的空数组,通过循环向其中填充了一些随机值
然后判断是否有一个参数n且参数的值在数组中,代码将会用file_put_contents函数将参数的值写入文件中
可以通过一句话木马来获取flag,传入<?php eval($_POST[1]);?>
web100
分析源码
首先获取v1,v2,v3并赋值
然后判断$v1,$v2,$v3是否都为数字,若都为数字,则继续向后检查,检查v2是否包含分号,若不包含分号,继续向后检查,检查v3是否包含分号,若包含分号,则将v2和v3的值拼接在一起,并执行
通过分析源码发现,要获取 flag,需要绕过给定的输入验证,并成功执行eval()函数中的代码
传入?v1=1&v2=var_dump($ctfshow)&v3=*/;即可
web101
分析源码
本题与上一题相比,过滤掉了许多特殊字符
传入?v1=1&v2=echo new ReflectionClass&v3=;即可
web102
分析源码
首先分别从 POST 和 GET 请求中获取v1,v2,v3的值
然后检查v2,v3是不是数字。若是,则v4为真,若否,则v4为假,代码停止运行
若v4为真,继续运行代码,先从$v2中提取字符串,从位置2开始,然后使用call_user_func函数调用$v1作为函数名,传递$s作为参数,然后将返回的结果储存在$str中,输出$str的值,将内容写入$v3指定的文件中
通过分析源码,v1是hex2bin;v2是两个任意数字然后加上php语句的base64转16进制的内容;v3是php伪协议语句
传入get: ?v2=11504438395948526859794171594473&v3=php://filter/write=convert.base64-decode/resource=2.php
post: v1=hex2bin即可
然后访问2.php,查看源码,即可得到flag
web103
分析源码
首先从POST请求中获得一个变量v1,然后从GET请求中获得变量v2和v3
然后检查v2和v3是否都是数字,若不是,输出hacker并结束代码运行
若v2和v3都是数字·,代码会从v2中获取第三个字符开始到最后的字符串,然后用v1指定的函数处理这个子字符串,处理后的字符串保存在$str中,然后输出,若字符串中没有php,则写入$v3指定的文件,若有php。则输出sorry并结束代码运行
与上一题相比,多出了对php的过滤,因此与上一题相同