【作者声明】文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!
一、问题描述
最近在逆向雪球网cookie,碰到阿里云WAF墙的时候,遇到了一个棘手的无限debbuger问题。
网址:aHR0cHM6Ly94dWVxaXUuY29tLw==
不过注意请求的时候,要删掉cookie和网址请求时自动生成的md5__1038的值。才会弹出无限debbuger。记得提前打上全局脚本断点,观察响应链。
该网站的请求思路是,第一次请求时,会返回一段HTML代码,代码包含一个textarea标签,两个script标签。大概就长这样。

观察这段代码,可以发现第一个script标签的js代码。主要是取出了第一个textarea标签的值,然后通过JSON解析了一下,取出waf_bd8ce2ce37放到window对象中。
<textarea id="renderData" style="display:none">{"_waf_bd8ce2ce37":"LqEzfvRqcAZex7znaTuQGzK+iheTB++U2MXxx/yK3HU="}</textarea>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="aliyun_waf_aa" content="371ac51ab53fc53eb6bf9aa462a72e9f">
<meta name="aliyun_waf_oo" content="var _0x2576duCiQ','MOvsy">
<script>
function getRenderData() {
var dataTag = document.getElementById('renderData');
var renderData = dataTag.innerHTML;
return renderData
}
;var renderData = JSON.parse(getRenderData());
window._waf_bd8ce2ce37 = renderData._waf_bd8ce2ce37;
</script>
<script>大量混淆JavaScript代码.......</script>

然后接着运行,可以发现进入了第二个script,也就是运行了大量混淆的js代码,然后接着会进入到一个for循环。大概长这样。当执行到里面的ah += (aq = k['n'][aF(Wf.x)][aF(Wf.r)][aF(Wf.K) + 'r']('s', 'i', h[aF(Wf.j)](h[aF(Wf.f)](h[aF(Wf.A)](G), ak), h[aF(Wf.i)])))(aW[ak], ak),这一句时,就会进入无限debbuger。

无限debbuger会不断地生成新的vm虚拟机文件执行debbuger语句。

由于每运行一次就会进入一个新的vm文件debbuger,这也就导致我们没有办法通过never parse here取消debbuger。严重影响我们分析js的运行堆栈,也会导致我们下的cookie hook没办法调试。

并且使用重写debbuger原型链的方式和重置debbuger函数的方法,全部都失效了,如下图所示,包括重写eval或者定时器的操作也没用。还是会进入无限debbuger。(目前不知道具体的原因是什么,但是可以推断里面一定做了检测,然后将debbuger强制还原了)


二、解决方案
解决办法就是使用新版Firefox浏览器提供的断点调试控制功能,必须要最新版的Firefox浏览器采用这个功能,开启方法如下:
首先开启全局断点,F12——调试器——找到script勾选

接着清除所有浏览器缓存和cookie,刷新页面。确保程序在第一个JS脚本断住。

然后重点来了,将“在调试器语句上暂停”和“异常处暂停”取消勾选,一定要是最新版才有这个功能。

然后继续F8,一直到无限debbuger文件执行完毕之后,再次重新勾选上这两个选项。

然后你就会发现,无限debbuger已经没有了,你可以继续调试了。这里我们尝试往下走。可以看到都是可以正常执行的。

我们尝试写一段脚本注入,hook一下cookie的生成,可以看到正常hook到了。


当然使用油猴脚本也是可以的。

825

被折叠的 条评论
为什么被折叠?



