<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    wmic遠程執行與go版本wmiexec的bug修復

    VSole2023-06-21 14:40:21

    首先,簡單介紹一下WMI, WMI是Windows 2K/XP管理系統的核心;對于其他的Win32操作系統,WMI是一個有用的插件。WMI以CIMOM為基礎,CIMOM即公共信息模型對象管理器(Common Information Model Object Manager),是一個描述操作系統構成單元的對象數據庫,為MMC和腳本程序提供了一個訪問操作系統構成單元的公共接口。 總的來說,就是一個很方便我們獲取系統信息的接口。

    在進入內網后,如果沒有防火墻的話,基本135端口都是開放的,如果我們知道UID為500的用戶或者域管理員的密碼,就可以通過wmic遠程執行命令:

    wmic /node:192.168.1.1 /user:administrator /password:abc123!@# process call create "cmd.exe /c whoami > c:\test.txt"
    

    但是,目前來說這種方法存在三個缺點:

    1.不支持通過hash執行命令。

    2.如果密碼中有逗號“,”,無論是直接在cmd中執行還是寫成bat,都會報錯:

    3.無法在linux下面執行。

    這樣就給我們的滲透過程帶來不少阻礙。但是有大神已經寫出各種語言的wmiexec,不過最方便的應該算golang版的,支持交叉編譯,地址是這個:

    https://github.com/C-Sto/goWMIExec

    經過測試,發現一個問題, 當在普通環境中用500用戶執行的時候,沒有任何問題:

    但是我查看它的代碼,里面雖然存在domain參數,但是沒有設置獲取,那么把它修改一下。 修改前:

    修改后:

    但是執行出錯,爆拒絕訪問錯誤(也就是錯誤5):

    我開始以為是域名輸入錯誤,但是嘗試test.com也不行。所以我懷疑是作者有些地方寫錯了。 拿出Wireshark,抓包看看。

    首先用正常的wmic執行一次:

    可以看到ntlmssp是正常地傳送了域名和用戶名:


    接著用goWMIExec.exe執行一次:

    發現域名無法正常傳送,而且域名不為unicode字符:

    那么大概的問題已經知道了,作者在進行ntlm認證的時候,沒有將go默認的utf-8編碼轉換為windows的unicode編碼,導致數據包在認證時無法正常識別。 嘗試一下修改作者的代碼。

    一步一步跟進執行函數: 

    在NewExecConfig里面domain沒有經過變換就返回:

    下一步進入NewExecer函數,我們直接跟進鑒權函數:

    可以看到問題所在了,domain在這里沒有轉為unicode就直接轉成byte[]進入NewSSPAuthenticate:

    那么我們可以在所有調用到NewSSPAuthenticate函數的地方,將domain先轉為unicode再傳入,就可以把問題解決了。 有的小伙伴就要問了,為什么不在NewExecConfig里面直接把domain轉化呢?這里就說明一下,也順便說明為什么我們能通過hash就可以登陸smb:

    windows在采用ntml遠程鑒權的時候,不是用明文對照,而是先把密碼轉成unicode,然后用md4加密成hash(這個加密出來的就是我們經常用到的hash),最后用這個hash作為hmac的md5的密鑰,加密大寫用戶名+域名,最后得出的結果要是跟儲存的一樣,就當你鑒權通過。

    所以這個域名不能先轉化為unicode,否則到了最后一步就會出錯。

    好了,回到代碼里面,作者寫了一個toUnicodeS的代碼,順便拿來一用,給所有調用到NewSSPAuthenticate函數的地方都加上,原代碼有兩處: 

    編譯之后測試一下:

    成功執行命令:

    只用hash也可以:

    域名hash
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Pass The Hash 即哈希傳遞攻擊,簡稱 PTH
    很多人把這個原因歸結于KB2871997補丁,實際上不然,這個事情的成因實際是UAC在搗亂。RID為500的賬戶和屬于本地administrators組的域用戶在通過網絡遠程鏈接時,默認就是高權限令牌。
    如果找到了某個用戶的ntlm hash,就可以拿這個ntlm hash當作憑證進行遠程登陸了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos協議均存在PTH: NTLM自然不用多說 kerberos協議也是基于用戶的client hash開始一步步認證的,自然也會受PTH
    所以可以通過它傳回lsass.dmp本地提取hashprocdump64.exe -accepteula -ma lsass.exe lsass.dmp 執行該指令,獲取到lsass.dmp
    所以可以通過它傳回lsass.dmp本地提取hashprocdump64.exe -accepteula -ma lsass.exe lsass.dmp 執行該指令,獲取到lsass.dmp
    如果找到了某個用戶的ntlm hash,就可以拿這個ntlm hash當作憑證進行遠程登陸了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos協議均存在PTH: NTLM自然不用多說 kerberos協議也是基于用戶的client hash開始一步步認證的,自然也會受PTH
    通常我們在滲透過程中從外圍打點進入內網后拿到主機提升到system權限,這一臺主機就已經拿下。但是我們進入內網的目標還是拿下盡可能多的主機,這時候選擇橫向移動的方法就尤為重要。今天就對一些常用的橫向手法進行一個總結,有不足之處歡迎師傅們進行斧正。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类