php聪聪lode,Phpyun设计缺陷致任意文件删除可致重装getshell或注入

设计缺陷可致任意文件删除 删除lock可直接进行重装直接达到getshell。 或者删除某文件也可以来注入了。 也可导致破坏sql语句。 依旧官网下的最新版。 在model/ajax.class.php中 function delupload_action(){if(!$this-uid !$this-username $_COOKIE[usertyp

设计缺陷可致任意文件删除 删除lock可直接进行重装直接达到getshell。

或者删除某文件也可以来注入了。

也可导致破坏sql语句。

依旧官网下的最新版。

在model/ajax.class.php中

function delupload_action(){

if(!$this->uid && !$this->username && $_COOKIE["usertype"]!=2){

echo 0;die;

}else{

$dir=$_POST[str][0];

$isuser = $this->obj->DB_select_once("company_show","`picurl`='$dir'");

if($isuser['uid']==$this->uid)

{

echo @unlink(".".$dir);

}else{

echo 0;die;

}

}

}

0x01 破坏语句执行

$dir=$_POST[str][0];

$isuser = $this->obj->DB_select_once("company_show","`picurl`='$dir'");

这里可以看到$dir 如果这时候我们提交的是一个字符串的话 [0] 就成了截取字符的了。

截取的是第一个字符。 因为phpyun全局会对'转义变成\' (单引号会被实体化)

截取第一个字符的话 就是一个\了。

659ed713cb4a43e000b34730b116eb1e.gif

成功引入了转义符。 如果有两个参数可控的话可以 '\',uesr()#' 类似这样的注入

可是这里只有一个参数 所以能引入转义符的话 也无法注入 只能破坏下语句。

_________________________________________________________________________

0x02 任意文件删除 删lock 可致Getshell

首先来看他这里的判断

$dir=$_POST[str][0];

$isuser = $this->obj->DB_select_once("company_show","`picurl`='$dir'");

if($isuser['uid']==$this->uid)

{

echo @unlink(".".$dir);

}else{

echo 0;die;

}

}

这个判断的意思大概是 $isuser['uid']==$this->uid 这个发布的人必须是你

然后才能进行删除操作。

但是在这里 如果DB_select_once("company_show","`picurl`='$dir'");这个查询出来的是空 然后$this->uid也是空的话 那么就通过了这个判断。

if(!$this->uid && !$this->username && $_COOKIE["usertype"]!=2){

echo 0;die;

在这里 由于用的是&& 所以只有不满足这三个才会退出

在这里我们不登录会员 然后前面那两个都为true了。

但是$_COOKIE["usertype"]!=2 如果这个为false的话 就不会执行die了。

而且COOKIE刚好也是用户可控的。

来测试一下。

50a20c8d78e62b3d84b290a73579e18b.gif

aa5b4f459e94163a953c3aed3e3461ee.gif

可以看到COOKIE usertype为2的时候就不会退出了。

这时候由于我们并没有登录 所以$this->uid 为空(0)

如果这时候$isuser = $this->obj->DB_select_once("company_show","`picurl`='$dir'");

$dir 并不存在于这个表中的话(我们要删除的文件自然是不会在这个表中的)

那么$isuser['uid'] 也为空。(NULL)

if($isuser['uid']==$this->uid)

{

echo @unlink(".".$dir);

这时候就通过了这个判断 可以执行unlink了。

然后$dir也可控。

那不就可以删除任意文件了?

这里我们来删除data/phpyun.lock 达到重装

因为他这之前unlink(".".$dir) 定义了一个. 所以直接加个/就行了

删除的是根目录的构造一下目录。

19d9ea0794a17017e8837f9ae5da6b04.gif

返回了1 成功删除了。

这里删除了lock就可以进行重装了。

f220242ba082a2c311847d694cc6d584.gif

这里不会被转义。

a2c66880411a51471928904b201a8da1.gif

访问首页就成功执行代码了。

_________________________________________________________________________

0x03 如果不想重装别人系统 但是要注入呢?

在member/model/com.class.php中

function product_action()

{

$this->public_action();

$delid=$_GET['delid'];

if($delid){

if(is_array($delid)){

$ids=$this->pylode(',',$delid);

$layer_type=1;

}else{

$ids=$delid;

$layer_type=0;

}

$row=$this->obj->DB_select_all("company_product","`id` in (".$ids.") and `uid`='".$this->uid."'","`pic`");

$delid=$_GET['delid']; 如果不是数组的话就没过滤 直接带入到了查询当中。

而且没单引号

这里直接删除data/db.safety.php 和 include\webscan360\360safe\360webscan.php

就能注入了。

e8dd9dd0bc34ee3919c87bf1ae310f55.gif

09213f7c05ad1d061f489e08077870e3.gif

两个都是返回的1 说明成功删除了、

就能来注入了。

7f78450c7c6fa52bb69f17e7f26d7e0d.gif

ok 因为删除了拦截文件 所以无拦截。

修复方案:

修改一下逻辑。

把&&改成|| 咋样? 只是个建议 没多思考。 还是你们自己想想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值