PowerShell vs. PsExec for Remote Command Execution

Posted by Jianpeng Mo / January 20, 2014

Monitoring and maintaining large-scale, complex, highly distributed and interconnected systems can be extremely challenging for network administrators. Traditional IT management approaches are ill-equipped to handle the complexity of today‘s application architectures and deployment environments. It‘s common that an IT admin would support hundreds of machines in an enterprise network daily, but having to physically run down to each machine individually in order to issue a simple command is not acceptable. Therefore, being able to execute system commands remotely without too much additional pre-configuration is always a welcomed and appreciated solution.

In this blog post, we are going to discuss how to use two remote command execution tools, PowerShell and PsExec. We will show how to use each of these tools to remotely execute command line tools, using two OPSWAT products, OESIS Diagnose and Metascan Client, for our examples.

OESIS Diagnose is a troubleshooting tool for the OESIS project. It leverages OESIS Local functionalities internally and provides necessary information and visibility to the OPSWAT engineering team. Metascan Client is a GUI based utility that connects to the Metascan server and performs on-demand scan function calls.

*These steps are provided under the assumption that the user domain is in a protected network and that the command is being triggered by the system administrator.

PowerShell

Introduction:

PowerShell is provided by Microsoft as a replacement of shell to bring advanced scripting to Windows. It provides full access to COM and WMI and enables administrator to perform system commands on both local and remote Windows systems. Previously, PowerShell was packaged as a separate add-on to Windows, marketed mainly to server administrators. Starting with Windows 7, PowerShell is now a built-in part of the operating system, giving this capability to all Windows users.

Step by step usage for OESIS Diagnose:

  1. On the remote machine, enable remote commands in PowerShell as instructed below:


    PS C:\Windows\system32> Enable-PSRemoting -force_

  2. On a local machine, add remote system to the trusted list in PowerShell as seen below:

    PS C:\Windows\system32> Set-Item wsman:\localhost\Client\TrustedHosts -value 10.0.X.X_

  3. On a local machine, set the execution policy to remote signed in PowerShell as below:

    PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned_

  4. Copy OESIS Local package (including the OESIS Diagnose.exe) into the remote machine.
  5. On a local machine, create PowerShell script "remoteLaunchOESISDiagnose.ps1" as seen below:

    #Predefine necessary information
    $Username = "10.0.X.X\username"
    $Password = "password"
    $ComputerName = "10.0.X.X"
    $Script = {C:\OESISLocalPackage\OesisDiagnose_V3.exe}

    #Create credential object
    $SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
    $Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord

    #Create session object with this
    $Session = New-PSSession -ComputerName $ComputerName -credential $Cred

    #Invoke-Command
    $Job = Invoke-Command -Session $Session -Scriptblock $Script
    echo $Job

    #Close Session
    Remove-PSSession -Session $Session

  6. On a local machine, launch "“remoteLaunchOESISDiagnose.ps1” in PowerShell as seen below:

    PS C:\Windows\system32> ./remoteLaunchOESISDiagnose.ps1_

  7. The PowerShell script would be executed on the remote machine and launch OESIS Diagnose in the system. The result files would be generated on the remote machine.

Step by step usage for Metascan Client:

  1. The same setup process as step 1, 2 and 3 of the OESIS Diagnose example above.
  2. Copy Metascan Client package into the remote machine.
  3. On the local machine, create PowerShell script "remoteLaunchMetascanClient.ps1” as below:

    #Predefine necessary information
    $Username = "10.0.X.X\username"
    $Password = "password"
    $ComputerName = "10.0.X.X"
    $Script = {C:\MetascanClientPackage\MetascanClient.exe server="10.0.Y.Y:8008/metascan_rest" auto_start=1 allowed_scan_levels=1}

    #Create credential object
    $SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
    $Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord

    #Create session object with this
    $Session = New-PSSession -ComputerName $ComputerName -credential $Cred

    #Invoke-Command
    $Job = Invoke-Command -Session $Session - Scriptblock $Script
    echo $Job

    #Close Session
    Remove-PSSession -Session $Session

  4. On the local machine, launch “remoteLaunchMetascanClient.ps1” in PowerShell as seen below:

    PS C:\Windows\system32> ./remoteLaunchMetascanClient.ps1_

  5. The PowerShell script will be executed on the remote machine and triggers Metascan Client to scan against the pre-setup Metascan server which is specified in the command line, with the scan result being generated on the remote machine.

Limitations:

Both the OESIS Diagnose and Metascan Client scan functions are able to be executed remotely via PowerShell, but PowerShell fails to launch Metascan Client UI from the remote machine. This is because when remotely accessing a machine via PowerShell, an interactive desktop session is not started. For security reasons, users can only see applications that are opened within their own interactive sessions. Basically every Windows operating system thinks it‘s a Terminal Server, but Windows does not want users opening applications that other users could possibly see. Windows assumes that multiple users will be using the machine, so it isolates these applications for a number of obvious security reasons.

PsExec

Introduction:

PsExec is a command line tool allowing the execution of processes on a remote system and transfer the results of operations to the local console. It has a long list of optional parameters that allow a great deal of flexibility for IT administrators. The key feature of PsExec is to allow users to run a script or application within the security context of either the currently logged on user or as a user provided during program initialization.

Step by step usage for OESIS Diagnose:

  1. Download PSTools from the below link, PsExec is part of the package.

  2. Copy OESIS Local package (including the OESIS Diagnose.exe) into the remote machine.
  3. On the local machine, open the command prompt (cmd), go to the directory where the PsExec file is located.
  4. On the local machine, execute the following command:

    C:\whereYouSavePsExec>PsExec.exe \\10.0.X.X -u username -p password C"\OESISLocalPackage\OesisDiagnose_V3.exe_

  5. PsExec will launch the OESIS Diagnose process on the remote machine using the credential which is provided above and generate the diagnose report in the system.

Step by step usage for Metascan Client:

  1. The same setup process as step 1 of OESIS Diagnose usage.
  2. Copy Metascan Client package into the remote machine.
  3. On the local machine, open command prompt (cmd), go to the directory where the PsExec file exists.
  4. On the local machine, execute the following command:

    C:\whereYouSavePsExec>PsExec.exe \\10.0.X.X -u username -p password C:\MetascanClientPackage\MetascanClient.exe server="10.0.Y.Y:8008/metascan_rest" auto_start=1 allowed_scan_levels=1_

  5. PsExec will launch the Metascan Client process on the remote machine using the credential which is provided above. This will bring up the Metascan Client UI and the scan result will be generated on the remote machine.

Limitations:

PsExec does not natively come with the Windows operating system, users have to download the PSTool package separately (an extra 1.6 Mb folder). PsExec does not provide an easy way for users to access network resources on the remote machine, due to the input argument being limited to 256 characters. Some older versions such as v1.73 and v1.82 have some serious problems with programmatic redirection of StdOut over named pipes.

Notes: On the Microsoft website, it mentions the below statement “some anti-virus engines report that one or more of the tools are infected with a ‘remote admin’ virus.” But, according to the latest scan result from Metascan Online, there were no antivirus engines detecting the PSTool package as a threat.

Summary:

Both PowerShell and PsExec have some advantages and disadvantages for network administrators. When it comes down to it, there is really no good or bad choice between PowerShell and PsExec, it largely depends on which system management tools IT administrators decide to select. The best option for novice users would be to use the PsExec option, considering it’s the easiest to start out with and allows you to run CLI based executables remotely and take advantage of the full feature set.

Announcement: Metascan Client is now Metadefender Client as part of our streamlined Metadefender Product Family. Check out the blog announcement to learn more. 

时间: 2024-10-15 08:25:14

PowerShell vs. PsExec for Remote Command Execution的相关文章

struts2 CVE-2012-0392 S2-008 Strict DMI does not work correctly allows remote command execution and arbitrary file overwrite

catalog 1. Description 2. Effected Scope 3. Exploit Analysis 4. Principle Of Vulnerability 5. Patch Fix 1. Description Struts2框架存在一个DevMode模式,方便开发人员调试程序.如果启用该模式,攻击者可以构造特定代码导致OGNL表达式执行,以此对主机进行入侵Remote command execution and arbitrary file overwrite, St

struts2 CVE-2010-1870 S2-005 XWork ParameterInterceptors bypass allows remote command execution

catalog 1. Description 2. Effected Scope 3. Exploit Analysis 4. Principle Of Vulnerability 5. Patch Fix 1. Description XWork是一个命令模式框架,用于支持Struts 2及其他应用  在Atlassian Fisheye,Crucible和其他产品中使用的Struts 2.0.0至2.1.8.1版本中的Xwork中的OGNL表达式赋值功能使用许可的白名单,远程攻击者可以借助

Remote Command Execution via CouchDB

11 Sep 2016 ? Pentest, Database 背景介绍 CouchDB是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问.CouchDB可以安装在大部分POSIX系统上,包括Linux和Mac OS X. 漏洞介绍 Couchdb默认会在5984端口开放Restful的API接口,如果使用SSL的话就会监听在6984端口,用于数据库的管理功能.其HTTP Server默认开启时没有进行

struts2 CVE-2013-1965 S2-012 Showcase app vulnerability allows remote command execution

catalog 1. Description 2. Effected Scope 3. Exploit Analysis 4. Principle Of Vulnerability 5. Patch Fix 1. Description OGNL provides, among other features, extensive expression evaluation capabilities. A request that included a specially crafted requ

struts2 CVE-2013-2251 S2-016 action、redirect code injection remote command execution

catalog 1. Description 2. Effected Scope 3. Exploit Analysis 4. Principle Of Vulnerability 5. Patch Fix 1. Description struts2中有2个导航标签(action.redirect),后面可以直接跟ongl表达式,比如 1. test.action?action:${exp} 2. test.action?redirect:${exp} Struts2的DefaultActio

MyBB <= 1.8.2 unset_globals() Function Bypass and Remote Code Execution(Reverse Shell Exploit) Vulnerability

catalogue 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 MyBB's unset_globals() function can be bypassed under special conditions and it is possible to allows remote code execution. Relevant Link: https://cxsecurity.com/issue/WLB-20151

Home Web Server 1.9.1 build 164 - CGI Remote Code Execution复现

一.  Home Web Server 1.9.1 build 164 - CGI Remote Code Execution复现 漏洞描述: Home Web Server允许调用CGI程序来通过POST请求访问位于/cgi-bin下的文件,然后通过目录遍历,就有可能执行远程主机的任意可执行程序. 漏洞影响范围: Home Web Server 1.9.1 build 164 漏洞复现: 利用原理: NC连接发送打开计算器请求,安装Home Web Server 1.9.1 build 164

CVE-2010-0483分析 Microsoft Internet Explorer 6/7/8 - 'winhlp32.exe' 'MsgBox()' Remote Code Execution

相关资料:https://www.exploit-db.com/exploits/11615/ 目的是为了了解漏洞执行的流程. 根据资料准备服务端环境: 用一台win7当做是服务器,需要在win7上共享一个文件夹用于客户端访问.我的测试环境共享的文件夹是www. (1)启用Guest来宾账户,共享文件夹时将Guest添加读权限.此时在win7本机上应能访问,但在局域网的XP虚拟机无法访问  \\192.168.0.11\www\ (2)运行 secpol.msc 打开本地安全策略->本地策略->

Microsoft Windows 2003 SP2 - 'ERRATICGOPHER' SMB Remote Code Execution

EDB-ID: 41929 Author: vportal Published: 2017-04-25 CVE: N/A Type: Remote Platform: Windows Aliases: ERRATICGOPHER Advisory/Source: N/A Tags: N/A E-DB Verified:  Exploit:  Download/ View Raw Vulnerable App: N/A #!/usr/bin/env python # -*- coding: utf