PowerShell脚本开发之尝试登录ftp

所属分类: 脚本专栏 / PowerShell 阅读数: 2104
收藏 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管道介绍

这篇文章主要介绍了PowerShell入门教程之PowerShell管道介绍,本文讲解了管道的作用,并列出了几个使用实例,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell入门教程之函数、脚本、作用域介绍

这篇文章主要介绍了PowerShell入门教程之函数、脚本、作用域介绍,本文所讲内容都是PowerShell的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell入门教程之访问.Net程序集、COM和WMI实例

这篇文章主要介绍了PowerShell入门教程之访问.Net程序集、COM和WMI实例,本文讲解了PowerShell作为Windows平台的脱水语言来访问其它资源的例子,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell入门教程之创建和使用配置文件实例

这篇文章主要介绍了PowerShell入门教程之创建和使用配置文件实例,PowerShell的配置文件都是些普通的PowerShell脚本文件,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell入门教程之编写和使用脚本模块实例

这篇文章主要介绍了PowerShell入门教程之编写和使用脚本模块实例,本文讲解了模块、脚本模块、编写脚本模块、模块安装路径、模块文件夹等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

WMI入门教程之什么是WMI?

这篇文章主要介绍了WMI入门教程之什么是WMI?WMI有一组API,我们可以使用VBScript、PowerShell脚本还是利用C#的来访问WMI的类库,需要的朋友可以参考下
收藏 0 赞 0 分享

WMI入门教程之怎么使用WMI?

这篇文章主要介绍了WMI入门教程之怎么使用WMI?本文讲解了在软件中、PowerShell中、.NET中使用WMI的例子,需要的朋友可以参考下
收藏 0 赞 0 分享

WMI入门教程之WMI中的类在哪里?

这篇文章主要介绍了WMI入门教程之WMI中的类在哪里?本文讲解了WMI中类的层次结构、常用WMI类、WMI类查找手册等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

PowerShell小技巧之观察UNC路径

UNC(Universal Naming Convention)通用命名规则,也称通用命名规范、通用命名约定。UNC路径就是类似\\softer这样的形式的网络路径。
收藏 0 赞 0 分享

PowerShell小技巧之True和False的类型转换

这篇文章主要介绍了在PowerShell中将True和False的类型互相转换的几种方法,非常简单实用,有需要的朋友参考下
收藏 0 赞 0 分享
查看更多