2024.3.26学习总结

一,正则匹配

正则匹配是用来搜索,匹配,替换的一种字符串模式,使用正则匹配可以让搜索匹配的语句更加简洁,在php中会使用一些函数来处理正则匹配

常用的语法:
  字符类
  • [abc]: 匹配单个字符a、b或c
  • [^abc]: 匹配除了a、b和c之外的任意字符
  • [a-z]: 匹配任意小写字母
  • [A-Z]: 匹配任意大写字母
  • [0-9]: 匹配任意数字
通用原子
  • .: 匹配任意字符
  • \d: 匹配任意数字,等价于[0-9]
  • \w: 匹配任意字母、数字或下划线,等价于[a-zA-Z0-9_]
  • \s: 匹配任意空白字符,如空格、制表符等
  • \S: 匹配除了空格符之外
  • \W:匹配除了字母,数字,下划线之外
限定符

定位符
  • ^: 匹配行的开头
  • $: 匹配行的结尾
  • \b: 匹配单词边界
[BJDCTF 2020]ZJCTF,不过如此

这题涉及到了preg_replace/e模式绕过,所以我觉得要先了解一下正则匹配才会好理解一些。

preg_replace函数是一个正则的搜索替换函数

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

 preg_replace ( 正则表达式,替换,目标字符串,最大替换次数[默认-1],替换次数 )

在/e模式下,第一个位置和第三个位置都是可控的变量,也就是说,正则匹配和目标字符串都能控制

preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str)

foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}

当preg_replace匹配到符号正则的字符串时,就会把替换的字符串当做代码执行,但是替换字符串的位置却固定为字符串,这个字符串的含义为\1,所以这里代表访问临时缓冲区中的第一个子匹配项,也就是第一个位置

看看题目,常规的GET传参和php伪协议,值得一说的是file_get_contents是读取文件的函数,所以传入文件的类型才能读取,所以需要用到data://来写入,在用php://filter读取next.php中的信息

text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php

得到base64编码,解码能看到php代码

preg_replace/e模式,id这个传参好像没有用到,这里的思路应该是,看到getFlag(),并且通过它来执行eval命令,所以在上面就应该调用到这个对象。那么就要控制$re,$str,去查了资料,$re这个位置如果想要用.*,匹配任意字符的话,在用\.*做参数传入会被解析为\_*,所以改用\S*匹配(应该是属于利用通配符来匹配,进行任意的匹配来执行函数,访问目标函数)

\S*=${getFlag()}

getFlag(),就是缓冲区中的第一个位置,就访问了getFlag,经过foreach遍历数组,\s*=>getFlag,这样就调用了getFlag

cmd=phpinfo();

这题我看有些wp,在其他平台的flag可以再flag里面查看,但是NSSCTF的是空的,在phpinfo里面

所以我就写phpinfo

二,RCE(getallheaders(),无参数)

getallheaders()

获取当前请求的所有请求头信息。(该函数不需要参数,因为是获取请求头信息,所以在请求头上进行命令的执行)

返回值:array(返回二维数组)

<?php

foreach (getallheaders() as $name => $value) {
    echo "$name: $value";
}
?>

无参数RCE的一些函数,一般是搭配使用

[鹏城杯 2022]简单的php

看题,参数长度小于等于80,并且过滤了字母数字,属于无字母了,取反绕过

else if里面的‘;’,说明进行没有参数传参来进行preg_replace函数

payload

code=system(current(getallheaders()))

进行取反,在二维数组拼接时要用[!%FF]

<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'current');
echo "\n";
echo urlencode(~'getallheaders');
?>

在请求头执行ls等语句查询目录

最后加转义符绕过(这里的绕过是发现cat不了flag,所以尝试出来的),拿到flag

[FSCTF 2023]细狗2.0

记录这题是为了记录,在没有回显时,不一定就是使用tee命令,有些可以通过其他的位置来达到回显的目的

看题目,正常输入个1试试水,看看什么情况

进入传参后的页面,一开始认为在"1"这个位置进行命令执行,但是发现怎样都拿不到信息

 然后去看了wp,后面的“洗洗睡吧”,这个位置是在命令执行之后显示的,所以可以在这个位置进行命令执行,来拿到信息

 存在一个空格绕过,而且我用system执行不了

1;ls${IFS}/

 cat和flag也是被过滤了

1;c\at${IFS}/f\lag

三,php标签

php标签用于包裹,嵌入PHP代码。在标签中的代码会被服务器解析为PHP代码,并在服务器端执行。这个标签可以用于任何PHP代码,包括变量声明、函数定义、逻辑判断、循环等等。

 常见的标签有

<?php echo "hellow";?>
<?php echo "hellow"; //省略?>
<? echo "hellow";?>
<?= phpinfo();?> //<?=相当于echo的用法(在最近的考核中也是涉及到了)
<script language="php"> echo "hellow"; </script>
[FSCTF 2023]EZ_eval

先看源码

为什么会想到用<?php>的形式呢,是因为在eval函数中在末尾拼接了?>,所以觉得应该用php标签

正则过滤了一些命令,不过可以用转义符来绕过,还存在空格过滤,用%09;之后的字符替换中把?用空格替换了,也就导致php标签要选用长标签,长标签中不存在?

word=<script%09language="php">system('ls%09/');

<script%09language="php">system('c\at%09/fl\ag');

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么跟着高手还是亏损?fpmarkets10秒解答

各位投资者&#xff0c;不知道你们有没有遇见这样的情况&#xff1f;不管是别人能够持续盈利的技术指标&#xff0c;还是业内知名的行业专家&#xff0c;只要是我们这些普通的投资者一旦使用持续盈利的技术指标&#xff0c;或者跟随专家顾问的信号同时在同一个方向建仓&#xf…

Go-Gin-Example 第八部分 优化配置接口+图片上传功能

文章目录 前情提要本节目标 优化配置结构讲解落实修改配置文件优化配置读取及设置初始化顺序第一步 验证 抽离file 实现上传图片接口图片名加密封装image的处理逻辑编写上传图片的业务逻辑增加图片上传的路由 验证实现前端访问 http.FileServerr.StaticFS修改文章接口新增、更新…

基于单片机智能数字温度采集报警器系统设计

**单片机设计介绍&#xff0c;基于单片机智能数字温度采集报警器系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能数字温度采集报警器系统设计的核心目标是通过单片机实现温度的实时采集、显示以及超温报警…

琴童投稿发表论文

《琴童》是由国家新闻出版总署批准&#xff0c;中文天地出版传媒集团股份有限公司主管、百花洲文艺出版社有限责任公司主办的一本音乐素质教育期刊。本刊的办刊宗旨为&#xff1a;为中小学生普及音乐知识、提高音乐教育水平、促进素质教育服务。2008年、2010年、2014年、2015年…

镭速如何解决UDP传输不通的问题

我们之前有谈到过企业如果遇到UDP传输不通的情况&#xff0c;常见的一些解决方式&#xff0c;同时也介绍了一站式企业文件传输方式-镭速相关优势&#xff0c;如果在实际应用中&#xff0c;若镭速UDP传输出现不通的情况&#xff0c;需要按照网络通信的一般性排查方法以及针对镭速…

ESP32学习---ESP-NOW

ESP32学习---ESP-NOW 基于Arduino IDE环境获取mac地址单播通讯一对多通讯多对一通讯多对多通讯模块1代码模块2模块3 广播通讯 基于ESP-IDF框架 乐鑫编程指南中关于ESP-NOW的介绍&#xff1a;https://docs.espressif.com/projects/esp-idf/zh_CN/v5.2.1/esp32/api-reference/net…

探秘开发公司内部,开发小程序只要几百块?

做一个微信小程序大概需要多少钱&#xff1f; 在考虑开发微信小程序之前&#xff0c;许多商家和企业都会关心开发费用这个问题&#xff0c;并且可能会对比多家公司的报价。那么&#xff0c;开发一个微信小程序大概需要多少费用呢&#xff1f;下面我们简单介绍一下小程序开发的…

思考:开启MMU瞬间可能出现的多种问题以及多种解决方案

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; (说明本文的介绍都是基于armv8-aarch64或armv9硬件架构) 在mmu未开启阶段&#xff0c;PC操作的都是物理地址执行程序&#xff0c;这样看起来一切正常&#xff0c;没啥问题。 例如…

【Leetcode】top 100 图论

基础知识补充 1.图分为有向图和无向图&#xff0c;有权图和无权图&#xff1b; 2.图的表示方法&#xff1a;邻接矩阵适合表示稠密图&#xff0c;邻接表适合表示稀疏图&#xff1b; 邻接矩阵&#xff1a; 邻接表&#xff1a; 基础操作补充 1.邻接矩阵&#xff1a; class GraphAd…

蓝桥杯第1593题——二进制问题

题目描述 小蓝最近在学习二进制。他想知道 1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。你能帮助他吗&#xff1f; 输入描述 输入一行包含两个整数 N 和 K。 输出描述 输出一个整数表示答案。 输入输出样例 示例 输入 7 2输出 3评测用例规模与约定 对于 30% …

软件测试工作中需要的Linux知识,一篇文章就够了

01、Linux基础 1、Linux系统简单介绍 Linux是一套免费使用, 支持多用户、多任务、支持多线程和多个核心CPU的操作系统&#xff1b;很多中型, 大型甚至是巨型项目都在使用Linux。 Linux的发行版说简单点就是将Linux与应用软件做一个打包, 目前市面上比较知名的发行版有: Ubun…

Free RTOS day2

1.思维导图 2.使用PWMADC光敏电阻完成光控灯的实验 int adc_val0;//用于保存ADC采样得到的数值 float volt0;//用于保存电压值 int main(void) {MX_GPIO_Init();MX_DMA_Init();MX_TIM1_Init();MX_USART1_UART_Init();MX_ADC_Init();MX_TIM3_Init();HAL_TIM_PWM_Start(&hti…

代码随想录算法训练营第二十七天|131.分割回文串、93.复原IP地址

文档链接&#xff1a;https://programmercarl.com/ LeetCode131.分割回文串 题目链接&#xff1a;https://leetcode.cn/problems/palindrome-partitioning/ 思路&#xff1a;把回溯的树画出来就好很多。startIndex用来控制切割的位置 例如对于字符串abcdef&#xff1a; 组…

实现offsetof宏以及交换一个整数二进制奇偶位的宏

目录 1. offsetof宏2. 交换奇偶位 1. offsetof宏 我们想用宏来实现offsetof函数,首先要了解这个函数的用法。 1.1 offsetof函数的介绍及用法 &#xff08;1&#xff09;功能&#xff1a;用来计算结构体中一个成员在该结构体中的相对起始位置的偏移量&#xff0c;单位是字节。 …

Golang goroutine 同步原语:sync 包让你对并发控制得心应手

在 Go 语言中&#xff0c;不仅有 channel 这类比较易用且高级的同步机制&#xff0c;还有 sync.Mutex、sync.WaitGroup 等比较原始的同步机制。通过它们&#xff0c;我们可以更加灵活地控制数据的同步和多协程的并发。 资源竞争 在一个 goroutine 中&#xff0c;如果分配的内存…

Python多任务处理---多线程

引入 生活中&#xff0c;我们在电脑上打开了一个word, 这个word对操作系统来说就是一个进程。我们在进行word操作的时候&#xff0c;比如在你打字的时候&#xff0c;该word同时可以进行文字检查。发现了没&#xff0c;在同一个进程中&#xff0c;我们也可以进行同时操作。…

【Pytorch学习笔记(二)】张量的创建(补充)

一、知识回顾 我们在博客《张量的创建与访问》中已经讨论了一些张量的创建方法如torch.CharTensor()、torch.FloatTensor()以及torch.zeros()等张量创建方法&#xff0c;但由于其仅仅介绍了cpu版本torch下张量的创建方法和只有具体数据类型张量&#xff0c;本节内容旨在补充gp…

论文速览 | IEEE TCI, 2022 | 单光子级非视距成像:估计强度与优化重建

注1:本文系"计算成像最新论文速览"系列之一,致力于简洁清晰地介绍、解读非视距成像领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, SIGGRAPH, TPAMI; Light‑Science & Applications, Optica 等)。 本次介绍的论文是:<2…

【Git】命令行使用体验大大优化的方法

Git的优化使用 相信很多人&#xff0c;在使用git作为版本管理工具时都会感受到它的方便&#xff0c;但是也会有一些问题困扰着我们&#xff0c;让我们觉得使用体验不是很好。我在使用git的过程中就发现了几个问题&#xff1a;写commit费时、怎么做多人开发的代码审查等等。今天…

代码随想录算法训练营第二十五天| 216.组合总和III,17.电话号码的字母组合

题目与题解 216.组合总和III 题目链接&#xff1a;216.组合总和III 代码随想录题解&#xff1a;216.组合总和III 视频讲解&#xff1a;和组合问题有啥区别&#xff1f;回溯算法如何剪枝&#xff1f;| LeetCode&#xff1a;216.组合总和III_哔哩哔哩_bilibili 解题思路&#xf…