Skip to content

Additional Shell Commands

Chris Hammond edited this page Aug 16, 2023 · 1 revision

Falcon Toolkit supports all the commands available in the Falcon Cloud, whilst also providing extra functionality that makes it more flexible as a command line application. This page documents the additional commands and options that extend beyond the Falcon documentation.

Each additional command is switch is implemented either by CrowdStrike in Falcon Toolkit, or by the underlying Cmd2 library. Where the latter provides a command, this page provides a link to the relevant Cmd2 docs.

cloud_scripts

This command lists all clouded PowerShell and shell scripts. If you would like to execute one, use runscript -CloudFile. Note that you can tab complete cloud files, so combining cloud_scripts with runscript -CloudFile <tab> can save a lot of typos.

download

When a file has been retrieved from one or more systems via get, it can be downloaded via the download command. This command takes three arguments:

  • [optional] -b: a batch GET ID. If you previously ran get within the same session, as it will default to the most recent get.
  • [optional] -e: all files uploaded to RTR are compressed to a .7z file and encrypted with the password infected. This switch will automatically extract files downloaded from this container and delete the archived version.
  • [mandatory] A folder to extract to. You can use tab to auto-complete this.

get

The get command in Falcon Toolkit is akin to the one in the Falcon UI, but it supports a batch. This means that if some file named C:\test.txt exists 15 of the 50 systems you are connected to, and you run get C:\test.txt at the prompt, those 15 systems will upload the file to the Cloud. Grab the 15 files using the download command.

get_status

This command takes one parameter, -b, which corresponds to a batch GET ID. If you ran a get command in the current session, -b is not needed as it will default to the most recently run get. The output will be all systems that have succeeded in uploading the requested file to the Cloud.

The get_status command notably updates some state internally within the RTRPrompt object, which can be accessed in the Python bridge. This can be useful for use cases such as requesting a file from a thousand systems, then going round in a loop until at least 90% of systems have responded before downloading the outputs to a folder.

put_files

This command will list all PUT files stored in the Cloud. You can then use put to download one of those files to all connected systems. Note that put supports tab completion, so put_files combined with put can save a lot of typos.

run_pyscript

Inherited from Cmd2

Relevant Cmd2 Documentation: https://cmd2.readthedocs.io/en/latest/features/scripting.html#python-scripts

Cmd2 provides a Python bridge, which allows you to execute arbitrary Python code within the context of the Falcon Toolkit application. This can enable use cases that automate RTR with control flow, automated decision making, loops, and more. Python scripts can access the RTRPrompt object (stored in falcon_toolkit/shell/prompt.py) via self (e.g., self.device_ids will fetch the list of AIDs associated with the shell session). RTR Commands can be executed using the rtr function. Remember to escape properly, as in this example:

rtr("runscript -Raw \"Get-ChildItem\"")

run_script

Inherited from Cmd2

Relevant Cmd2 Documentation: https://cmd2.readthedocs.io/en/latest/features/scripting.html#running-command-scripts

Not to be confused with runscript, run_script allows you to execute a list of RTR shell commands sequentially. This effectively allows you to automate the toolkit by 'playing back' a list of commands.

runscript -WorkstationPath

The runscript command in Falcon Toolkit in -Raw, -CloudFile and -HostPath modes work identically to in the Cloud, with the exception that triple backticks are not needed (the Toolkit adds these in for you). However, Falcon Toolkit augments this command with a fourth switch: -WorkstationPath. This will take the path to a script on your system (.ps1, .sh, etc.) and execute it on all connected systems via -Raw. This means you do not need to copy and paste a long script into the shell, or upload to the Cloud before executing.