免责声明
请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
在挖掘src的过程中 ,现在很多都偏向挖掘小程序的漏洞了,这里记一次小程序解密加密然后挖掘漏洞
打开一个小程序发现全部都是使用的这种看不懂的加密 ,看着像是base64 的加密 ,但是解密肯定不是 。
我们尝试反编译小程序,看看能否找到点可用的东西,
反编译之后的东西就是上面这样 , 大家如果眼睛心细的话可以看出存在一个 crypto
crypto 一眼就能看见是加密的意思了 打开看看能不能解密
贴一个 大家可以自行尝试解密
("undefined" != typeof Crypto && Crypto.util) ||
(function () {
var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
n =
"undefined" == typeof window
? (exports.Crypto = {})
: (window.Crypto = {}),
r = (n.util = {
rotl: function (t, n) {
return (t << n) | (t >>> (32 - n));
},
rotr: function (t, n) {
return (t << (32 - n)) | (t >>> n);
},
endian: function (t) {
if (t.constructor == Number)
return (16711935 & r.rotl(t, 8)) | (4278255360 & r.rotl(t, 24));
for (var n = 0; n < t.length; n++) t[n] = r.endian(t[n]);
return t;
},
randomBytes: function (t) {
for (var n = []; t > 0; t--) n.push(Math.floor(256 * Math.random()));
return n;
},
bytesToWords: function (t) {
for (var n = [], r = 0, o = 0; r < t.length; r++, o += 8)
n[o >>> 5] |= (255 & t[r]) << (24 - (o % 32));
return n;
},
wordsToBytes: function (t) {
for (var n = [], r = 0; r < 32 * t.length; r += 8)
n.push((t[r >>> 5] >>> (24 - (r % 32))) & 255);
return n;
},
bytesToHex: function (t) {
for (var n = [], r = 0; r < t.length; r++)
n.push((t[r] >>> 4).toString(16)), n.push((15 & t[r]).toString(16));
return n.join("");
},
hexToBytes: function (t) {
for (var n = [], r = 0; r < t.length; r += 2)
n.push(parseInt(t.substr(r, 2), 16));
return n;
},
bytesToBase64: function (n) {
if ("function" == typeof btoa) return btoa(e.bytesToString(n));
for (var r = [], o = 0; o < n.length; o += 3)
for (
var u = (n[o] << 16) | (n[o + 1] << 8) | n[o + 2], i = 0;
i < 4;
i++
)
8 * o + 6 * i <= 8 * n.length
? r.push(t.charAt((u >>> (6 * (3 - i))) & 63))
: r.push("=");
return r.join("");
},
base64ToBytes: function (n) {
if ("function" == typeof atob) return e.stringToBytes(atob(n));
n = n.replace(/[^A-Z0-9+\/]/gi, "");
for (var r = [], o = 0, u = 0; o < n.length; u = ++o % 4)
0 != u &&
r.push(
((t.indexOf(n.charAt(o - 1)) & (Math.pow(2, -2 * u + 8) - 1)) <<
(2 * u)) |
(t.indexOf(n.charAt(o)) >>> (6 - 2 * u))
);
return r;
},
}),
o = (n.charenc = {}),
e =
((o.UTF8 = {
stringToBytes: function (t) {
return e.stringToBytes(unescape(encodeURIComponent(t)));
},
bytesToString: function (t) {
return decodeURIComponent(escape(e.bytesToString(t)));
},
}),
(o.Binary = {
stringToBytes: function (t) {
for (var n = [], r = 0; r < t.length; r++)
n.push(255 & t.charCodeAt(r));
return n;
},
bytesToString: function (t) {
for (var n = [], r = 0; r < t.length; r++)
n.push(String.fromCharCode(t[r]));
return n.join("");
},
}));
})();
经过测试发现是一个使用的AES 和BASE64 的加密 方法
通过反编译小程序得到加密方式写出加密 解码脚本 可以对其进行解码
写一个加密解密脚本 对其测试
是能成功解密的 。然后能成功解密之后就可以开心的挖漏洞了
**xxxx存在越权删除 **
我这里使用A账号的移除功能去移除B账号的母亲这个邀请
抓取A账号的移除功能
发送到重发模块
"LV5Qrnddno45cfc9PEhBkIxoCraStmmL9Aw3f7lxbwDiIpdSkAD+g0hcfveGEbFFn+H86nUT9UJk/bHdTJost7jPXC+BYfRuSQQa526aO+O6U7+wjuYWfr1HP+D/lSlZ"
这是加密的内容 解密之后是这么一串
他的relationId是 2521537
我现在去登录B账号查看B账号的ID
点击Drop
这是B账号的数据
"LV5Qrnddno45cfc9PEhBkC7Vux/jIqKpATEP+3iz18nlNpBi2jzIV720utuj8rKuLwQ3Q4GEAFyf0GSd5J4bgEEuLTYxQExuRj6bpP4lh5rhvethJMmLBxN1YTW2A62l"
解密后的内容
{"relationId":2521546,"status":5,"sessionId":"eed692a63c6c236d48b2a8cb3ef5bebb"}
他们的relationId是不一样的
我用A账号去移除B账号数据
A账号
{"relationId":2521537,"status":5,"sessionId":"eed692a63c6c236d48b2a8cb3ef5bebb"}
B账号 我替换relationId
{"relationId":2521546,"status":5,"sessionId":"eed692a63c6c236d48b2a8cb3ef5bebb"}
然后进行加密
加密
LV5Qrnddno45cfc9PEhBkC7Vux/jIqKpATEP+3iz18nlNpBi2jzIV720utuj8rKuLwQ3Q4GEAFyf0GSd5J4bgEEuLTYxQExuRj6bpP4lh5rhvethJMmLBxN1YTW2A62l
发送出去
刷新登陆 发现数据没了
需要重新添加 这里是可以遍历删除的
对那些已经添加的数据进行删除
成功越权删除了别人的家人联系人
这个小程序存在两个漏洞功能点不一样 ,但是方法都差不多 通过小程序逆向解码加密方式获得一高一中
![b2fb8f6461082822225943cd9be629ee.png](https://img-blog.csdnimg.cn/img_convert/b2fb8f6461082822225943cd9be629ee.png)