
手动提升其实也很简单,用 ShellExecuteEx 函数就可以做到:
BOOL ShellExecuteEx(LPSHELLEXECUTEINFO pExecInfo)
typedef struct _SHELLEXECUTEINFO {
DWORD cbSize
ULONG fMask
HWND hwnd
PCTSTR lpVerb // 必须设为runas
PCTSTR lpFile // 提升后的权限启动一个可执行文件路径
PCTSTR lpParameters
PCTSTR lpDirectory
int nShow
HINSTANCE hInstApp
PVOID lpIDList
PCTSTR lpClass
HKEY hkeyClass
DWORD dwHotKey
union {
HANDLE hIcon
HANDLE hMonitor
} DUMMYUNIONNAME
HANDLE hProcess
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO
这样运行程序时就会d出UAC对话框。
2、自动提升权限
《Windows核心编程(第五版)》 4.5.1也讲到如何实现自动提升权限,但他只是提了一下,如果真要来实现,不同的环境下的具体 *** 作可能会有所差异,它上面是这样讲的:
如果在应用程序中可执行文件中嵌入一种特殊资源(RT_MANIFEST),其中系统会检查<trustInfo>段,下面是示例清单文件的<trustInfo>段。我们可以将清单保存到可知性文件所在目录中,名称和可执行文件相同且扩展名使用 *.manifest那么效果也是一样的。
不过这个清单须要在注销系统后生效,可知性文件嵌入清单的优先权会比外部清单文件大。
...
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
/>
</requestedPrivileges>
</security>
</trustInfo>
...
本质上是通过加一个.manifest清单文件,里面加上requestedExecutionLevel标签。这个标签可能有三个值:
<requestedExecutionLevellevel="asInvoker|highestAvailable|requireAdministrator"uiAccess="true|false"/>
asInvoker:应用程序使用与主调程序一样的权限来启动。(对于标准用户程序来说,这是推荐做法)
highestAvailable:应用误用与当前用户所能获得的最高权限来运行。(管理员就是管理员权限,标准用户就是标准用户的权限)
requireAdministrator:应用程序必须以管理员权限来启动。
这一段是从《Windows核发编程(第五版)》上面摘抄过来的。前面说过,它只是大概说了一下,不是很具体。
我在实现的过程中,参考了微软给的步骤,http://msdn.microsoft.com/en-us/library/bb756929.aspx
manifest文件的内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然后在资源文件中加入:
#define MANIFEST_RESOURCE_ID 1
MANIFEST_RESOURCE_ID RT_MANIFEST "IsUserAdmin.exe.manifest"
或者在把这个.manifest文件添加到工程设置中:
Open your project in Microsoft Visual Studio 2005.
Under Project, select Properties.
In Properties, select Manifest Tool, and then select Input and Output.
Add in the name of your application manifest file under Additional manifest files.
Rebuild your application.
在上篇文章中,通过win7运行msf.exe,kali接收到一个session,但这个session权限只是普通权限,无法做更多的 *** 作。
权限提升
1.提高程序运行级别
2.UAC绕过
3.利用提权漏洞进行提权
提高程序运行级别
msf模块>exploit/windows/local/ask
但会触发UAC,只有当用户同意是才能获得更高权限
可以看到session 5只是普通权限,这时候利用ask模块进行提权,该模块需要设置要用来提权的session,以及启动程序的名称
ask模块设置完成后,就可以使用了,运行exploit,回到win7,可以看见d出一个execl.exe程序框,如果你点击是,则kali会获得一个新的session,如果点击否,则kali会得到失败信息。
Win7 截图:
win7 点击 否,kali返回信息:
win7 点击 是,kali获取到新的session
使用background退出这个meterpreter
使用sessions,查看session
使用sessions -i 6,进入新获取的session
使用getuid查看该session权限
发现还是普通权限
这时候使用getsystem,获得系统权限
再使用getuid查看
UAC绕过
msf模块
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_vbs
这里使用第一个模块进行绕过UAC提权
利用提权漏洞进行提权
exploit/windows/local/ms14_058_track_popup_menu
等等
这里使用
exploit/windows/local/ms16_014_wmi_recv_notif
这个模块,同样使用info和show options查看信息,只需要设置一个session就可以使用
攻击成功会直接返回一个shell,使用whoami查看权限
成功提权
我理解的提升权限是指的是从WindowsVista开始的UAC代入的特性对吧?
提升权限微软只提供了两个方法:
1.
exe的文件名为setup.exe, *** 作系统能够自动提升权限,会提示用户;
2.
第二个办法是在程序的manifest文件中指定权限。指定了管理员权限的程序会在资源管理器程序图标上加上盾牌图标,若用户没有禁用UAC,启动程序的时候 *** 作系统会向用户发出请求权限的提示。
你要清楚的是你不要打绕开UAC提升权限的想法,这是不可能的。
另外,微软没有提供提升权限的API。
微软提供了专门的教程:http://msdn.microsoft.com/en-us/library/bb756973.aspx
一共是9步,但是前面5步和后面3步都是废话,最重要的是第六步:
http://msdn.microsoft.com/en-us/library/bb756929.aspx
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)