web30笔记(!preg_match("/flag|system|php/i")
<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:42:26 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
这次过滤了system、php,但是还有其他⽅法能够执⾏系统命令
system : 执⾏外部程序,并且显示输出,如果 PHP 运⾏在服务器模块中, system() 函数还会尝试在每⾏输出完毕之后, ⾃动刷新 web 服务器的输出缓存。如果要获取⼀个命令未经任何处理的原始输出, 请使⽤ passthru() 函数。
exec : 执⾏⼀个外部程序,回显最后⼀⾏,需要⽤echo输出。
shell_exec : 通过 shell 环境执⾏命令,并且将完整的输出以字符串的⽅式返回。
popen : 打开⼀个指向进程的管道,该进程由派⽣给定的 command 命令执⾏⽽产⽣。
proc_open : 执⾏⼀个命令,并且打开⽤来输⼊/输出的⽂件指针。
passthru : 执⾏外部程序并且显示原始输出。同 exec() 函数类似, passthru() 函数 也是⽤来执⾏外部命令(command)的。 当所执⾏的 Unix 命令输出⼆进制数据, 并且需要直接传送到浏览器的时候, 需要⽤此函数来替代 exec() 或 system() 函数。 常⽤来执⾏诸如 pbmplus之类的可以直接输出图像流的命令。 通过设置 Content-type 为 image/gif, 然后调⽤ pbmplus 程序输出 gif ⽂件, 就可以从 PHP 脚本中直接输出图像到浏览器。
pcntl_exec() : 在当前进程空间执⾏指定程序,当发⽣错误时返回 false ,没有错误时没有返回。
`(反引号):同 shell_exec()
payload: ?c=passthru('tac f*');
浙公网安备 33010602011771号