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*');

 

posted @ 2025-03-14 17:14  justdoIT*  阅读(39)  评论(0)    收藏  举报