国外博客最近公布了关于wordpress主题的一个0day,这些主题都使用了timthumb.php这个文件,该文件用于处理图片的显示效果等,原文地址可以参见:http://sebug.net/vuldb/ssvid-20811 。这里具体分析下漏洞的成因,其实在国外这篇文章也有分析,只是不是很清晰.
PHP 与 Wordpress 介绍 Appdir
漏洞成因
大家可以首先打开这个链接,版本控制,可以看到:
r143 ,stronger website domain checks (don’t allow http://wordpress.com.hacker.com/)
作者在这里标明了已经修复了这个漏洞,那么我们就对比下r143和r142两个版本的区别。
对比分析这两个版本,发现结果如下:
1 | foreach ($allowedSites as $site) { |
多了一个’/‘,在匹配的时候限制了白名单域名只能在地址的最后面,这样就限制了可以在任意的域名前面加上白名单的域名,举个例子来说,我们假如有域名xyz.com,那么我们可以随便添加二、三级域名。先看看timthumb限制了哪些域名。
1 | // external domains that are allowed to be displayed on your website |
这样的话我们就可以添加blogger.com.xyz.com,成功绕过白名单的检测。看到这里我不禁想到我上次分析的百度贴吧flash过滤机制研究,也存在一定的问题,因此在匹配或者是搜索的时候需要特别注意。
利用
如果大家看了原文的留言,别人给出了利用方法(不过我没域名测试),这里我们还是对源码进行一下分析。
首先是引入url的地方:
1 | // sort out image source |
get_request函数:
1 | /** |
然后是文件检查:
1 | // clean params before use |
其中cleansource函数中调用checkexternal函数实现了写文件操作。
1 | ** |
修复
作者已经修复了漏洞,可以到 http://timthumb.googlecode.com/svn/trunk/timthumb.php 更新你的 timthumb 脚本 。最新版本为 2.8.10
wordpress的一些插件很可能存在漏洞,所以使用的时候请注意。可以到儿查找一些wordpress漏洞方面的问题。
http://sebug.net/appdir/WordPress
里面介绍了wordpress的某些插件引起的安全问题。