01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02工具介绍
Sharp4Cmd是一款基于 .NET 实现的命令行工具,其主要特点是可以不依赖 cmd.exe 来运行命令。通过调用 Windows 系统 API 来执行命令,从而实现绕过一些常见的安全检测机制。输入参数 "whoami /priv" 运行后的效果如下图所示。
03实现原理
1. CreateProcess函数
首先,我们需要通过 P/Invoke 声明一些 Windows API 函数,这些函数包括 CreateProcess, CreateProcess 方法负责创建一个新的进程来执行命令。它使用了一些高级特性,例如父进程注入和进程缓解策略。
class UnmanagedExecute
{
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CreateProcess(
string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes,
ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags,
IntPtr lpEnvironment, string lpCurrentDirectory, [In] ref STARTUPINFOEX lpStartupInfo,
out PROCESS_INFORMATION lpProcessInformation);
}
2. OpenProcess
OpenProcess 函数用于打开一个已有的进程,并返回该进程的句柄。processAccess 参数指定了访问权限,bInheritHandle 表示句柄是否可继承,processId 是要打开的进程的 ID。
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr OpenProcess(ProcessAccessFlags processAccess, bool bInheritHandle, int process