好玩
进入目标后看到数据包中的域名,复制到浏览器里可以正常使用。
一通瞎点看到返回的数据包内容全都被加密了。
加密就没办法了,那就找找接口吧。在找接口的过程中找到了一段神秘密文:wsafkb@q124129&,并且这段代码十分的不简单。看样子是把请求的数据解密后再把数据发送到服务端的过程。
知道了密钥那就解密一下数据看看效果。随机选择了一个响应数据,把密钥填进去解密后果然获得了明文数据。
点击报告查询功能,看到请求包末尾是加密后的状态解密看看。
其中mrn对应的参数中文释义是病历号,再细看他的序号是有规律的,截至目前到我这是:25年第005416份报告。
知道了病历号的规律那查看一下其他人的报告试试。bp开启拦截功能,然后修改请求包后面的加密内容,直接可以越权查看到别人的体检报告。后续尝试了一下,这个小程序所有功能点都是同样这种加解密的方式来获取数据的,这边就不一一演示了。
磐云:玩呢!
你以为到这里就结束了吗,不可能,根本停不下来。注意到响应包的头是360的磐云。众所周知防火墙都是要靠数据包内容来判断是否有威胁的,但是这个小程序的数据包内容都被加密了磐云肯定检测不出来请求是否有威胁性,但也不能排除磐云有没有单独的为这个单位经行定制适配,如果适配了那么我们在请求包中带有威胁函数的请求就会被识别并拉黑。
随机选个一功能点,bp拦截请求包,在请求里面添加一个'看看有没有sql注入漏洞
解密响应包的内容,果然有sql注入
这不就来了吗。并且能够getshell。
代码分析
以下是完整的代码
"6f54": function(e, t, n) {
"use strict";
n("7a82"),
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.Decrypt = r,
t.Encrypt = function(e) {
var t = a.enc.Utf8.parse(e)
, n = a.RC4.encrypt(t, o, {
RC4_IV: i,
mode: a.mode.CBC,
padding: a.pad.Pkcs7
});
return n.ciphertext.toString().toUpperCase()
}
,
t.isDecrypt = function(e) {
try {
r(e)
} catch (t) {
return !1
}
return !0
}
,
n("d401"),
n("d3b7"),
n("25f0");
n("786d");
var a = n("d785")
, o = a.enc.Utf8.parse("wsafkb@q124129&")
, i = a.enc.Utf8.parse("wsafkb@q124129&");
function r(e) {
var t = a.enc.Hex.parse(e)
, n = a.enc.Base64.stringify(t)
, r = a.RC4.decrypt(n, o, {
RC4_IV: i,
mode: a.mode.CBC,
padding: a.pad.Pkcs7
})
, s = r.toString(a.enc.Utf8);
return s.toString()
}
},
其中最主要的代码是这段:
var a = n("d785")
, o = a.enc.Utf8.parse("wsafkb@q124129&")
, i = a.enc.Utf8.parse("wsafkb@q124129&");
function r(e) {
var t = a.enc.Hex.parse(e)
, n = a.enc.Base64.stringify(t)
, r = a.RC4.decrypt(n, o, {
RC4_IV: i,
mode: a.mode.CBC,
padding: a.pad.Pkcs7
})
, s = r.toString(a.enc.Utf8);
return s.toString()
}
这段代码首先定义加密库和密钥。a是加密库,o和i是密钥和初始化向量,字符串为:wsafkb@q124129&的UTF-8格式。
var a = n("d785")
, o = a.enc.Utf8.parse("wsafkb@q124129&")
, i = a.enc.Utf8.parse("wsafkb@q124129&");
这段是定义解密函数,主要是对输入的字符串e进行解密。解密步骤:先把输入的字符串e解析为十六进制格式,再把十六进制数据转换为Base64格式。然后使用RC4算法解密,密钥为o(就是上面o定义的值),初始化向量为i,模式为CBC,填充方式为PKCS7。最后把解密结果转换为UTF-8字符串并返回。
function r(e) {
var t = a.enc.Hex.parse(e)
, n = a.enc.Base64.stringify(t)
, r = a.RC4.decrypt(n, o, {
RC4_IV: i,
mode: a.mode.CBC,
padding: a.pad.Pkcs7
})
, s = r.toString(a.enc.Utf8);
return s.toString()
}
磐云
你加密数据包干什么呀?啊!你这种操作会把我的作用给异化掉的懂吗?知不知道什么叫防火墙?啊!你能说我没有起到作用吗?
我跟你打个比方啊,比如说你倒车入库。你用自动泊车功能,成功入库后,哎呀!自动泊车得了MVP!一看激光雷达天天在那,就是测距、识物。躺赢狗!激光雷达就是躺赢狗!激光雷达的评分是3.0。自动泊车一键入库省时省力对吧,13.0carry局能这样算吗?啊!你告诉我激光雷达是不是躺赢狗啊!马勒戈壁的,真是神经病!
你加密数据包干嘛呢?那不是要具体看数据包内容,看它有什么行为吗?啊!我每天检查这些加密后的数据包我都不知道里面是啥,你还说我没起到作用!傻逼啊!要不让你们开发自己开发一个防火墙来检测数据,他们又不愿意。你说我怎么保护你啊。