在一次偶然的机会发现公司某个网站存在thinkphp的远程命令执行漏洞,自此对这个漏洞爱不释手。这究竟是为什么呢?主要原因有2点:第一,如果网站存在这个漏洞,我们可以去执行各种各样的系统命令来进行测试观察,尤其要是还有管理员权限就更舒服了;第二点,只要发现对应版本的thinkphp,漏洞利用步骤较为简单。(主要还是笔者太懒,hhh!!!)关于这个漏洞分析笔者就不在这里献丑了,主要是介绍下如何来去挖掘这个漏洞,以及笔者相关的一些思路。希望能给刚入安全圈的新人一点灵感。
在2018年12月9日,thinkphp官方发布了一个重要的安全更新,修复了一个严重的远程命令执行漏洞。此次更新主要涉及到一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本儿包括5.0(< 5.0.23)和5.1(< 5.1.31)版本儿。
这个特性可以说是大部分thinkphp框架的特性,在其网站url后输入一个不存在的路径,页面会报错,显示该网站一些配置信息以及thinkphp的版本儿,如图:
输入该网站一个不存在的路径11,或者是一些不存在的文件也可例如:11.php,11.txt。此时页面会报错,抛出异常,如图:
此时我们可以看到该网站的一些敏感配置信息比如网站路径,当然我比较感兴趣的还是这个thinkphp框架的版本,如图所示thinkphp版本儿清楚可见,看到这里可能大佬们就知道我接下来干啥了。
笔者感觉自己这个漏洞利用的方式还是比较简单粗暴的,初始也是抱着试一试的想法,也没想到就成功了。
首先打开百度,然后搜索引擎内输入 “thinkphp5.0漏洞”,看到很多大佬的分析,随便点开一个链接,拿走大佬写好的payload。(当然这个paylaod自己也要根据实际情况做一点小改变,根据页面多观察几次来进行改动。如果网站漏洞已经修复了再去测试肯定不会成功了。)
开始漏洞复现:
利用system函数远程命令执行payload:
http://xxx.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
如图
我们不难看出当前网站确实存在并且能够执行系统命令,后面的测试方法就比较大众化了,容笔者稍微说下,各位看官一看就懂:
1、首先看下自己当前权限是否是管理员权限,如果是再好不过,不然后面还得想方法进行提权。(emm出现thinkphp漏洞已经很不应该了,如果这里再是管理员权限的话,网站的管理员老哥应该好好反省下了)
2、然后再上传一句话木马,菜刀链接,基本到这就差不多了。(不要随便操作哦)
3、通过相关平台将此漏洞告诉相关厂商。(xx不规范,牢底坐到穿)
这里不是原理分析哈,只是笔者一点浅薄的看法和经验。
笔者发现thinkphp框架搭好以后,页面有如下图所示的一些字体。
然后又通过观察之前所构造的payload:
http://xxx.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
想到谷歌搜索引擎强大的搜索功能 ,于是构造语句“ thinkphp十年磨一剑 inurl:index.php”(说实话结果我也是吓了一跳,)
搜到大量使用该框架的网站,而且通过钟馗之眼一类的搜索引擎通过搜索 “十年磨一剑 - 为API开发设计的高性能框架 [ V5.0+版本由+七牛云+独家赞助发布+]”也能搜索到大量此类网站。
据此可见有很多网站再使用thinkphp 5.0这一版本儿框架,可能搜到的这些网站有一些管理员已经修复该版本儿漏洞,但是应当还会有一大部分管理员仍未曾修复该漏洞。(想必这点大家都会想到,而且会有黑客用此类方法批量拿站)
通过thinkphp 这一版本儿漏洞,笔者想到其实蛮多的。
1、一些cms网站的漏洞挖掘方式其实和笔者所提到的thinkphp漏洞挖掘的方式还是比较一致的,都有某些方面的特征,比如版本号,url组成等等。这类通用型漏洞在利用其来技术门槛相对较低,比如笔者通过信息收集发现大量类似网站,一旦爆发危害蛮大,之前很多的事件儿都说明了这个问题。(这个漏洞挖掘指的是别人已经发布过的漏洞,而不是去挖掘还未曾发现的漏洞)
2、很多网站的管理者(中小型网站)都不具备安全意识,等到安全问题一旦爆发悔之晚矣。往往出现这类漏洞(出现很长时间却没修复的漏洞)的网站一般是中小型网站,当然大点儿的网站可能也有,但是相较于这类网站就少了。
3、人是安全的尺度这句话不假,管理网站的是人,但是往往安全和可用性又是相对的,无法去追求过度的安全,这就造成了一些漏洞的存在其实是在所难免的。即便这个网站的管理者能够想到很多很多问题,但是可能某一天他也会犯一些失误,或者配置失误或者删库,不要以为删库这种骚操作不会出现在自己身上。
emm希望有一天出现一个啥绝对的安全,这样我们就能愉快的转行,各位大佬和同僚也能实现自己的梦想,开超市的开超市,卖煎饼果子的卖煎饼果子 。。。。。若干年后又是一段传奇啊hhhh!!!
漏洞修复建议:该版本儿thinkphp漏洞(大部分漏洞修复方式)修复最简单的修复方式就是升级到最新版本,打补丁,或者进行手动修复等等。
当然还有一个问题也需要进行修复,就是笔者前面所说输入一个不存在的路径或文件页面会抛出很多系统相关信息以及路径,一旦和该网站别的漏洞相结合后患无穷。
关于相关搜索引擎网站应该加以限制。
希望以上东西能够帮到大家。
*本文原创作者:xianling,本文属FreeBuf原创奖励计划,未经许可禁止转载