powershell對指定IP進行埠掃瞄

2021-06-10 05:38:21 字數 2850 閱讀 8666

好久沒寫技術文章了,近期會發布多篇關於powershell和安全相關的一些文章。前些天看到一篇關於metasploit與powershell的文章,裡面提到了一句關於埠掃瞄的語句,寫的很簡練,思路很不錯,可以拋開笨重的nmap直接掃瞄指定的指定ip的埠:

1..1024 | % 2>$null

語句中直接通過..列舉了1到1024之間的數字,通過管道次傳遞給後面的操作符,使用new-object建立system.net.sockets.tcpclient物件,呼叫該物件的connect()方法連線指定ip的指定埠,而埠則是由管道傳入的入組物件,也就是前面提到的1~1024及其之間的的數字,是由$_這個自動變數來代替,代表管道傳入的當前的物件。對於開放tcp埠是會有相應的程式監聽該埠的,等待程式連線,如果連線了乙個未曾起監聽的埠,tcpclient物件是會丟擲以下的異常

「exception calling "connect" with "2" argument(s): "由於目標機器積極拒絕,無法連線。 192.168.10.26:1"」

對於丟擲的異常通過2>$null的方式將錯誤資訊重定向到$null的空裝置,而不再當前螢幕輸出,於此同時如果在對指定埠進行連線的過程中未曾丟擲異常說明tcpclient物件可以正常連線到埠,則列印出該埠並提示該埠是開啟的。

通過powershell對.net物件的呼叫我們可以做很多的事情,基本上用winform和asp.net能做的事情大多可以通過powershell進行操作,與此同時我有了乙個想法,通過powershell是否可以寫出一些常用的用於安全和滲透測試的工作指令碼,這些指令碼可以組合成乙個工具集,這不就能在手邊沒有相關滲透工具的情況下用 輕量級的指令碼環境+程式設計 實現安全相關的功能檢測呢?

上面的指令碼寫的很簡練了,但是有乙個缺點,就是呼叫的tcpclient物件超時時間比較長,不管埠是否開發,都需要等到連線超時後才會掃瞄下乙個埠,掃瞄乙個區間的埠會耗費很多的時間,鑑於此我打算改造上面的指令碼,為了便於函式的共享和重用,建立乙個名為psnet的工具集:

step 1:建立powershell的工作資料夾(d:\my documents\windowspowershell\modules)並建立系統環境變數指向該目錄,便於後續呼叫,如psspace

step 2.在上述步驟中提到的psspace路徑中建立與目標module同名的目錄用於存放指令碼,即在%psspace%下建立psnet

step 3.在psnet目錄下建立與module同名的.psm1檔案psnet.psm1

step 4.在psnet目錄下建立相關細分的子函式目錄,便於不同型別操作進行分類,如建立tcpop,用於建立tcp相關操作,並把test-tcpport.ps1放入其中

step 5.開啟psnet.psm1加入行:.$psspace/tcpop/test-tcpport.ps1 以後如果要建立任何相關函式檔案都可以新增一條記錄到此檔案,以便module初始化的時候可以初始化相關的函式,如果相關函式相互之間存在依賴關係,被依賴的檔案初始化語句需要放在有依賴關係的檔案語句之前

step 6. 在test-tcpport.ps1語句的最後面新增export-modulemember -function * 語句用於將該檔案中的函式都作為module的成員發布。

至此工具集的結構建立成功,目錄樹如下所示:

+d:\my documents\windowspowershell\modules

└─psnet

│  psnet.psm1

│  └─tcpop

test-tcpport.ps1

如果我們要在psnet下建立關於udp相關的操作可以與tcpop同級建立udpop子模組目錄,依次類推,與網路相關的操作子模組均放在psnet下,再預先建立乙個pssecurity模組用於後續建立於安全相關的模組。目錄結構如下:

d:\my documents\windowspowershell\modules

├─psnet

│  │  psnet.psm1

│  │ 

│  ├─tcpop

│  │      test-tcpport.ps1

│  │     

│  └─udpop

└─pssecurity

對於test-tcpport.ps1子模組,寫入以下**用於實現對tcp埠是否監聽進行測試:

function test-tcpport

else

}else

}else

}catch{}

}export-modulemember -function * #用於將函式匯出為模組成員

對於此模組可以通過powershell命令列使用以下語句 :

import-module $env:psspace/psnet

test-tcpport 192.168.10.26 80

進行呼叫,或者通過命令列或者批處理啟動時指定

start %windir%\system32\windowspowershell\v1.0\powershell.exe -noexit -command "import-module '%psspace%\psnet' "

對於本文最初的那個例子,在有了匯入這個模組後執行:

1..1024 | %

}在本文通過一段小指令碼的方式引入了通過powershell實現簡單安全滲透功能的想法,首先介紹了該小指令碼是如何實現功能的,接下來對建立指令碼工具集並匯入的方法,隨後又在該工具集中建立了test-tcpport函式,並介紹了呼叫方法,在後續的文章中將會陸續介紹相關指令碼的開發,盡請期待。

firewalld對指定IP開放指定埠的配置

1.開啟firewalld防火牆 systemctl start firewalld.service2.新增防火牆規則 對指定ip開放指定埠 1 postgresql埠設定。允許192.168.142.166訪問5432埠 firewall cmd permanent add rich rule r...

Powershell 配置IP位址

1 設定 windowsxp 本地連線 的ip位址為10.223.3.254,子網為255.255.255.0,閘道器為10.223.3.1,躍點數為1.c netsh inte ce ip set address name local area connection source static a...

判斷指定IP是否在指定IP段中

最近在做乙個訪問控制的功能,只允許指定ip,或者ip段中的ip訪問。下面方法用來判斷指定ip是否在指定ip段中 已通過測試 判斷ip是否在某個網段內 param ip param network return bool function ipinnetwork ip,network return f...