PowerShell嘗試登錄ftp

上一篇文章介紹了通過PowerShell批量掃描IP段和端口,在PSNet程序集中添加了Invoke-ScanIPPort函數,這裏儘管掃描到了指定IP端中監聽的端口,但是未對端口和相應的程序進行對應,正如我們所知一些常用的應用程序使用的默認端口是固定的,通過收集對應關係會便於實現批量對IP範圍中存在的業務進行確認,這個功能我們將會在後續的文章中進行介紹。

在掃描到某些特定端口之後,我們接下來就需要尋找到這個端口對應業務的弱密碼和常見密碼,通過對默認密碼的掃描,如果嘗試出了正確的密碼,很多時候我們能找到***測試時的重要突破口。對可以作爲***測試時的弱密碼***的方向通常有ftp、mysql、sqlserver、oracle、telnet、ssh、Tomcat、Weblogic等等,如果能在掃描到此類服務後,快速通過統一的方法掃描到弱密碼將會大大加快對敏感信息和權限提升的進度。本文和後續的文章將會試圖通過PowerShell實現對上述潛在***點的弱密碼嘗試,本文首先針對ftp的密碼 嘗試。

在PSNet程序集中繼續進行擴展,在$env:PSSpace/PSNet/TCPOp/下創建名爲Invoke-FtpLogin.ps1的腳本用於在傳入指定ftp地址、用戶名和密碼後返回是否登錄成功。

同時在$env:PSSpace/PSNet/PSNet.psm1中添加對Invoke-FtpLogin.ps1程序文件的應用,便於在PowerShell初始化時同時初始化此函數 :

. $env:PSSpace/PSNet/TCPOp/Invoke-FtpLogin.ps1

下面說明此函數中相關參數的作用:

-Site用於傳入ftp服務器的地址,格式如ftp://localhost ,可以使用域名或IP地址,此參數必選
-User用於傳入要驗證的ftp服務器的用戶名,默認值爲Anonymous,可選
-Pass用於傳入要驗證的ftp服務器的密碼,默認值爲hello@world  ,可選(注:ftp協議中匿名用戶的密碼可以使用任何帶有@符號的字符串來代替)
-Port用於要驗證的ftp服務器的端口號,默認值爲21,可選(暫時未使用,後續文章將用於擴展)
-TimeOut用於指定驗證密碼時ftp服務器的超時時間,默認值爲3000ms,可選(暫時未使用,後續文章將用於擴展)
-ReadWriteTimeOut用於指定ftp服務器的默認讀寫超時時間,默認值爲10000ms,可選(暫時未使用,後續文章將用於擴展)

此腳本的調用方式:

Invoke-FtpLogin -Site  ftp://localhost -User test -Pass abcd1234

執行效果如下:

invoke-ftplogin

能看到存在匿名用戶的情況下輸入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
}
}

作者: 付海軍
出處:http://fuhj02.blog.51cto.com
版權:本文版權歸作者和51cto共有
轉載:歡迎轉載,爲了保存作者的創作熱情,請按要求【轉載】,謝謝
要求:未經作者同意,必須保留此段聲明;必須在文章中給出原文連接且保證內容完整!否則必究法律責任!
個人網站: http://txj.shell.tor.hu/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章