JS脚本的奇妙冒险

admin 2022年12月16日20:55:23评论64 views字数 2975阅读9分55秒阅读模式


JS脚本的奇妙冒险

免责声明
由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

JS无限断点对抗

一、前言

在实战过程中恰好遇到了需要逆向js解密的sql注入站点,刚好他还不允许使用f12调试,接下来讲一下如何对抗js断点技术。

二、无限断点

无限断点就是一段代码进行断点然后解除断点,防止被调试,在软件对抗中也经常会遇到。

打开站点,发现访问网站正常

JS脚本的奇妙冒险

按下F12

JS脚本的奇妙冒险

发现直接断下来了,这个时候就没有办法调试了,当按下继续运行的时候,会继续触发断点

JS脚本的奇妙冒险

三、对抗方法

1.直接无视断点

按下图中按钮或者Ctrl+F8

JS脚本的奇妙冒险

弊端也很明显,没法去调试目标站点的了。

2.代码对抗

代码对抗是劫持目标js文件,替换成我们修改后的文件

前置要求:

什么是堆栈,线程,调用

我们在左侧可以看到目标的线程

JS脚本的奇妙冒险

我们点击跳到下个函数运行

JS脚本的奇妙冒险

然后我们到达目标

JS脚本的奇妙冒险

一看就是个断点,循环调用

1                doCheck: function(e{
2                    (function({}
3                    )["constructor"]("debugger")["call"](),
4                    this.doCheck(++e)
5                }

我们找到替换,选择一个空的文件夹

JS脚本的奇妙冒险

我们第三步就是找到这个js文件,去替换他的死循环

JS脚本的奇妙冒险

搜索到debug

JS脚本的奇妙冒险

删除代码快,ctrl+s保存

JS脚本的奇妙冒险

我们再次回去访问网页

JS脚本的奇妙冒险

搞定,可以正常调试了。

低阶段JS解密数据

一、前言

在实战过程中恰好遇到了需要逆向js解密的sql注入站点,上面讲到了 ,但是新的问题出现了,他提交的数据包是加密的。

二、加密函数寻找

无限断点就是一段代码进行断点然后解除断点,防止被调试,在软件对抗中也经常会遇到。

访问网站找到个数据包提交

JS脚本的奇妙冒险

寻找方法

ctrl+f搜索 post的url和post的数据包字段或者是encrypt等字段,实战过程中是都要做,而且还要下断点确定是不是来自这里。

JS脚本的奇妙冒险

可以看到图中的post请求多个都是一个方法解密,那就冲就完了。

下断或者搜索

JS脚本的奇妙冒险

鼠标左键点击一下找到来源地址

JS脚本的奇妙冒险

byd露出鸡角了吧

JS脚本的奇妙冒险

 1var CryptoJS = cryptoJs.exports;
2const secretKey = "93a0956dc0b1bfaa68e59fc3cc153997"
3  , iv = "0102030405060708";
4function encrypt(n{
5    return CryptoJS.AES.encrypt(n, CryptoJS.enc.Utf8.parse(secretKey), {
6        iv: CryptoJS.enc.Utf8.parse(iv),
7        mode: CryptoJS.mode.CBC,
8        padding: CryptoJS.pad.Pkcs7
9    }).toString()
10}

三、解密方法

解析

 1var CryptoJS = cryptoJs.exports;
2const secretKey = "93a0956dc0b1bfaa68e59fc3cc153997" //密钥很显然了
3  , iv = "0102030405060708"//这也是个信息
4function encrypt(n{
5    return CryptoJS.AES.encrypt(n, CryptoJS.enc.Utf8.parse(secretKey), { //utf8格式
6        iv: CryptoJS.enc.Utf8.parse(iv), //iv
7        mode: CryptoJS.mode.CBC, //CBC
8        padding: CryptoJS.pad.Pkcs7 //PAD7
9    }).toString()
10}

我们去搜一下解密理解

JS脚本的奇妙冒险

网址:http://tool.chacuo.net/cryptaes

JS脚本的奇妙冒险

看到了吗,下面写着加密模式 填充 密码 偏移量 字符集。

解密看看

JS脚本的奇妙冒险

然后就通过python的方式去实现加解密了。(去尝试哦,毕竟sqlmap自动化也需要python)

模板代码如下:

 1from Crypto.Cipher import AES
2from Crypto.Util import Padding
3
4
5# 加密
6# 密钥(key), 密斯偏移量(iv) CBC模式加密
7def AES_Encrypt(key, data, vi):
8    # pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
9    data = Padding.pad(data.encode('utf-8'), block_size=AES.block_size, style="pkcs7")
10    # data = pad(data)
11    # 字符串补位
12    cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
13    encryptedbytes = cipher.encrypt(data)
14    # 加密后得到的是bytes类型的数据
15    encodestrs = base64.b64encode(encryptedbytes)
16    # 使用Base64进行编码,返回byte字符串
17    enctext = encodestrs.decode('utf8')
18    # 对byte字符串按utf-8进行解码
19    return enctext
20
21
22
23'''测试'''
24encrypt_msg= AES_Encrypt("abc")
25print(encrypt_msg)        # b'xc2xadLxabxefxaaxb1}x92xf22x83Lxecxf0x90'
26print(len(encrypt_msg))   # 16

四、思考

1、都解密完了也可以自由加密了,但是这个是低阶段,可以应对百分之70的站点了,其他百分之30都是一些极度困难的站点,需要用到Js环境去慢慢调试底层解析,最后把算法代码移动到python中去复用。
2、实际过程中还是会存在代码底工不行,无法进行移植,本人更想一劳永逸,通过调用输入进行断点后获取加密后的内容,因为我们的目标不是复现加密解密流程,应该是对站点的漏洞进行挖掘,而且通过js加密后的站点,如果存在漏洞waf直接沦为摆设。
3、本人的下下次分享可能会有其他百分之30站点的实战,比如大型邮箱站点登录等等,基本上完成最后一节大型邮箱解密就吃完,就没什么对手了。

· END ·
点击下方名片,关注我们
觉得内容不错,就点下在看
如果不想错过新的内容推送,可以设为星标JS脚本的奇妙冒险

原文始发于微信公众号(听风安全):JS脚本的奇妙冒险

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月16日20:55:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JS脚本的奇妙冒险https://cn-sec.com/archives/1468680.html

发表评论

匿名网友 填写信息