PowerShell脚本开发之尝试登录ftp

所属分类: 脚本专栏 / PowerShell 阅读数: 2167
收藏 0 赞 0 分享

上一篇文章介绍了通过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

执行效果如下:

能看到存在匿名用户的情况下输入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
}
}


更多精彩内容其他人还在看

PowerShell遍历文件、文件夹的方法

这篇文章主要介绍了PowerShell遍历文件、文件夹的方法,本文使用Get-ChildItem命令实现,需要的朋友可以参考下
收藏 0 赞 0 分享

使用PowerShell操作Windows服务的命令小结

这篇文章主要介绍了使用PowerShell操作Windows服务的命令小结,本文只是做了一个命令列表,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell中调用外部程序和进程操作命令例子

这篇文章主要介绍了PowerShell中调用外部程序和进程操作命令例子,给出了进程操作的一些命令和调用外部应用程序的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell中正则表达式使用例子

这篇文章主要介绍了PowerShell中正则表达式使用例子,本文用实例来说明如何使用正则匹配到想要的内容,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell是什么?

这篇文章主要介绍了PowerShell是什么?本文解读了PowerShell的一些术语,对PowerShell做了一个完全介绍,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell直接脚本时出现无法加载文件因为禁止执行脚本

Powershell直接脚本时出现无法加载文件因为在此系统中禁止执行脚本,有关此问题的解决方法如下
收藏 0 赞 0 分享

Tornado中database模块被取消的替代方法

这篇文章主要介绍了Tornado中database模块被取消的替代方法,新的方法是使用torndb模块,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell学习笔记--使用正则表达式查找文件

本文介绍PowerShell中使用正则表达式的查找文件的方法,PowerShell的正则表达式与微软其它语言的正则表达式是一样的,使用非常方便。
收藏 0 赞 0 分享

Windows Powershell 介绍和安装

Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。
收藏 0 赞 0 分享

Windows Powershell 自定义控制台

这篇文章主要介绍了Windows Powershell 自定义控制台,包括选项、字体、布局和颜色四个方面的自定义风格,希望对大家有所帮助
收藏 0 赞 0 分享
查看更多