[GXYCTF2019]禁止套娃(特详解)

刚打开页面什么都没有,抓包也什么都没有

image-20240129230547068

那就dirsaerch扫一下,发现状态码都是429,访问太快了(这里很多师傅都没有说明或者说清楚)

image-20240129230809356

这里改了一下线程(kali自带的,如果用的脚本要加前面要加python)

dirsearch -u http://d4300875-40df-4a49-a897-d48abc13126c.node5.buuoj.cn:81/ -e php -s 1

发现.git文件,原来是git泄露

image-20240129231035791

对于git泄漏我们可以使用Githack工具 https://github.com/lijiejie

下载后,直接运行脚本

python GitHack.py http://d4300875-40df-4a49-a897-d48abc13126c.node5.buuoj.cn:81/.git    

成功下载了index.php文件

image-20240129231353500

源码

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {// echo $_GET['exp'];@eval($_GET['exp']);}else{die("还差一点哦!");}}else{die("再好好想想!");}}else{die("还想读flag,臭弟弟!");}
}
// highlight_file(__FILE__);
?>

解释一下关键代码

  1. if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {:使用正则表达式检查 "exp" 参数中是否包含某些危险协议,如 data://、filter://、php://、phar://。如果包含,则输出错误消息。

  2. if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {:检查是否在 "exp" 参数中存在函数调用,并使用递归匹配来验证函数调用的合法性。如果合法,则执行下一步。

    '/[a-z,_]+\((?R)?\)/':这是一个正则表达式,用于匹配类似函数调用的字符串。让我们分解这个正则表达式:

    • [a-z,_]+:匹配任意长度的由小写字母、逗号和下划线组成的字符串,这部分表示函数名。

    • \(:匹配左括号 "("。

    • (?R)?:这是一个递归匹配的部分,表示匹配任何可能包含函数调用的字符串,递归地调用整个正则表达式。

    • \):匹配右括号 ")"。

    总体而言,这个正则表达式用于匹配类似于 function_name(...) 这样的字符串。一个合法的表达式也可以是a(b();)

  3. if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {:检查 "exp" 参数中是否包含某些关键词,如果包含,则输出错误消息。这是为了防止直接调用一些敏感函数或操作。

最后通过eval拿到flag,合着意思就是只能使用无参函数的嵌套来读取flag.php文件

看了其他师傅的博客有了思路,太伟大了!!

方法一

先介绍几个函数

highlight_file() 函数对文件进行语法高亮显示,本函数是show_source() 的别名
next() 输出数组中的当前元素和下一个元素的值。
array_reverse() 函数以相反的元素顺序返回数组。(主要是能返回值)
scandir() 函数返回指定目录中的文件和目录的数组。
pos() 输出数组中的当前元素的值。
localeconv() 函数返回一个包含本地数字及货币格式信息的数组,该数组的第一个元素就是"."。

payload:

exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));

思路:

loacleconv 函数会固定返回一个 . 然后pos将我们获得的 .返回到我们构造的 payload 使得 scandir能够返回当前目录下的数组(换句话说,就是读出当前目录下的文件) rray_reverse()以相反的顺序输出(目的是以正序输出查询出来的内容)然后 next 提取第二个元素(将.过滤出去),最后用highlight_file()给显示出来

image-20240129232053232

方法二 上面 的正则过滤中 其实并没有过滤掉 session_id() 所以我们可以通过在数据包里加入session,使用 session_id来获取 flag session_id() 可以用来获取/设置 当前会话 ID。 在我们使用 session_id()的时候 需要使用session_start()来开启session会话 我们尝试构造payload

?exp=highlight_file( session_id(session_start()));

传参然后抓包,加cookie

image-20240129233149186

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

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

相关文章

ETL能实现什么流程控制方式?

随着大数据时代的到来&#xff0c;数据处理工具成为各个行业中不可或缺的一部分。运用数据处理工具&#xff0c;能够大幅度帮助开发人员进行数据处理等工作&#xff0c;以及能够更好的为企业创造出有价值的数据。那在使用ETL工具时&#xff0c;我们往往会通过ETL平台所携带的组…

分布式系统面试的秘籍:深入探讨事务、幂等性和补偿事务,掌握二/三阶段提交,了解Sagas事务模型和分布式ID的实战应用!

1、分布式幂等性如何设计&#xff1f;并举例说明 设计分布式系统的幂等性是确保在面对重复请求或操作时系统能够产生相同结果的重要方面。以下是一些设计方法&#xff0c;并结合一个简单的例子说明&#xff1a; 设计方法&#xff1a; 唯一标识符&#xff08;ID&#xff09;:…

centos7上安装mysql5.7并自定义数据目录路径

1、卸载mariadb rpm -qa |grep mariadb #查出来的结果是mariadb-libs-5.5.68-1.el7.x86_64 rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps #卸载查到的结果 2、官网下载响应的tar.gz包&#xff0c;比如mysql-5.7.38-el7-x86_64.tar.gz &…

跨境ERP定制趋势预测:数字化转型助您赢得市场先机

随着全球贸易的不断融合和发展&#xff0c;跨境业务已成为许多企业拓展市场的重要途径。在这个背景下&#xff0c;ERP定制正逐渐成为企业数字化转型的关键利器。本文将为您预测跨境ERP定制的趋势&#xff0c;并探讨数字化转型如何助您赢得市场先机。 ERP定制趋势预测 1. 数据…

springboot3+vue3支付宝在线支付案例-渲染产品列表页面

springboot3vue3支付宝在线支付案例-渲染产品列表页面&#xff01;今天折腾了半天&#xff0c;完成了vue3前端项目的产品列表选染。 我们使用到了技术有axios&#xff08;发送跨域的请求获取产品&#xff09;。pinia&#xff08;绑定数据&#xff09;, import { ref } from vu…

pve宿主机更改网络导致没网,pve更改ip

一、问题描述 快过年了&#xff0c;我把那台一直在用的小型服务器&#xff0c;带回去了&#xff0c;导致网络发生了变更&#xff0c;需要对网络进行调整&#xff0c;否则连不上网&#xff0c;我这里改的是宿主机&#xff0c;不是pve虚拟机中的系统。 二、解决方法 pve用的是…

第九节HarmonyOS 常用基础组件14-DataPanel

1、描述 数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进行展示。 2、接口 DataPanel(options:{values: number[], max?: numner, type?: DataPanelType}) 3、参数 参数名 参数类型 必填 描述 values number[] 是 数据值列表&#xff0c;最多含9条数…

向日葵企业“云策略”升级 支持Android 被控策略设置

此前&#xff0c;贝锐向日葵推出了适配PC企业客户端的云策略功能&#xff0c;这一功能支持管理平台统一修改设备设置&#xff0c;上万设备实时下发实时生效&#xff0c;很好的解决了当远程控制方案部署后&#xff0c;想要灵活调整配置需要逐台手工操作的痛点&#xff0c;大幅提…

阿里二面:SpringBoot同时可以处理多少个请求?直接懵了。。。

SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性&#xff0c;为开发者提供了构建高性能后端服务的便利。然而&#xff0c;当面临高并发场景时&#xff0c;理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重要。在Spring Boot中&#xff0c;应用程序对HTTP请…

代码随想录 Leetcode404.左叶子之和

题目&#xff1a; 代码(首刷看解析&#xff09;&#xff1a; class Solution { public:int sumOfLeftLeaves(TreeNode* root) {int res 0;if (root nullptr) return res;queue<TreeNode*> que;TreeNode* cur root;que.push(cur);int size 0;while (!que.empty()) {s…

Java中支持父类转子类,不支持子类转父类吗?

不&#xff0c;我的意思是正好相反。在 Java 中&#xff1a; 子类转父类&#xff08;向上转型&#xff09;&#xff1a;这是自动的且总是安全的。子类是父类的一个特化&#xff0c;因此子类的对象可以被视为是父类的一个实例。例如&#xff0c;如果 ExamineApproveNode 是 Base…

windows 远程桌面 复制粘贴 无效

目录 rdpclip.exe进程没有运行或运行异常。 解决办法&#xff1a; 1、在服务器上打开任务管理器&#xff0c;查看进程&#xff0c;找到 rdpclip.exe 进程&#xff0c; 关闭。 2、重新运行此程序 rdpclip.exe进程没有运行或运行异常。 rdpclip 是让rdp协议&#xff08;远程…