此漏洞发出来已经有段时间了,转过来给小伙伴们学习一下,文章结合漏洞时代和cnnetarmy博客内容,在此感谢。


代码分析:


主要的问题是phpcmsmodulesmemberindex.php 130行到140行


phpcmsV9.6.0注入+前台getshell


这里加载了两个文件.位于当前目录下的fields中的member_input.class.php。因为这里主要是调用了member_input.文件的开头就写清楚了


phpcmsV9.6.0注入+前台getshell


做一点v9的常识


phpcmsV9.6.0注入+前台getshell

因此在member_input.class.php中调用了

phpcmsmodelsitemodel_field_model.class.php

继续查看,发现调用的是


phpcmsV9.6.0注入+前台getshell


加载了数据库配置.然后读取了表model_field.那么这个流程就是需要从model_field中匹配某些东西。继续跟get函数


phpcmsV9.6.0注入+前台getshell

注意观察到


$func = $this->fields[$field]['formtype'];

if(method_exists($this, $func)) $value = $this->$func($field, $value);


phpcmsV9.6.0注入+前台getshell


查看formtype其实是edit.查看下edit函数

phpcmsmodulesmemberfieldseditorinput.inc.php


phpcmsV9.6.0注入+前台getshell


发现这里调用了$this->attachment->download


phpcmsV9.6.0注入+前台getshell


传输到地址经过new_stripslashes处理


phpcmsV9.6.0注入+前台getshell

限制了后缀为$ext = 'gif|jpg|jpeg|bmp|png'。同时限定了传输到必须是网址


("/(href|src)=(["|']?)([^ "'>]+.($ext))\2/i"


这个是一个实现远程图片自动上传功能的函数,用户提交的content中若有图片地址则自动将远程的地址copy到本地!在清楚content中的图片路径时候采用preg_match_all 正则匹配(红色代码部分),虽然有扩展名的验证但是很容易就能绕过,我们只需要将shell地址修改为:


http://mysite/shell.php?1.gif就可以绕过了,mysite是自己的网站地址,如果自己网站下解析php的话那么php内容应该是';?> 否则下载后得到的文件内容是空白,copy访问远程文件也像IE一样,访问后取得解析后的内容。


那么整个流程久清楚了..传输modelid起到了决定性的作用.只有在1,2,3,11的时候才会触发edit函数.同时可以赋值content.


phpcmsV9.6.0注入+前台getshell


phpcmsV9.6.0注入+前台getshell


GETSHELL代码:

phpcmsV9.6.0注入+前台getshell

phpcmsV9.6.0注入+前台getshell


另附上luan表哥的另一个脱裤脚本:


phpcmsV9.6.0注入+前台getshell


原文地址:

http://0day5.com/archives/4368/

phpcmsV9.6.0注入+前台getshell

phpcmsV9.6.0注入+前台getshell

你可能喜欢

SQLmap注入教程

burp结合sqlmap进行后台登录框post注入

动态论坛经典的注入漏洞利用



始发于微信公众号: 黑白之道

本文由 华盟网 作者:congtou 发表,其版权均为 华盟网 所有