PowerShell脚本开发之尝试登录ftp

 更新时间:2014年10月13日 10:43:32   投稿:hebedich  
本文和后续的文章将会试图通过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

执行效果如下:

能看到存在匿名用户的情况下输入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中的特殊变量$null介绍和创建多行注释小技巧

    PowerShell中的特殊变量$null介绍和创建多行注释小技巧

    这篇文章主要介绍了PowerShell中的特殊变量$null介绍和创建多行注释小技巧,需要的朋友可以参考下
    2014-08-08
  • PowerShell是什么?

    PowerShell是什么?

    这篇文章主要介绍了PowerShell是什么?本文解读了PowerShell的一些术语,对PowerShell做了一个完全介绍,需要的朋友可以参考下
    2014-08-08
  • PowerShell: Try...Catch...Finally 实现方法

    PowerShell: Try...Catch...Finally 实现方法

    PowerShell 本身有很多很好的错误控制,但是习惯于.net编程的人员,更喜欢用Try Catch Finally方法,尤其当有一段代码必须被执行到的时候。现在好了,adweigert 想出了一个好方法来实现。这个函数已经在多种情况下测试过,希望能对你有帮助
    2013-11-11
  • powershell网络蜘蛛解决乱码问题

    powershell网络蜘蛛解决乱码问题

    这篇文章主要介绍了powershell网络蜘蛛解决乱码问题,需要的朋友可以参考下
    2017-10-10
  • Powershell小技巧之判断是否包涵大小写

    Powershell小技巧之判断是否包涵大小写

    这篇文章主要介绍了Powershell判断是否包涵大小写的方法,需要的朋友可以参考下
    2014-09-09
  • Powershell小技巧之找出脚本中的错误

    Powershell小技巧之找出脚本中的错误

    这篇文章主要介绍了使用Powershell进行筛选然后你可以快速扫描一个目录或整个电脑中的PS文件找出他们中的语法错误。
    2014-09-09
  • PowerShell中prompt函数的妙用

    PowerShell中prompt函数的妙用

    这篇文章主要介绍了PowerShell中prompt函数的妙用,例如自定义命令提示符,在提示符中自动输出当前路径等技巧,需要的朋友可以参考下
    2014-08-08
  • Windows PowerShell是啥?看完本文你就懂它了

    Windows PowerShell是啥?看完本文你就懂它了

    这篇文章主要介绍了Windows PowerShell是啥?Windows PowerShell是什么?Windows PowerShell有哪些特性?Windows PowerShell有什么用?看完本文你就懂它了,需要的朋友可以参考下
    2015-04-04
  • Windows Powershell强类型数组

    Windows Powershell强类型数组

    强类型数组可以理解为强制数据类型的数组,也就是一个数组里只包含一种数据类型,强制转换数组语法的优势就是如果使用分号代替逗号分隔值,PowerShell将每个值看作命令文本,PowerShell会执行它并且存储结果。
    2014-09-09
  • PowerShell常用正则表达式和语法参考

    PowerShell常用正则表达式和语法参考

    这篇文章主要介绍了PowerShell常用正则表达式和语法参考,主要介绍PowerShell中的正则表达式和其含义,需要的朋友可以参考下
    2014-07-07

最新评论