已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 源码

标题: preg_replace很危险:任意执行代码

作者: @Ta

时间: 2011-10-06

点击: 2892

    preg_replace有一个专用的模式修饰符e,它的作用是将匹配结果作为php代码执行,并把返回值作为最终结果替换匹配内容。
    例:
preg_replace('/$/e', 'urlencode("老虎会游泳")', $str);
    它的作用是给$str末尾添加一些urlencode之后的字符串,这没什么。
    但是这个呢:
preg_replace('/$/e', 'unlink("index.php")', $str);
    怎么样?冒冷汗不?
  继续,如果把unlink()换成eval(),我们不就能执行任何代码了吗?
    还记得不?虎绿林的txt文本编辑器和html编辑器都提供preg正则替换的功能,两个鲜活的WebShell啊。
    解决方法:对“查找”字符串进行正则替换:
$cz=preg_replace('/^(.)(.*)\\1(.*)e(.*)$/', '\\1\\2\\1\\3\\4', $_GET['cz']); //过滤模式修饰符e
echo preg_replace($cz, $_GET['th'], $str); //从理论上来说,用户已经无法使用e来当WebShell了。
    最后,大家在给用户提供某些功能时一定要小心啊!如果不看手册,我不知道什么时候才会发现这个BUG。

[隐藏样式|查看源码]


『回复列表(6|隐藏机器人聊天)』

1. 完全看不懂
(/@Ta/2011-10-06 21:12//)

2. 呃,不懂!悲剧…
(/@Ta/2011-10-06 21:14//)

3. 同↓↓↓
(/@Ta/2011-10-06 21:24//)

4. 0gan.co.cc/wap/?id=qbtxtgai&d=1317907798&qi=0&zhi=800&zjs=80
(/@Ta/2011-10-06 21:44//)

5. 楼上就是preg_replace的杰作。
(/@Ta/2011-10-06 21:45//)

6. 呃,明白了,暴出了文件列表!
(/@Ta/2011-10-06 22:35//)

回复需要登录

7月6日 21:45 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1