PowerShell腳本開發(fā)之嘗試登錄ftp
上一篇文章介紹了通過PowerShell批量掃描IP段和端口,在PSNet程序集中添加了Invoke-ScanIPPort函數(shù),這里盡管掃描到了指定IP端中監(jiān)聽的端口,但是未對端口和相應的程序進行對應,正如我們所知一些常用的應用程序使用的默認端口是固定的,通過收集對應關(guān)系會便于實現(xiàn)批量對IP范圍中存在的業(yè)務進行確認,這個功能我們將會在后續(xù)的文章中進行介紹。
在掃描到某些特定端口之后,我們接下來就需要尋找到這個端口對應業(yè)務的弱密碼和常見密碼,通過對默認密碼的掃描,如果嘗試出了正確的密碼,很多時候我們能找到滲透測試時的重要突破口。對可以作為滲透測試時的弱密碼攻擊的方向通常有ftp、mysql、sqlserver、oracle、telnet、ssh、Tomcat、Weblogic等等,如果能在掃描到此類服務后,快速通過統(tǒng)一的方法掃描到弱密碼將會大大加快對敏感信息和權(quán)限提升的進度。本文和后續(xù)的文章將會試圖通過PowerShell實現(xiàn)對上述潛在攻擊點的弱密碼嘗試,本文首先針對ftp的密碼 嘗試。
在PSNet程序集中繼續(xù)進行擴展,在$env:PSSpace/PSNet/TCPOp/下創(chuàng)建名為Invoke-FtpLogin.ps1的腳本用于在傳入指定ftp地址、用戶名和密碼后返回是否登錄成功。
同時在$env:PSSpace/PSNet/PSNet.psm1中添加對Invoke-FtpLogin.ps1程序文件的應用,便于在PowerShell初始化時同時初始化此函數(shù) :
. $env:PSSpace/PSNet/TCPOp/Invoke-FtpLogin.ps1
下面說明此函數(shù)中相關(guān)參數(shù)的作用:
-Site用于傳入ftp服務器的地址,格式如ftp://localhost ,可以使用域名或IP地址,此參數(shù)必選
-User用于傳入要驗證的ftp服務器的用戶名,默認值為Anonymous,可選
-Pass用于傳入要驗證的ftp服務器的密碼,默認值為hello@world ,可選(注:ftp協(xié)議中匿名用戶的密碼可以使用任何帶有@符號的字符串來代替)
-Port用于要驗證的ftp服務器的端口號,默認值為21,可選(暫時未使用,后續(xù)文章將用于擴展)
-TimeOut用于指定驗證密碼時ftp服務器的超時時間,默認值為3000ms,可選(暫時未使用,后續(xù)文章將用于擴展)
-ReadWriteTimeOut用于指定ftp服務器的默認讀寫超時時間,默認值為10000ms,可選(暫時未使用,后續(xù)文章將用于擴展)
此腳本的調(diào)用方式:
執(zhí)行效果如下:

能看到存在匿名用戶的情況下輸入ftp主機地址即可登錄,而輸入ftp對應的密碼則只有輸入正確值才會顯示正常。
代碼如下:
=====文件名:Invoke-FtpLogin.ps1=====
Function Invoke-FtpLogin{
Param(
[parameter(Mandatory = $true)]
[string]$Site = "ftp://localhost",
[string]$User = "Anonymous",
[string]$Pass = "hello@world",
[int]$Port=21,
[int]$TimeOut=3000,
[int]$ReadWriteTimeout=10000
)
Write-Host "Get FTP site dir listing..."
# Do directory listing
$FTPreq = [System.Net.FtpWebRequest]::Create($Site)
$FTPreq.Timeout = $TimeOut # msec (default is infinite)
$FTPreq.ReadWriteTimeout = $ReadWriteTimeout # msec (default is 300,000 - 5 mins)
$FTPreq.KeepAlive = $false # (default is enabled)
$FTPreq.Credentials = New-Object System.Net.NetworkCredential($User,$Pass)
$FTPreq.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
try
{
$FTPres = $FTPreq.GetResponse()
Write-Host "$User _ $Pass OK"
$success = $true
#Write-Host $FTPres.StatusCode -nonewline
#Write-Host $FTPres.StatusDescription
$FTPres.Close()
}
catch
{
Write-Host "FAILED: $_"
$success = $false
}
}
相關(guān)文章
PowerShell入門教程之訪問.Net程序集、COM和WMI實例
這篇文章主要介紹了PowerShell入門教程之訪問.Net程序集、COM和WMI實例,本文講解了PowerShell作為Windows平臺的脫水語言來訪問其它資源的例子,需要的朋友可以參考下2014-10-10
Powershell中請求WebServices并以JSON格式輸出結(jié)果
這篇文章主要介紹了Powershell中請求WebServices并以JSON格式輸出結(jié)果,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-03-03
Windows Powershell Where-Object 條件過濾
本篇會對條件判斷進行實際應用。在管道中可以通過條件判斷過濾管道結(jié)果,Where-Object會對集合逐個過濾,將符合條件的結(jié)果保留。2014-10-10
PowerShell函數(shù)中限制數(shù)組參數(shù)個數(shù)的例子
這篇文章主要介紹了PowerShell中限制函數(shù)的數(shù)組參數(shù)個數(shù)的例子,可以控制數(shù)組的參數(shù)個數(shù)在指定范圍內(nèi),需要的朋友可以參考下2014-07-07
Powershell小技巧之使用Jint引擎在PowerShell中執(zhí)行Javascript函數(shù)
這里演示如何利用PowerShell將一段Javascript函數(shù)字符串交給Jint引擎去執(zhí)行。方法很簡單,希望對大家有所幫助2014-09-09

