[GXYCTF2019]禁止套娃

进入发现什么都没有

查看源码还是什么都没有

dirsearch扫描

发现.git 泄露

使用Githack提取

第一个if:

查看get提交的变量”exp”是否存在

第二个if:

过滤伪协议防止直接提取flag.php

第三个if:

匹配完exp只允许剩下;即只能是用小写并且不能携带参数

第四个if:

匹配掉很多函数


首先思路读取当前目录下的文件:

Print_f(scandir(.))

如何满足 . 呢

需要使用两个函数:current() 和 localeconv()

即 Current() 函数会返回第一个元素

再看 localeconv():

Localeconv()函数的作用是返回一个包含本地数字及货币格式信息的数组

从图看到,返回的第一个目标正是 .

所以current(loacleconv())返回的值就是.

再与scandir()组合:

print_r(scandir(current(localeconv())));

第一步目的达到了,那如何才能读取倒数第二个文件flag.php?

第一种方法:

可以用array_rand()函数加上array_flip(),array_rand函数可以返回数组中随机一个或多个键名

可以用多次使用此函数达到在目录中返回flag.php

然后使用array_flip()函数将键名与键值对换:

组合一起即可

第二种方法:

既然是倒数第二个,那就是说是倒着数的”下一个”

可以用array_reverse()将数组反转后用next()选择下一个


最后一步:如何读取文件?

因为最后一个if的原因

导致file_get_contents()函数被禁用

但可以用highlight_file() 与它的别名  show_source()读取

payload:

?exp=print(show_source(next(array_reverse(scandir(current(localeconv()))))));

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注