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

Python:暴力破解密码 - 压缩包、web实战

简介:常规情况下,由于web自身的服务资源,带宽,吞吐率的原因,存在访问上线的情况,这和极端情况下本地直接即时访问,即时反馈的机制是完全不可等同的。另外暴力破解密码这种行为本身就是一个徘徊为灰色地带的,并且条件极其苛刻的情况下才有可能使用得上,这也是为了极少存在通过暴力破解密码从而找回或者攻陷入口的原因。本篇仅为技术讨论,请勿用于非法途径。

历史攻略:

Python:暴力破解密码

Python:对压缩包进行解压操作

gin:通过dockerfile部署

web破解密码案例:

1、创建一个web服务并创建密码,运行。

package main

import (
  "crypto/rand"
  "fmt"
  "github.com/gin-gonic/gin"
  "math/big"
  "time"
)

func GetTime() time.Time {
  return time.Now()
}

func GetPassword(length int, kind string) string {
  passwd := make([]rune, length)
  var codeModel []rune
  switch kind {
  case "num":
    codeModel = []rune("0123456789")
  case "char":
    codeModel = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
  case "mix":
    codeModel = []rune("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
  case "advance":
    codeModel = []rune("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+=-!@#$%*,.[]")
  default:
    codeModel = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

  }
  for i := range passwd {
    index, _ := rand.Int(rand.Reader, big.NewInt(int64(len(codeModel))))
    passwd[i] = codeModel[int(index.Int64())]
  }
  return string(passwd)

}

var realPassword = GetPassword(4, "num")

func main() {

  r := gin.Default()
  r.GET("/hello", func(c *gin.Context) {
    //设置默认值
    password := c.DefaultQuery("password", "")
    //获取url里的user参数
    password = c.Query("password")

    fmt.Println("realPassword:", realPassword)
    if password == realPassword {
      c.JSON(200, gin.H{
        "GET":           GetTime(),
        "your_password": password,
        "real_password": realPassword,
        "result":        "密码正确",
      })
    } else {
      c.JSON(200, gin.H{
        "GET":           GetTime(),
        "your_password": password,
        "real_password": realPassword,
        "result":        "密码错误",
      })
    }
  })

  // 监听并在 0.0.0.0:8888 上启动服务
  _ = r.Run("0.0.0.0:8888")
}

2、构建镜像:

docker build -t gin-img .

3、启动容器:

docker run --name test-gin -p 8888:8888 -d gin-img

4、浏览器访问:http://ip:8888/hello

图片

5、python访问破解:

# -*- coding: utf-8 -*-
# time: 2022/11/6 11:03
# file: password-demo.py
# 公众号: 玩转测试开发
import time
import requests
import itertools


def guess_password(password):
    url = "http://ip:8888/hello"
    data = {"password": password}
    response = requests.get(url, params=data).json()
    print(response)
    if response["result"] == "密码正确":
        return True
    else:
        return False


if __name__ == '__main__':
    data = "0123456789"
    num = 0
    password_length = 4
    password_list = []

    for i in itertools.product(data, repeat=password_length):
        guess = "".join(i)
        password_list.append(guess)

    start = time.time()

    for i in password_list:
        if guess_password(i):
            break

    end = time.time()
    print(f"破解耗时:{round(end - start, 2)}秒")

6、破解执行结果:

图片

压缩包破解密码案例:

1、创建一个zip包,并设置是需要密码

图片

2、手动解压的时候,确认是需要密码的

图片

3、案例源码:

# -*- coding: utf-8 -*-
# time: 2022/11/6 11:03
# file: password-demo.py
# 公众号: 玩转测试开发
import time
import zipfile
import itertools


def extract(password, file):
    try:
        password = str(password)
        file.extractall(path='.', pwd=password.encode('utf-8'))
        print("the password is {}".format(password))
        return True
    except Exception as e:
        pass


def main(password_length):
    zip_file = zipfile.ZipFile(r"a.zip", 'r')
    # 开始尝试
    data = "0123456789"
    num = 0
    for i in itertools.product(data, repeat=password_length):
        guess = "".join(i)
        print(f"当前密码长度:{password_length}, 猜测的密码为:{guess},尝试次数:{num}。")
        if extract(guess, zip_file):
            print(f"当前密码长度:{password_length}, 猜测的密码为:{guess}。实际密码为:{guess},尝试次数:{num},破解成功。")
            break
        num += 1


if __name__ == '__main__':
    start = time.time()
    main(6)
    end = time.time()
    print(f"破解耗时:{round(end - start, 2)}秒")

4、执行结果:即只需要27秒左右即可破解6位数字密码的zip密码包。

图片

破解后:解压出a.doc

图片

即:理论极值下,暴力破解是可取的,但是条件及其苛刻,例如web的仅4位数字,就破解需要120多秒。6位大小写数字混合需要的时间则会增加几个数量级。

相关文章:

  • 年轻人不用太过于努力
  • 【HTML学生作业网页】基于HTML+CSS+JavaScript仿南京师范大学泰州学院(11页)
  • 【项目实战】Spring Boot项目整合Jetty、MySQL、Redis和MongoDB
  • Opencv项目实战:15 手势缩放图片
  • 猿创征文|11个开发者必备工具,赶快收藏
  • 零零信安-DD数据泄露报警日报【第40期】
  • 马斯克的这波神操作,让我意识到保持写代码的能力有多重要
  • Android入门第19天-Android里的RatingBar的使用
  • [会议分享]2022年欧洲计算机科学与信息技术会议(ECCSIT 2022)
  • Python --- 面向对象
  • C语言经典题目之汉诺塔问题超详解(4000字数只为能让你听懂这个题目)
  • 信号线上串接电阻的作用
  • OpenFeign的实现原理(附Feign和OpenFeign的区别)
  • 不同性质生物素叠氮试剂Biotin-azide,Biotin-PEG2/PEG3/PEG4-azide特点分享
  • 【Linux】信号
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android交互
  • Android系统模拟器绘制实现概述
  • jquery cookie
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Median of Two Sorted Arrays
  • mysql中InnoDB引擎中页的概念
  • Sass Day-01
  • 从tcpdump抓包看TCP/IP协议
  • 当SetTimeout遇到了字符串
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 构建二叉树进行数值数组的去重及优化
  • 聊聊flink的TableFactory
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端面试题总结
  • 前端自动化解决方案
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 一个SAP顾问在美国的这些年
  • 原生 js 实现移动端 Touch 滑动反弹
  • 从如何停掉 Promise 链说起
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (Git) gitignore基础使用
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 反射 Reflect
  • .NET学习全景图
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解