记一次JS逆向密码加密
source link: https://5ime.cn/js-re-crypto.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
记一次JS逆向密码加密
今天漫游某单位资产的时候,发现了一个站点,反手 admin/admin
测一下,提示 密码不正确
,输入 admin1/admin1
提示 用户不存在
,同时 验证码
还可以重复使用,这不得 top1000
跑一下
F12
查看一下网络请求,发现验证码被添加到了 Cookie
里面,但既然可以复用,我们就不管了,其次 载荷
里的数据被加密了
userName: QEAqMWFkbWluaG5zaA==
password: QEAqMTk2ZjFhNjZiNjBkZjI1YWVobnNo
根据多年CTF经验,直接 Base64
解码
userName: @@*1adminhnsh
password: @@*196f1a66b60df25aehnsh
观察数据发现头尾的 @@*1
和 hnsh
是固定的,同时用户名未经过加密直接是 admin
,密码经过了加密处理,我们点击启动器看看调用堆栈
点击后会自定跳转到相应的代码片段,我们看到通过 ajax
发送了一个 POST
请求,url
为 /login.do
,参数来自 JsonData
var JsonData = { login: encodeString(login), pwd: encodeString(afterEncrypt), code: code };
其中 pwd
参数通过 encryptByDES()
处理了一下
var afterEncrypt = encryptByDES(pwd);
我们给 afterEncrypt
和 JsonData
打上断点
我们再次点击提交数据,发现已经在预定的位置断点成功了,我们点击进入 下一个函数调用
去查看一下 encryptByDES()
(直接全局搜索 encryptByDES
也可以 )
我们看到了关键代码
var define = "default-*****";
var ivParams = "def-parm";
var strPre = "@@*1";
var strSuf = "hnsh";
function encryptByDES(content) {
var key=define;
key = CryptoJS.MD5(key).toString().substring(0, 16).toUpperCase();
var keyHex = CryptoJS.enc.Utf8.parse(key);
var ivHex = CryptoJS.enc.Utf8.parse(ivParams);
var encrypted = CryptoJS.DES.encrypt(content, keyHex, {
iv: ivHex,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString();
}
然后我们一直点击 跳过下一个函数调用
即可,最后发现 JsonData
已经被正确赋值了
encryptByDES()
调用了 crypto-js
库扣取代码过程有点繁杂,我们直接使用 NodeJS
中转一下,直接使用 npm install crypto-js
,在代码中引用即可,然后粘贴我们抠出来的代码,同时改一下 return
,加上固定的头尾
const CryptoJS = require('crypto-js');
var define = "default-*****";
var ivParams = "def-parm";
var strPre = "@@*1";
var strSuf = "hnsh";
function encryptByDES(content) {
var key=define;
key = CryptoJS.MD5(key).toString().substring(0, 16).toUpperCase();
var keyHex = CryptoJS.enc.Utf8.parse(key);
var ivHex = CryptoJS.enc.Utf8.parse(ivParams);
var encrypted = CryptoJS.DES.encrypt(content, keyHex, {
iv: ivHex,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return strPre + encrypted.ciphertext.toString() + strSuf;
}
其实直接使用 NodeJS
也行,但是感觉还是 Python
方便点,正好学一下 execjs
的使用,记得先对照一下自己写的代码加密数据是否和网站加密的数据一致
import execjs
import base64
def encryptByDES(content):
js_code = open("enc.js").read()
ctx = execjs.compile(js_code)
return ctx.call("encryptByDES", content)
if __name__ == '__main__':
with open("top1000.txt", "r") as f:
for line in f:
a = encryptByDES(line).encode("utf-8")
b = base64.b64encode(a).decode("utf-8")
with open("pass.txt", "a") as f:
f.write(b + "\n")
Recommend
-
55
1.先看下目录结构: 2.查下,是什么语言 ==> Net的,那不用...
-
19
一切的基本功都是为后期调试滑块验证码准备的。 今天来看看斗鱼登录密码加密,正所谓熟能生巧,这种简单一点的基本3-5分钟就要能抠出来,有兴趣得还是自己抠一下JS代码,如抠不准确可参考...
-
24
爬虫必看,每日JS逆向之爱奇艺密码加密,今天你练了吗? | 从今天开始种树 本次目标是抠出爱奇艺passwd加密JS代码,如果你看到了这一篇,说明你对JS逆向感兴趣,如果是初学者,那不妨再看看我之前的一些文章,可能对你的学习路有些帮助,跟着...
-
5
JS逆向- DNS 解析站密码加密解析 发表于...
-
5
JS逆向-空中网密码加密 ...
-
12
JS逆向-咪咕视频密码加密与指纹分析 ...
-
4
JS逆向-58同城密码加密分析 ...
-
8
JS逆向-楚楚街密码加密 ...
-
3
JS逆向-粉笔网密码加密 ...
-
11
JS逆向-极贷助手密码加密 ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK