powershell腳本之windows服務與進程

powershell腳本之windows服務與進程html

服務與進程的區別:python

Windows服務是指系統自動完成的,不須要和用戶交互的過程,可長時間運行的可執行應用程序git

進程是程序運行的實例,系統會給運行中的進程分配CPU、內存等資源github

一個服務無論有沒有被運行,都在你的硬盤裏,只有當它真正被運行時,操做系統就會真正給它分配內存、CPU時間片等資源,這一次運行就對應一個「進程」shell

windows服務的登陸帳戶有三種:windows

1.Local System (本地系統)數組

2.Network  Service(網絡服務)網絡

3.Local  Service(本地服務)session

 

1、 Local System (本地系統)less

首先,該帳戶也隸屬於本地Administrators用戶組,所以全部本地Administrators用戶可以進行的操做該帳戶也可以進行。

其次,該帳戶還可以控制文件的權限(NTFS   文件系統)和註冊表權限,甚至佔據全部者權限來取得訪問資格。若是機器處於域中,那麼運行於Local   System帳戶下的服務還可使用機器帳戶在同一個森林中獲得其餘機器的自動認證。最後一點就是運行於Local   System下的進程可以使用空會話(null  session)去訪問網絡資源。

2、Network  Service(網絡服務)

Network  Service帳戶是預設的擁有本機部分權限的本地帳戶,它可以以計算機的名義訪問網絡資源。可是他沒有Local   System那麼多的權限,以這個帳戶運行的服務會根據實際環境把訪問憑據提交給遠程的計算機。

3、Local  Service(本地服務)

Local  Service帳戶是預設的擁有最小權限的本地帳戶,並在網絡憑證中具備匿名的身份。

運行於此帳戶下的進程和運行於Network   Service帳戶下的進程的區別在於運行於Local   Service帳戶下的進程只能訪問容許匿名訪問的網絡資源。

4、服務管理命令

在cmd下可有兩種方法啓動服務,net和sc,net用於打開沒有被禁用的服務,語法是:

net start 服務名 ——啓動服務        

net stop 服務名——中止服務

用sc可打開被禁用的服務,語法是:

sc config 服務名 start= demand     //手動

sc condig 服務名 start= auto       //自動

sc config 服務名 start= disabled //禁用

sc start 服務名

sc stop 服務名

sc命令中=號後面都有一個空格,=號前面沒有空格

注:1.服務名不必定是你在服務面板看到的那個名,須要查看服務屬性,從那裏看服務名稱,注意是服務名稱,不是顯示名稱

2.net 只能打開沒有被禁用的服務sc命令 等號和值之間須要一個空格。

net用法:

1.查找服務名:

  

2.開啓服務,這裏以windows update服務爲例

2.1找到windows update服務的服務名,查詢服務的狀態(sc query 服務名),能夠看到服務狀態時關閉的。

  

2.2開啓服務並查詢服務狀態   #開啓服務能夠在非以」管理員運行cmd」下開啓服務

  

3.關閉服務  #關閉服務必須在」以管理員運行的狀態下運行」下關閉服務,否則會提示」拒絕訪問」

  

4.當服務處於禁用狀態時,net start 服務名命令就不能用了,只能用sc start 服務名

把windows update服務禁用掉,而後測試,能夠看到當把服務禁用掉以後再使用net start 服務名就不能開啓服務了

  

  

5.使用sc start 服務名開啓被禁用的服務,須要先把服務設置爲自動或者手動(sc config 服務名 start =demand/auto)再使用sc start服務名或者net 服務名開啓服務  #等號和值之間須要一個空格

  

5、用powershell查看系統啓用了哪些服務

1.打開powershell,鍵入以下命令

Get-WmiObject Win32_Service|?{$_.startname -like "LocalSystem"}|fl Name,PathName,State,StartMode|out-file C:\Users\wangyixue\Desktop\homework\Windows\lesson5\localsystem.log

  

2.在lesson5目錄下能夠看到記錄了LocalSystem(本地系統)服務的名稱、可執行文件的路徑、服務狀態、啓動類型的localsystem.log文件(fl 以列表形式顯示)

  

3.繼續鍵入如下命令,篩選出啓動類型爲「Auto」(自動)的服務

Get-WmiObject Win32_Service|?{$_.startname -like "LocalSystem" -and $_.startmode -like "Auto"}|fl Name,PathName,State,StartMode|out-file C:\Users\wangyixue\Desktop\homework\Windows\lesson5\localsystem.log

 

4.查看lesson5目錄下的localsystem.log文件,可得全部的啓動類型爲自動的服務

 

用腳本執行的代碼以下: 

<# #get-wmiobject win32_service | ?{$_.startname -like "LocalSystem"}|ft name,pathname,startmode | out-file -filepath c:\test\service.log
 ?是Where-Object的另外一個別名   可使用 Get-Alias -Definition Where-Object 查看Where-Object的全部別名 %  是foreach-Object的另外一個別名  可使用 Get-Alias -Definition foreach-object 查foreach-object的全部別名 #LocalSystem 本地系統 #NT AUTHORITY\NetworkService 網絡服務 # NT AUTHORITY\LocalService 本地服務 #>
$aaa=get-wmiobject win32_service    #得到全部服務
$s1=@() $s2=@() #建立空數據
$s3=@() foreach($i in $aaa) #遍歷對象數組
{ if ($i.startname -like "LocalSystem") { $s1+=$i   #添加數組
 } elseif($i.startname -like "NT AUTHORITY\LocalService") { $s2+=$i } else { $s3+=$i } } $s1|fl name,pathname,startmode | out-file -filepath c:\test\localsystem.log     #按表格輸出並保存到文件
$s2|fl name,pathname,startmode | out-file -filepath c:\test\localservice.log $s3|fl name,pathname,startmode | out-file -filepath c:\test\netservice.log

6、檢查每一個系統服務路徑的權限 

<# 得到系統服務的服務程序路徑的權限 get-acl 得到應用程序的權限,執行後返回的對象,包含若干方法能夠用來更新權限和設定全部權 #icacls 也是得到應用程序的權限,不一樣之處是icacls得到的是對象數組 #>
$ErrorActionPreference="SilentlyContinue"
$a=whoami   #查看當前的用戶 #對whoami得到結果進行處理,獲得當前用戶名 $a是對象數組,具備split方法
$uname=$a.split("\")[1] $group=(net user $uname | where {$_  -like "本地組*"}).split("*")[1].trim()  #得到當前用戶所屬組 本次實驗只適用於用戶屬於一個組 #得到全部*System服務帳戶類型、啓動類型
$s=Get-WmiObject win32_service |where{$_.startname -like "*System" -and $_.startmode -like "Auto"} #匹配全部的服務程序路徑 ~爲powershell中的轉義符 #?匹配0次或1次
$lujing=$s|where{$_.pathname -match ".+exe(`")?$"} #循環遍歷得到全部服務程序的權限 get-acl 得到應用程序的權限,執行後返回的對象,包含若干方法能夠用來更新權限和設定全部權 #icacls 也是得到應用程序的權限,不一樣之處是icacls得到的是對象數組
$lujing|foreach{ Trap{           #Trap異常處理,遇到錯誤,丟棄掉,繼續往下處理
    get-acl $_.pathname continue } if($?){ "********************************************************************"
        $_.name $_.pathname (icacls $_.pathname.tostring()|where{$_ -like "*$group*"}).trim() } }     

7、利用服務漏洞進行提權

1.Trusted Service Paths  

這個漏洞存在於二進制服務文件路徑中Windows錯誤解釋空格。這些服務一般都是以系統權限運行的,若是咱們利用這些服務就可能提權到系統權限。例如以下文件路徑:

C:\Program Files\Some Folder\Service.exe

上面文件路徑中的空格,Windows會嘗試尋找並執行以空格前單詞爲名字的程序,操做系統會在文件路徑下查找全部可能匹配項直到找到一個匹配爲止。例如以下例子,Windows會嘗試定位並執行以下的程序:

C:\Program.exe

C:\Program Files\Some.exe

C:\Program Files\Some Folder\Service.exe

Note:這種特性發生在開發人員沒有將整個文件路徑包含在引號內。將文件路徑包含在引號內會下降這個漏洞的威脅。因此這個漏洞被稱爲「不帶引號的服務路徑(Unquoted Service Paths.)」

檢測目標主機是否存在該漏洞:

wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """

下面作一個實驗來驗證服務路徑漏洞是否存在

實驗環境:

win7和存在服務路徑漏洞的photodex proshow.exe文件   從github下載:https://www.exploit-db.com/exploits/24872

1.首先,咱們在Windows系統中下載並安裝一個名爲photodex proshow的漏洞應用程序,咱們能夠在Exploit DB下找到了它。

  

2.在win7上安裝下載好的exe文件

3.測試是否存在服務路徑漏洞

wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """

從下圖能夠看到服務路徑有空格並且沒有引號,能夠說明存在服務路徑漏洞

  

4.把一個反彈shell python腳本的客戶端打包成exe文件,放到上面漏洞程序的文件夾中,並把python打包的exe文件重命名爲帶漏洞的文件名,開啓反彈shell服務端腳本,而後從新啓動帶漏洞的程序的服務。但鏈接是短暫的,這是由於當一個服務在Windows系統中啓動後,它必須和服務控制管理器通訊。若是沒有通訊,服務控制管理器會認爲出現了錯誤,並會終止這個進程。咱們全部須要作的就是在終止載荷進程以前,將它遷移到其它進程。

  

 

 

 

---------------------------------------------------------------------------------------------------------------

python 反彈shell請參考:https://www.cnblogs.com/yuzly/p/10473497.html  

相關文章
相關標籤/搜索