这段代码是一个基于SplPriorityQueue类的优先队列实现的webshell。其密钥是GET参数'a',可以通过构造请求,将一个函数名作为参数传递,从而执行该函数。

具体分析如下:

  1. 首先,代码开启了错误显示,如果服务器的php.ini文件中关闭了错误显示,那么这一行代码可以让攻击者在使用webshell时更容易发现错误,提高效率。

  2. 接下来,代码创建了一个SplPriorityQueue对象,并使用insert方法将'm', 's', 'e', 's', 'y'这五个字符和一个GET参数'a'中的值添加到队列中,每个字符的优先级不同,因此在后面的循环中,会按优先级顺序输出。

  3. 接着,代码设置了队列的提取标志为EXTR_DATA,表示在循环中只提取元素的值,而不是键值对。

  4. 然后,代码调用top方法,将指针移动到队列的顶部。

  5. 接下来,代码创建了一个ErrorException对象,将GET参数'b'作为参数传入构造函数。这里'b'参数的作用是不清楚的,但是可以看出,这里构造了一个异常对象,准备在后面的代码中使用。

  6. 在while循环中,代码首先将当前元素的值添加到$m字符串中,然后将指针向后移动一个位置。

  7. 最后,代码执行了$m($cur->getMessage())语句,将$m字符串作为函数名,$cur->getMessage()作为参数,执行了一个函数。由于$m字符串是从优先队列中取出的,因此可以控制要执行的函数名。

综上,这是一段基于SplPriorityQueue类的webshell代码,其密钥是GET参数'a',可以通过构造请求,将一个函数名作为参数传递,从而执行该函数。

基于SplPriorityQueue类的PHP webshell分析及密钥揭秘

原文地址: https://www.cveoy.top/t/topic/lPsu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录