【安全开发1】通过JS逆向与编写爆破,注入程序

admin 2022年7月23日20:24:39评论103 views字数 1916阅读6分23秒阅读模式





JS逆向与编写利用爆破程序

这是第一节安全开发系列的文章,面向新手学习高手勿看。找了一个测试对象。这里的话不做敏感操作只逆向破解网站的加密并编写成模拟登录


登录数据包里面的password参数被加密了,这种情况如果存在注入或需要爆破等操作都无法进行。

【安全开发1】通过JS逆向与编写爆破,注入程序
这里搜索参数password为关键字。找到了一处有加密特征的js
【安全开发1】通过JS逆向与编写爆破,注入程序
来到加密特征的位置,设置断点来查看加密是不是在这里开始。
【安全开发1】通过JS逆向与编写爆破,注入程序
这里可以看到定义pwd里面出现了输入的明文密码,证明了这里确实就是加密的地方,在这里继续进入到下一个调用的js...
【安全开发1】通过JS逆向与编写爆破,注入程序
从这看到了encryptByDES进入到了login.js的119行,从这继续跟踪,来到了119行把这块加密的js给保存下。
function encryptByDES(message, key){  var keyHex = CryptoJS.enc.Utf8.parse(key);  var encrypted = CryptoJS.DES.encrypt(message, keyHex, {    mode: CryptoJS.mode.ECB,    padding: CryptoJS.pad.Pkcs7  });  return encrypted.ciphertext.toString();}
【安全开发1】通过JS逆向与编写爆破,注入程序
【安全开发1】通过JS逆向与编写爆破,注入程序
保存test.js,然后继续跟踪加密的整体js... 这里一整块都是加密的js,把这整个文件都保存下来然后修改一下测试运行扣下来的加密JS
【安全开发1】通过JS逆向与编写爆破,注入程序
【安全开发1】通过JS逆向与编写爆破,注入程序
【安全开发1】通过JS逆向与编写爆破,注入程序
在最开始的时候找到加密特征时可以看到了有一个定义 transferKey 的变量。这里有一条加密的公钥 u2oh6Vu^HWe40fj 将公钥保存后修改到本地的加密js中。
【安全开发1】通过JS逆向与编写爆破,注入程序
【安全开发1】通过JS逆向与编写爆破,注入程序
这里用到了execjs模块,用来跟js交互的。编写打开保存下来的js。然后通过变量js.call来调用js的函数encryptByDES
import execjs
file = open('1.js','r')aaa = file.read()js = execjs.compile(aaa)res = js.call('encryptByDES', '123123')print(res)
【安全开发1】通过JS逆向与编写爆破,注入程序

这里对比一下跟网站的加密是否一样,可以看到我输入了明文123123加密后跟网站的加密是一样的这里也就完成了逆向加密跟python去交互的动作...

【安全开发1】通过JS逆向与编写爆破,注入程序
【安全开发1】通过JS逆向与编写爆破,注入程序

接下来要做的就是模拟一个登录的动作,因为编写带有攻击性的脚本是不具备授权的所以就模拟一个登录点到为此。

import execjsimport fontTools.t1Libimport requests
file = open('1.js','r')aaa = file.read()
js = execjs.compile(aaa)res = js.call('encryptByDES', '123123')def js(): js = execjs.compile(aaa) res = js.call('encryptByDES', '123123') url = 'http://passport2.chaoxing.com/fanyalogin' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", "Cookie": "JSESSIONID=72F3128DBEBC1339C040B974E489F192;" } data = { "uname":"13188888881", "password":res, "t":"true" } # pro = { # "http":"http://127.0.0.1:8080" # } response = requests.post(url,data=data,headers=headers).content.decode() print(response+res)
if __name__ == '__main__': js()

如果你遇到这种情况进行注入爆破等动作编写脚本。可以直接循环“加密的内容,再把它传入到password中即可实现。最后可以看到模拟登录正常...

【安全开发1】通过JS逆向与编写爆破,注入程序

最后还有一枚逻辑漏洞小彩蛋,在数据包的参数中可以看到有一个“t参数,t参数显示t=true。如果把t参数改为t=false,意思就是关闭。这时候输入明文就可以直接登录网站不会进行加密了。也可以省去很多动作,比如遇到一些混淆之类的js等等等...”


【安全开发1】通过JS逆向与编写爆破,注入程序




【安全开发1】通过JS逆向与编写爆破,注入程序
【安全开发1】通过JS逆向与编写爆破,注入程序
添加微信:lingtoor
【安全开发1】通过JS逆向与编写爆破,注入程序

欢迎关注,长期免费公开课。

欢迎添加投稿咨询。稿费100-1500元

【安全开发1】通过JS逆向与编写爆破,注入程序



【安全开发1】通过JS逆向与编写爆破,注入程序
“阅读原文”观看过程视频!

原文始发于微信公众号(四季安全团队):【安全开发1】通过JS逆向与编写爆破,注入程序

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月23日20:24:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【安全开发1】通过JS逆向与编写爆破,注入程序http://cn-sec.com/archives/1195347.html

发表评论

匿名网友 填写信息